我的问题涉及库类(在库中使用的类)的日志记录,我们目前正在使用log4cxx
,但log4j
库实现了相同的概念。
假设我有一个具有多个实体 A、B 和 C 的进程。它们每个都使用许多不同的类和函数,在代码中清楚地分开。
A、B 和 C 使用许多库类、函数、对象、资源,有时甚至是全局变量(遗留代码,我对此无能为力......) - 让我们全部调用它们foo
记录 A、B 和 C 原来是一个性能问题,当我们将日志级别设置为调试时,日志被炸毁。查看我们的系统后,我们得出以下结论:
- 我们希望一次只能更改一个类的调试级别(或所有类,使用 root)
- 当各种
foo
打印要记录时,我们需要查看哪个实体调用它,A、B 或 C。 - 由于有很多
foo
我们希望能够为每个单独更改调试级别foo
- A
foo
应该被视为一个公共库,它不能直接依赖于 A、B 或 C。 - A、B 和 C 可能使用相同的实例
foo
(例如,我们的资源处理类的相同实例被使用 A、B 和 C),在日志中我们想查看使用了哪个类foo
。 - A可以使用B(或C),但我们不必在日志中看到它......
这是我们迄今为止提出的 -
A、B 和 C 将有单独的记录器。全局变量(与我们所有的日志记录助手和包装器一起保存在不同的库中)将始终保持当前的日志报告。每次实体开始处理其逻辑时,它都会将全局变量设置为适当的记录器。当 afoo
想要向日志报告时,它会通过全局变量进行报告并将其名称(和上下文)添加到日志消息中。
问题是,感觉必须有一些东西已经这样做了,解决方案感觉不干净,持有这样的全局变量......
我们在这里做错了吗?有没有更好的解决方案?