如何禁用某个 oslog 日志级别?
How can I disable a certain oslog log level?
对于以下函数:
let authenticationLogger = OSLog(subsystem: "com.Company.AppNameQA" ?? "Empty bundleIdentifier", category: "Authenticaiton)
想disable/enable某个日志级别怎么办?
目前 API 我唯一可以访问的是 isEnabled
功能:
authenticationLogger.isEnabled(.error)
这只是 returns 是否启用。
我还没有试过这个。但我相信这就是解决方案
正在阅读 docs。
下的栏目:
调试时自定义日志记录行为
Logging behavior is normally governed by the system. However, while
debugging in macOS, you can enable different logging levels for a
subsystem using the log command-line tool’s config argument while
logged in as root. See Listing 5, which shows how to enable
debug-level logging for a subsystem.
为子系统启用调试级日志记录
$ 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 的示例 session 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
变量时,它将自动禁用所有使用该日志句柄的日志。
当使用 Logger
class (Swift) 时 init(_ logObj: OSLog)
initializer 可以用来设置 OSLog.disabled
:
static let loggerInstance = Logger(OSLog.disabled)
对于以下函数:
let authenticationLogger = OSLog(subsystem: "com.Company.AppNameQA" ?? "Empty bundleIdentifier", category: "Authenticaiton)
想disable/enable某个日志级别怎么办?
目前 API 我唯一可以访问的是 isEnabled
功能:
authenticationLogger.isEnabled(.error)
这只是 returns 是否启用。
我还没有试过这个。但我相信这就是解决方案
正在阅读 docs。
下的栏目:
调试时自定义日志记录行为
Logging behavior is normally governed by the system. However, while debugging in macOS, you can enable different logging levels for a subsystem using the log command-line tool’s config argument while logged in as root. See Listing 5, which shows how to enable debug-level logging for a subsystem.
为子系统启用调试级日志记录
$ 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 的示例 session 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
变量时,它将自动禁用所有使用该日志句柄的日志。
当使用 Logger
class (Swift) 时 init(_ logObj: OSLog)
initializer 可以用来设置 OSLog.disabled
:
static let loggerInstance = Logger(OSLog.disabled)