Rob*_*son 14
从Lumberjack框架开始:https://github.com/robbiehanson/CocoaLumberjack
我想将一些日志语句放入一个文件,而将一些日志语句放入不同的文件
有几种方法可以实现这一目标.这是一个例子:添加2个文件记录器:
fileLoggerA = [[DDFileLogger alloc] init];
fileLoggerB = [[DDFileLogger alloc] init];
[DDLog addLogger:fileLoggerA];
[DDLog addLogger:fileLoggerB];
Run Code Online (Sandbox Code Playgroud)
所以此时,所有日志语句都将定向到fileLogger1和fileLogger2.接下来,我们将为每个fileLogger添加一个"过滤器",以便它们忽略不针对它们的日志语句.
我们将通过创建2个不同的日志记录宏来实现:ALog()和BLog()
fileLoggerA只会从ALog()中写入日志语句.fileLoggerB只会从BLog()中写入日志语句.
要进行此设置,我们可以利用"日志记录上下文".你可以做一些简单的事情:
#define ALog(frmt, ...) SYNC_LOG_OBJC_MACRO(0, 0, 1, frmt, ##__VA_ARGS__)
#define BLog(frmt, ...) SYNC_LOG_OBJC_MACRO(0, 0, 2, frmt, ##__VA_ARGS__)
Run Code Online (Sandbox Code Playgroud)
显然你可以比这更高级(例如添加对日志级别的支持等)但需要注意的是ALog的"context"为1,而BLog的"context"为2.
现在您只需要创建一个"自定义格式化程序/过滤器".这是一个例子:
- (NSString *)formatLogMessage:(DDLogMessage *)logMessage
{
if (logMessage->logContext == theContextIShouldLog)
return logMessage->logMsg;
else
return nil;
}
Run Code Online (Sandbox Code Playgroud)
当然,将自定义格式化程序/过滤器添加到文件记录器:
[fileLoggerA setLogFormatter:[MyContextFilter filterWith:1]];
[fileLoggerB setLogFormatter:[MyContextFilter filterWith:2]];
Run Code Online (Sandbox Code Playgroud)
有关这些主题的更多信息可以通过Lumberjack项目页面找到:
https://github.com/robbiehanson/CocoaLumberjack/wiki/GettingStarted https://github.com/robbiehanson/CocoaLumberjack/wiki/CustomFormatters https://github.com/robbiehanson/CocoaLumberjack/wiki/CustomContext https:// github .COM/robbiehanson/CocoaLumberjack /维基/ CustomLogLevels