You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
2.6 KiB
100 lines
2.6 KiB
//
|
|
// FLEXSystemLogMessage.m
|
|
// FLEX
|
|
//
|
|
// Created by Ryan Olson on 1/25/15.
|
|
// Copyright (c) 2015 f. All rights reserved.
|
|
//
|
|
|
|
#import "FLEXSystemLogMessage.h"
|
|
|
|
@implementation FLEXSystemLogMessage
|
|
|
|
+ (instancetype)logMessageFromASLMessage:(aslmsg)aslMessage
|
|
{
|
|
NSDate *date = nil;
|
|
NSString *sender = nil, *text = nil;
|
|
long long identifier = 0;
|
|
|
|
const char *timestamp = asl_get(aslMessage, ASL_KEY_TIME);
|
|
if (timestamp) {
|
|
NSTimeInterval timeInterval = [@(timestamp) integerValue];
|
|
const char *nanoseconds = asl_get(aslMessage, ASL_KEY_TIME_NSEC);
|
|
if (nanoseconds) {
|
|
timeInterval += [@(nanoseconds) doubleValue] / NSEC_PER_SEC;
|
|
}
|
|
date = [NSDate dateWithTimeIntervalSince1970:timeInterval];
|
|
}
|
|
|
|
const char *s = asl_get(aslMessage, ASL_KEY_SENDER);
|
|
if (s) {
|
|
sender = @(s);
|
|
}
|
|
|
|
const char *messageText = asl_get(aslMessage, ASL_KEY_MSG);
|
|
if (messageText) {
|
|
text = @(messageText);
|
|
}
|
|
|
|
const char *messageID = asl_get(aslMessage, ASL_KEY_MSG_ID);
|
|
if (messageID) {
|
|
identifier = [@(messageID) longLongValue];
|
|
}
|
|
|
|
FLEXSystemLogMessage *message = [[self alloc] initWithDate:date sender:sender text:text messageID:identifier];
|
|
message->_aslMessage = aslMessage;
|
|
return message;
|
|
}
|
|
|
|
+ (instancetype)logMessageFromOSLog:(os_log_message_t)logMessage
|
|
{
|
|
abort();
|
|
return nil;
|
|
}
|
|
|
|
+ (instancetype)logMessageFromDate:(NSDate *)date text:(NSString *)text
|
|
{
|
|
return [[self alloc] initWithDate:date sender:nil text:text messageID:0];
|
|
}
|
|
|
|
- (id)initWithDate:(NSDate *)date sender:(NSString *)sender text:(NSString *)text messageID:(long long)identifier
|
|
{
|
|
self = [super init];
|
|
if (self) {
|
|
_date = date;
|
|
_sender = sender;
|
|
_messageText = text;
|
|
_messageID = identifier;
|
|
}
|
|
|
|
return self;
|
|
}
|
|
|
|
- (BOOL)isEqual:(id)object
|
|
{
|
|
if ([object isKindOfClass:[self class]]) {
|
|
if (self.messageID) {
|
|
// Only ASL uses messageID, otherwise it is 0
|
|
return self.messageID == [object messageID];
|
|
} else {
|
|
// Test message texts and dates for OS Log
|
|
return [self.messageText isEqual:[object messageText]] &&
|
|
[self.date isEqualToDate:[object date]];
|
|
}
|
|
}
|
|
|
|
return NO;
|
|
}
|
|
|
|
- (NSUInteger)hash
|
|
{
|
|
return (NSUInteger)self.messageID;
|
|
}
|
|
|
|
- (NSString *)description
|
|
{
|
|
NSString *escaped = [self.messageText stringByReplacingOccurrencesOfString:@"\n" withString:@"\\n"];
|
|
return [NSString stringWithFormat:@"(%@) %@", @(self.messageText.length), escaped];
|
|
}
|
|
|
|
@end
|