1

ご存知のように、オブジェクティブ C で ASL (Apple System Logger) API を使用してログを読み取ることができ、asl_search を使用して特定のアプリケーション ログを取得することもできます。しかし問題は、ログが作成された時刻が asl の出力に含まれていないことです。たとえば、Apple System Logger でディレクトリ /var/log の system.log を開くと、次のようなログが表示されます。

11 月 28 日 09:19:37 ローカルホストのブートログ [0]: BOOT_TIME 1354123177 0

しかし、目的 C で asl をクエリすると、ログが作成された時刻を除くログのすべての属性が報告されます。つまり、上記の例では、asl_search は Nov 28 09:19:37 を報告しません。
ログの作成時間を含める方法はありますかObjective Cでaslをクエリすると? これが不可能な場合、ログの時間を取得する別の方法は何ですか?


これは私のコードです。/var/log の system.log ファイルで確認できるログの時間は、私のコードの出力には表示されないことに注意してください。

int main (int argc, const char * argv[]) {

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
aslmsg q, m;
int i;
const char *key, *val;
q = asl_new(ASL_TYPE_QUERY);
asl_set_query(q, ASL_KEY_SENDER, "bootlog", ASL_QUERY_OP_EQUAL);

aslresponse r = asl_search(NULL, q);

while (NULL != (m = aslresponse_next(r)))
{
    NSMutableDictionary *tmpDict = [NSMutableDictionary dictionary];

    for (i = 0; (NULL != (key = asl_key(m, i))); i++)
    {
        NSString *keyString = [NSString stringWithUTF8String:(char *)key];

        val = asl_get(m, key);

        NSString *string = [NSString stringWithUTF8String:val];
        [tmpDict setObject:string forKey:keyString];
    }

    NSLog(@"%@", tmpDict);

}
aslresponse_free(r);

[pool drain];
return 0;

}

4

2 に答える 2

3

ログ メッセージのタイムスタンプは、ASL_KEY_TIMEメッセージ内のキーの値です。値は UNIX 時間 (1.1.1970 からの秒数) です。

NSDateログメッセージのタイムスタンプをに変換できます

NSDate *time = [NSDate dateWithTimeIntervalSince1970:(strtod(asl_get(m, ASL_KEY_TIME), NULL))];
于 2013-01-12T07:15:49.203 に答える