iphone - 在 iPhone 应用程序中创建多个日志文件

标签 iphone ios ipad logging nslog

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

任何想法,我该怎么做?

最佳答案

从 Lumberjack 框架开始:https://github.com/robbiehanson/CocoaLumberjack

I want to put some log statements into one file while some into different file

有几种方法可以实现这一点。这是一个例子: 添加 2 个文件记录器:

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

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

因此此时,所有日志语句都将定向到 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__)

显然,您可以获得比这更高级的功能(例如,添加对日志级别的支持等),但需要注意的是 ALog 的“上下文”为 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]];

有关这些主题的更多信息可以通过 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/wiki/CustomLogLevels

关于iphone - 在 iPhone 应用程序中创建多个日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7137850/

相关文章:

iphone - 应用程序不在设备上运行 - 如果不使用 self.attribute,我无法从其子类调用属性的类

iphone - 重新加载/刷新按钮刷新 UIView 中的对象/数据

android - 在 HTML 中构建底部工具栏并在 IPHONE 上显示它

iphone - uitextview dataDetectorTypes 不适用于像 bitly 链接这样的短链接

ios - 手动屏幕跟踪在 Firebase (iOS) 中不起作用

c# - Visual Studio 2017 Info.plist 在选项卡更改后丢失分发目标

iPhone MKMapView注释观察者可选择一次

ios - 试图添加一个已经有父节点 : <SKScene> name :'(null)' frame:{{0, 0}, {1, 1}} 的 SKNode

ios - 对于 iOS,如何在按钮内创建可拖动按钮?

iOS CoreBluetooth 不扫描 iPad Air 中的服务