可变日志配置¶
https://blueprints.launchpad.net/oslo-log/+spec/mutable-logging
操作者强烈希望能够在不重启服务的情况下重新配置日志。例如,为了响应观察到的问题,选择性地启用 DEBUG 日志。可变配置补丁已经实现了在运行时修改选项的功能,现在我们需要对日志配置做同样的事情。
问题描述¶
可变日志¶
之前 oslo.config 和 oslo.log 的工作已经允许在运行时修改 ‘debug’ 标志。但是,oslo.log 也接受一个 ‘log_config_append’ 选项。如果提供了这个选项,大多数选项将被忽略,并读取一个日志配置文件。在这种情况下,修改 ‘debug’ 标志不足以改变日志级别。
这个标志也提供了对日志的最小控制。应该能够在运行时更改单个 logger 的日志级别。为了支持这一点,应该支持对日志配置的完全修改。
提议的变更¶
将 ‘log_config_append’ 标记为可变。当钩子被调用时,如果 ‘log_config_append’ 的值发生变化,或者它指向的文件的时间戳发生变化,则调用 logging.fileConfig。
备选方案¶
日志配置文件的主要用途是以 JSON 格式输出日志记录,以便 Logstash 使用。如果 oslo.log 提供了一种简单的配置方式,那么完整的日志配置将会更少见。其他的建议包括 ‘syslog’、‘fluentd’ 和 ‘color’ 日志记录。
有三个理由支持进行提议的更改。首先,进行一项更改并不排除另一项更改。我们可以“让简单的变得容易,让复杂的成为可能”。其次,“简单”配置的复数性意味着随时可能需要另一个配置。在提供这一点之前,用户将不得不放弃或使用完整的日志配置。
最后,虽然配置额外的 handler 是使用完整日志配置的最常见原因,但重新配置一些日志级别也很常见。如果我们公开可以启用 Logstash 和/或 Fluentd 和/或 syslog handler 的选项,并设置任意 logger 级别 - 我们是否已经重新发明了日志配置系统?而且使用大量的开关和选项,而不是一个定义良好的 DSL。这感觉像是一个倒退的步骤。
Impact on Existing APIs¶
无。
安全影响¶
无。
性能影响¶
无。
Configuration Impact¶
无。
开发人员影响¶
无。
Testing Impact¶
虽然 oslo.log 的更改很简单,但 ‘logging’ 模块正在为我们做很多事情。单元测试将演示在处理程序最初配置但重新加载配置时不再提及的情况下的行为。
实现¶
负责人¶
- 主要负责人
alexisl
- 其他贡献者
无
工作项¶
将 ‘log_config_append’ 标记为可变。
从钩子中调用 logging.fileConfig。
文档影响¶
无。
依赖项¶
这项工作与 oslo.config 中的 mutate_config_files 工作相关,该工作已经合并。
https://review.openstack.org/#/c/254821/ 向 oslo.log 添加了一个 mutate 钩子。此规范将通过使 log-config-append 可变来扩展该钩子。
参考资料¶
一些 fileConfig 的测试:https://gist.github.com/lxsli/3ef859d641da7bcc9bd6
‘logging’ 模块在 eventlet 可以 monkey-patch 它之前创建了一个 Lock。Eventlet 现在修补了这个 lock,所以这不再是一个问题。Gevent 已经有代码来执行此操作。
锁定问题最初由 Alexander Makarov 诊断:https://review.openstack.org/#/c/154838
Eventlet 修复:https://github.com/eventlet/eventlet/pull/309
注意
本作品采用知识共享署名 3.0 非移植许可协议授权。 http://creativecommons.org/licenses/by/3.0/legalcode