2011-08-21 127 views
3

我想在我的iPhone应用程序中创建两个日志文件。如果我使用freopen()将NSLog输出重定向到一个文件,那么所有的日志语句都会进入一个提到的文件。
但我想把一些日志语句放到一个文件中,而一些文件放到不同的文件中。

任何想法,我该怎么做?在iPhone应用程序中创建多个日志文件

回答

2

最好的方法是编写自己的记录器类作为您替代NSLog()替代的替代品。这样,您可以在运行时轻松确定应将哪些日志写入哪个文件。您的自定义类可以使用NLog()同时写入控制台。这似乎是最佳方法,因为freopen()只是批量重定向所有日志输出。

+0

这就是我的想法,但我正在寻找一些可以为我做的框架,我可以节省时间来编写自定义记录器。感谢建议。 – Anshul

14

开始与伐木工人框架:https://github.com/robbiehanson/CocoaLumberjack

我希望把一些日志报表合并成一个文件,而一些到不同的文件

有一对夫妇的方式来实现这一目标。这里有一个例子: 添加2文件记录器:

fileLoggerA = [[DDFileLogger alloc] init]; 
fileLoggerB = [[DDFileLogger alloc] init]; 

[DDLog addLogger:fileLoggerA]; 
[DDLog addLogger:fileLoggerB]; 

所以在这一点,所有的日志报表将得到引导到两个fileLogger1 & fileLogger2。接下来,我们将为每个fileLogger添加一个“筛选器”,以便它们忽略不针对它们的日志语句。

我们将创建2个不同的记录宏做到这一点:考勤()&博客()

fileLoggerA只能从写日志考勤记录语句()。 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__) 

很明显,你可以得到比这更先进的(如增加对日志级别等支持),但要注意的是考勤如何拥有1“背景”,并BLog有一个“上下文”2.

现在你只需要创建一个“自定义格式化程序/过滤器”。这里有一个例子:

- (NSString *)formatLogMessage:(DDLogMessage *)logMessage 
{ 
    if (logMessage->logContext == theContextIShouldLog) 
     return logMessage->logMsg; 
    else 
     return nil; 
} 

,当然,您的自定义格式/过滤器添加到文件记录器:

[fileLoggerA setLogFormatter:[MyContextFilter filterWith:1]]; 
[fileLoggerB setLogFormatter:[MyContextFilter filterWith:2]]; 

这些主题的更多信息可以通过伐木工人项目页面上找到:

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/wiki/CustomLogLevels

+0

现在这是不错的食谱,谢谢罗比:) –

+0

我试过这个,它看起来像两个文件记录器都指挥他们的输出到同一个文件。这是在设备和模拟器上。 – thegrinner

+0

感谢它为我的作品。 –

相关问题