移除日志记录中的ContextAdapter¶
https://blueprints.launchpad.net/oslo.log/+spec/remove-context-adapter
作为 openstack.common.log.ContextAdapter 类毕业的一部分,为了减少 API 接口,我们希望移除该类。
问题描述¶
我们使用 ContextAdapter 将请求上下文信息添加到我们输出的日志消息中。 强制使用专门适配的日志句柄限制了可以添加该上下文信息的范围,并且不必要地将所有日志调用都通过 oslo 日志模块进行。
提议的变更¶
确保
ContextHandler实现与ContextAdapter相同的行为,尤其是在输出值及其来源方面。创建
KeywordArgumentAdapater以接收日志方法中的命名关键字参数,并将它们插入到日志记录的 ‘extra’ 值中(有关详细信息,请参见下文)。将
getLogger()的返回值更改为KeywordArgumentAdapter实例,而不是ContextAdapter。移除
ContextAdapter类。移除
getLazyLogger()函数。
备选方案¶
此规范的先前版本建议将 getLogger() 的返回值更改为具有 audit() 和 deprecated() 方法的不同适配器类型,以便我们可以保持当前的 API 以争取时间来更新调用方,这些调用方使用将被移除的方法。 由于我们在这个周期的开始就启动这项工作,我已更新提案,以便直接采用我们想要保留的 API 类型。
Impact on Existing APIs¶
我们移除了一些 API,但大多数 API 都有其他库中可用的等效形式。 有三种情况并非如此。
ContextAdapter.audit¶
ContextAdapter 提供了一个 audit() 方法,用于以 INFO+1 级别记录日志。 这将被移除,并且日志消息将被更新为使用 INFO 级别或使用 audit 级别的 log() 方法。
$ for d in ceilometer cinder glance heat ironic keystone neutron nova sahara trove swift;
do echo $d; ack LOG.audit $d/$d | wc -l; done
ceilometer
0
cinder
4
glance
0
heat
0
ironic
0
keystone
0
neutron
0
nova
101
sahara
0
trove
0
swift
0
ContextAdapter.deprecated¶
deprecated() 方法 ContextAdapter 的方法将被 versionutils 中的一个新函数取代。 请参阅 fix-import-cycle-log-and-versionutils。
ContextAdapter 关键字参数处理¶
ContextAdapter API 支持执行
LOG.info('some message: %(named_arg)s', named_arg=val, context=context)
标准日志记录方法不接受任意关键字参数作为 ‘extra’ 的一部分,但我们有足够的案例需要继续支持该模式,以避免混乱并破坏其他项目的运行。 我们将实现一个 KeywordArgumentAdapter,由 getLogger() 返回。
警告
Oslo 库不应使用此功能,以避免库与 oslo.log 之间的循环依赖。
安全影响¶
无
性能影响¶
无
Configuration Impact¶
无
开发人员影响¶
请参阅上面的“现有 API 的影响”。
实现¶
负责人¶
- 主要负责人
Doug Hellmann (doug-hellmann)
- 其他贡献者
无
里程碑¶
- 完成目标里程碑
Kilo-1
工作项¶
验证
ContextHandler是否能与Message正常工作,如果不能,则更新它以使其正常工作。请参阅上面的“提议的更改”。
孵化¶
无
采用¶
随着使用孵化版 oslo.log 的应用程序的更新,需要更改这些应用程序以直接从标准库模块获取日志记录器,并使用 versionutils 获取 deprecated()。
库¶
oslo.log
预计 API 稳定¶
此更改是稳定 oslo.log API 在毕业前的准备工作。
文档影响¶
无
依赖项¶
我们需要在实施此更改之前移除日志记录和 versionutils 之间的导入循环。 https://blueprints.launchpad.net/oslo/+spec/app-agnostic-logging-parameters
参考资料¶
Juno 峰会讨论: https://etherpad.openstack.org/p/juno-oslo-release-plan
相关蓝图,关于将我们的上下文作为基类使用: https://blueprints.launchpad.net/oslo.log/+spec/app-agnostic-logging-parameters
相关蓝图,关于毕业 oslo.log: https://blueprints.launchpad.net/oslo.log/+spec/graduate-oslo-log
相关蓝图,关于修复日志记录和 versionutils 之间的导入循环: https://blueprints.launchpad.net/oslo-incubator/+spec/fix-import-cycle-log-and-versionutils
注意
本作品采用知识共享署名 3.0 非移植许可协议授权。 http://creativecommons.org/licenses/by/3.0/legalcode