【发布时间】:2019-10-01 04:45:26
【问题描述】:
我一直在为我们的产品编写日志代码,但遇到了架构问题。我们有两个用 C++ 为 Window 编写的命令行可执行文件,分别称为 Foo 和 Bar,它们依赖于我们将命名为 Core 的 DLL。我想从 Core 中登录。
问题是,这些日志条目应该在哪里结束?如果我运行 Foo,我想在 Foo.log 中看到它们,如果我运行 Bar,它们应该在 Bar.log 中。如果我同时运行 Foo 和 Bar 怎么办? (我想我已经对运行多个 Foo 或 Bar 副本的情况进行了排序,有效地锁定了日志文件。
一种想法是,Core 可以保留“当有人发出日志记录请求时我需要调用的所有记录器”的列表。这意味着要编写一个全新的 API,并且 DLL 中的日志记录与 exe 或静态库中的日志记录不同。这并不理想。如果代码在 lib 中,我什至可能不知道代码在哪里结束!
我查看了 log4cplus,并提升了日志记录,但也无法了解这将如何与这些组件一起使用,所以我有点想不通。不过,这肯定是一个已解决的问题?!
【问题讨论】:
-
在您的
DllMain中,处理DLL_PROCESS_ATTACH,图what process you are in,并相应地设置记录器。 -
我没有看到任何问题。在每个可执行文件中创建日志记录上下文时,没有什么可以阻止您指定应将日志写入何处。
-
@VTT 在我的 DLL 中我有一个记录器 logger = LogManager::GetLogger("core")。如果 Foo 和 Bar 都运行,它们都将尝试将记录器配置为写入它们的日志文件(因此是竞争条件)。
-
dll本身不加载,加载到进程中,每次调用dllmain。点击上面的链接。
-
由于
Foo和Bar是不同的进程,每个进程都有自己的x。