CocoaLumberjack是Mac和iOS上一个集快捷、简单、强大和灵活于一身的日志框架。其下载地址:
https://github.com/CocoaLumberjack/CocoaLumberjack/
在github上已经有近8000的star。
它自带了几种log方式,分别是:
DDASLLogger 将 log 发送给苹果服务器,之后在 Console.app 中可以查看;
DDTTYLogger 将 log 发送给 Xcode 的控制台;
DDFileLogger 将 log 写入本地文件。
打印一个 log 的流程大概就是这样的:
所有的 log 都会发给 DDLog 对象,其运行在自己的一个GCD队列(GlobalLoggingQueue),之后,DDLog 会将 log 分发给其下注册的一个或多个 Logger,这步在多核下是并发的,效率很高。每个 Logger 处理收到的 log 也是在它们自己的 GCD队列下(loggingQueue)做的,它们询问其下的 Formatter,获取 Log 消息格式,然后最终根据 Logger 的逻辑,将 log 消息分发到不同的地方。
因为一个 DDLog 可以把 log 分发到所有其下注册的 Logger 下,也就是说一个 log 可以同时打到控制台,打到远程服务器,打到本地文件,相当灵活。
对它进行了简单的封装SILog。效果如图:
核心代码如下:
{
static SILogger *_instance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instance = [[SILogger alloc] init];
_instance.isRuntimeLogEffective = i
isRuntimeLogEffectiveDefault;
});
return _instance;
}
+ (void)startWithLogLevel:(SILogLevel)logLevel
{
[self sharedInstance];
[[self sharedInstance] setLogLevel:logLevel];
}
- (instancetype)init
{
self = [super init];
if (self) {
// 启动Xcode Colors环境
setenv("XcodeColors", "YES", 0);
[[DDTTYLogger sharedInstance] setColorsEnabled:YES];
UIColor *pink = [UIColor colorWithRed:(255/255.0) green:(58/255.0) blue:(159/255.0) alpha:1.0];
[[DDTTYLogger sharedInstance] setForegroundColor:pink backgroundColor:nil forFlag:DDLogFlagInfo];
// sends log statements to Xcode console - if available
[[DDTTYLogger sharedInstance] setLogFormatter:self];
[DDLog addLogger:[DDTTYLogger sharedInstance]];
// sends log statements to Apple System Logger, so they show up on Console.app
[[DDASLLogger sharedInstance] setLogFormatter:self];
[DDLog addLogger:[DDASLLogger sharedInstance]];
}return self;}
- (NSString *)formatLogMessage:(DDLogMessage *)logMessage
{
NSString *logLevel = nil;
switch (logMessage->_flag)
{
case LOG_FLAG_ERROR:
logLevel = @"[ERROR] > ";
break;
case LOG_FLAG_WARN:
logLevel = @"[WARN] > ";
break;
case LOG_FLAG_INFO:
logLevel = @"[INFO] > ";
break;
case LOG_FLAG_DEBUG:
logLevel = @"[DEBUG] > ";
break;
default:
logLevel = @"[VBOSE] > ";
break;
}
NSString *formatStr = [NSString stringWithFormat:@"%@%@",
logLevel, logMessage->_message];
return formatStr;
}
- (void)setLogLevel:(SILogLevel)logLevel
{
_logLevel = logLevel;
switch (_logLevel) {
case SILogLevelDEBUG:
ddLogLevel = LOG_LEVEL_DEBUG;
break;
case SILogLevelINFO:
ddLogLevel = LOG_LEVEL_INFO;
break;
case SILogLevelWARN:
ddLogLevel = LOG_LEVEL_WARN;
break;
case SILogLevelERROR:
ddLogLevel = LOG_LEVEL_ERROR;
break;
case SILogLevelOFF:
ddLogLevel = LOG_LEVEL_OFF;
break;
default:
break;
}
}
//! 记录日志(有格式)
- (void)logLevel:(SILogLevel)level format:(NSString *)format, ...
{
if (format)
{
va_list args;
va_start(args, format);
NSString *message = [[NSString alloc] initWithFormat:format arguments:args];
va_end(args);
[self logLevel:level message:message];
}
}```
下载链接:https://github.com/sinceresk/SILog