在格式字符串中提供与应用程序无关的日志参数¶
https://blueprints.launchpad.net/oslo.log/+spec/app-agnostic-logging-parameters
我们仍然在默认日志格式字符串中存在一些 nova 特定的名称,我们希望消除这些名称,以便使 oslo.log 在各个项目中更具通用性。
问题描述¶
默认的 logging_context_format_string 和 logging_default_format_string 选项值包含 %(instance)s,这在所有项目中都不是很有用。我们应该像处理 “user_identity” 一样,提供一个通用名称,项目可以将其填充为他们期望的值。
提议的变更¶
将 RequestContext 从 openstack.common.context 转换为其他应用程序可用于其自身特定于应用程序的请求上下文的抽象基类。在新基类中,定义一些具有通用名称的抽象属性,例如 user_identity、resource_id、请求 ID 链等,子类可以覆盖这些属性。
将日志格式字符串的默认值更改为引用这些通用名称。
向基类添加一种新方法,以返回对日志记录有用的值。我们不能使用现有的 to_dict(),因为我们期望日志值包含未用于通过 RPC 调用重建上下文等操作的生成属性。
def get_logging_values(self):
"""Return a dict containing values for logging using this context.
"""
values = self.to_dict()
values.update({
'user_identity': self.user_identity,
'resource_id': self.resource_id,
'request_chain': ' '.join(self.request_ids),
})
return values
删除 context 模块中用于创建和测试上下文的其他函数。所有应用程序都有自己版本的这些函数,并且 context 中提供的版本在使用 RequestContext 的子类时没有用。
更新日志记录代码以使用 get_logging_values() 代替 to_dict()。
备选方案¶
我们之前讨论过完全删除此模块,但鉴于对日志记录的更改,以使用户身份参数在各个项目中一致地记录,我认为使其成为一个有用的基类是更好的方法。
Impact on Existing APIs¶
现有的上下文类将被更新为基类的子类,这可能允许我们在构造函数中保存一些重复代码。
安全影响¶
当我们同时讨论日志记录和上下文时,我们通常担心暴露敏感详细信息。我认为这些提议的更改不会暴露任何超出我们已经暴露的信息。
性能影响¶
可能对应用程序中创建 RequestContext 实例产生轻微影响。如果应用程序认为这是一个问题,他们可以选择将基类 API 复制到他们的本地类中,而不是使用子类,但他们需要跟上 API 的变化。我认为这不是一个重要的性能问题。
Configuration Impact¶
配置选项的默认值可能会更改,但输出应该相同,并且旧值仍然像以前一样有效。
开发人员影响¶
这个想法是让其他项目将他们的上下文定义为 Oslo 中 RequestContext 的子类,以实现或覆盖私有方法或属性,以满足日志记录模块所需的 API。
实现¶
负责人¶
- 主要负责人
Doug Hellmann (doug-hellmann)
- 其他贡献者
无
里程碑¶
完成目标里程碑:Kilo-2
工作项¶
删除
context中未使用的函数。向
RequestContext添加新的get_logging_values()。向
RequestContext添加抽象属性。更新
log中的默认格式字符串。更新
log以使用get_logging_values()。
孵化¶
N/A
采用¶
N/A
库¶
N/A
预计 API 稳定¶
我预计 get_logging_values() 将是稳定的。
我们可能会随着时间的推移向 RequestContext 添加更多生成的属性,但我们将必须将这些属性作为普通属性(而不是抽象属性)添加,以提供向后兼容性。
文档影响¶
配置选项的默认值需要在从选项定义生成的任何文档中更新。
依赖项¶
无
参考资料¶
juno 峰会讨论:https://etherpad.openstack.org/p/juno-oslo-release-plan
邮件列表线程,其中提到了 Oslo 的上下文中的域支持,作为 nova 的潜在问题:http://lists.openstack.org/pipermail/openstack-dev/2014-February/027634.html
注意
本作品采用知识共享署名 3.0 非移植许可协议授权。 http://creativecommons.org/licenses/by/3.0/legalcode