c++ - 如何在 log4cpp 日志中附加 Windows 用户名

标签 c++ logging log4cpp

下面是我当前的模式布局集:

    %d{%m/%d/%Y %H:%M:%S,%l} [%t]  %-5p %c %x %m%n

所以它输出如下到日志文件;

    06/13/2017 10:57:44,632 [3684]  INFO  MyLogCategory File: myclass.cpp Line: 59  My Logged Message

我想将当前的 Windows 用户名添加到 appender,以便我将获得以下输出......但到目前为止运气不好。我不想为每条消息添加 Windows 用户名,而是 log4cpp 应该获取当前用户名并附加到它记录的每条消息(我不知道 log4cpp 是否有这种支持。我找到了模式键“H”或“h”但是它不工作并抛出未知的转换说明符“H”。

    06/13/2017 10:57:44,632 [3684][**WINDOWS USER NAME**]  INFO  MyLogCategory File: myclass.cpp Line: 59  My Logged Message

最佳答案

我能够使用 NDC(嵌套诊断上下文)将用户名附加到日志中。

#include "log4cpp\NDC.hh"

然后我为每个线程推送上下文(是的,NDC 是特定于线程的,除非您设置它,否则它不会对所有线程可见)。就我而言,我推送了 Windows 当前用户名。然后用户名会自动添加到所有添加到已设置 NDC 的线程下的日志中。

CString sUserContext = "[" + GetCurrentUserName() + "]";
std::string userContextStr = CT2CA(sUserContext);
log4cpp::NDC::push(userContextStr);

关于c++ - 如何在 log4cpp 日志中附加 Windows 用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44530577/

相关文章:

c++ - (msvcr120d.dll) 处的未处理异常

C++: "expected constant expression"

c++ - 为什么 struct 的析构函数是否运行取决于成员变量的类型?

c++ - glDrawArrays 与带纹理映射的 glDrawElements

git - 将什么放入 ~/.gitconfig 来为支持它的每个 git 子命令暗示 --show-signature?

python - 如何在不传递记录器变量的情况下使用不同的记录器? (Python 日志记录)

java - 如何使用 logback 以文本和 json 格式打印 Spring Boot 日志?

c++ - 堵塞的意义何在?