ご存知のように、オブジェクティブ 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;
}