对于以下功能:
let authenticationLogger = OSLog(subsystem: "com.Company.AppNameQA" ?? "Empty bundleIdentifier", category: "Authenticaiton)
如果我想禁用/启用某个日志级别该怎么办?
目前使用 API,我唯一可以访问的是isEnabled
功能:
authenticationLogger.isEnabled(.error)
它只返回它是否启用。
我还没试过这个。但我相信这是解决方案
从文档中读取。
在以下部分下:
日志记录行为通常由系统控制。但是,在 macOS 中进行调试时,您可以在以 root 身份登录时使用 log命令行工具的config 参数为子系统启用不同的日志记录级别。请参见清单 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>
简而言之,您无法从生产中的代码更改日志级别。您只能在调试期间更改它。能有什么用?我不确定!
您可以使用自定义逻辑或环境变量来决定是否通过分配来禁用特定日志OSLog.disabled
。
此示例来自 WWDC 2018 会话使用日志记录测量性能使用环境变量来确定是否禁用此日志句柄:
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
变量时,它将自动禁用所有使用该日志句柄的日志。
使用Logger
类(Swift)时,init(_ logObj: OSLog)
初始化器可用于设置OSLog.disabled
:
static let loggerInstance = Logger(OSLog.disabled)