移除日志记录中的ContextAdapter

https://blueprints.launchpad.net/oslo.log/+spec/remove-context-adapter

作为 openstack.common.log.ContextAdapter 类毕业的一部分,为了减少 API 接口,我们希望移除该类。

问题描述

我们使用 ContextAdapter 将请求上下文信息添加到我们输出的日志消息中。 强制使用专门适配的日志句柄限制了可以添加该上下文信息的范围,并且不必要地将所有日志调用都通过 oslo 日志模块进行。

提议的变更

  1. 确保 ContextHandler 实现与 ContextAdapter 相同的行为,尤其是在输出值及其来源方面。

  2. 创建 KeywordArgumentAdapater 以接收日志方法中的命名关键字参数,并将它们插入到日志记录的 ‘extra’ 值中(有关详细信息,请参见下文)。

  3. getLogger() 的返回值更改为 KeywordArgumentAdapter 实例,而不是 ContextAdapter

  4. 移除 ContextAdapter 类。

  5. 移除 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

工作项

  1. 验证 ContextHandler 是否能与 Message 正常工作,如果不能,则更新它以使其正常工作。

  2. 请参阅上面的“提议的更改”。

孵化

采用

随着使用孵化版 oslo.log 的应用程序的更新,需要更改这些应用程序以直接从标准库模块获取日志记录器,并使用 versionutils 获取 deprecated()

oslo.log

预计 API 稳定

此更改是稳定 oslo.log API 在毕业前的准备工作。

文档影响

依赖项

参考资料

注意

本作品采用知识共享署名 3.0 非移植许可协议授权。 http://creativecommons.org/licenses/by/3.0/legalcode