如何禁用特定的oslog日志级别?

时间:2018-12-13 17:03:46

标签: ios swift logging oslog

对于以下功能:

let authenticationLogger = OSLog(subsystem: "com.Company.AppNameQA" ?? "Empty bundleIdentifier", category: "Authenticaiton)

如果要禁用/启用某个日志级别该怎么办?

当前使用API​​,我唯一能访问的是isEnabled功能:

authenticationLogger.isEnabled(.error) 

只会返回是否已启用。

2 个答案:

答案 0 :(得分:0)

我还没有尝试过。但我相信这是解决方案

docs中读取。

在以下部分中:

在调试时自定义日志记录行为

  

日志记录行为通常由系统控制。但是,同时   在macOS中进行调试,您可以为   子系统使用log 命令行工具的 config参数,而   以root用户身份登录。请参见清单5,其中显示了如何启用   子系统的调试级别日志记录。

为子系统启用调试级别的日志记录

$ sudo log config --mode "level:debug" --subsystem com.your_company.your_subsystem_name

使用日志工具的状态参数来检查子系统的当前日志记录级别。

检查子系统的日志级别

$ sudo log config --status --subsystem com.your_company.your_subsystem_name
Mode for 'com.your_company.your_subsystem_name'  DEBUG

您还可以通过在/ Library / Preferences / Logging / Subsystems /目录中创建并安装日志记录配置概要文件属性列表文件来覆盖特定子系统的日志记录行为。使用标识符字符串(以反向DNS表示)来命名文件,该字符串代表子系统。例如,com.your_company.your_subsystem_name.plist。接下来,将一个或多个设置词典添加到文件的顶层。 DEFAULT-OPTIONS设置字典定义了整个子系统的全局行为设置。类别设置词典定义子系统内特定类别消息的行为。

日志配置文件的顶级结构

<dict>
    <key>DEFAULT-OPTIONS</key>
    <dict>
       <!-- GLOBAL SUBSYSTEM OR PROCESS SETTINGS -->
    </dict>
    <key>CategoryName</key>
    <dict>
       <!-- CATEGORY SETTINGS -->
    </dict>
</dict>

简而言之,您无法在生产环境中更改代码的日志级别。您只能在调试期间进行更改。它有什么用?我不确定!

答案 1 :(得分:0)

您可以使用自定义逻辑或环境变量来确定是否通过分配OSLog.disabled来禁用它们。

来自WWDC 2018会话Measuring Performance Using Logging的此示例使用环境变量来确定是否禁用此日志句柄:

let refreshLog: OSLog
if ProcessInfo.processInfo.environment.keys.contains("SIGNPOSTS_FOR_REFRESH") {
    refreshLog = OSLog(subsystem: "com.example.your-app", category: "RefreshOperations")
} else {
    refreshLog = .disabled
}

.disabled分配给OSLog变量后,它将自动禁用所有使用该日志句柄的日志。