Как добавить имя пользователя Windows в журнал 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 в приложение, чтобы получить следующий вывод ... но пока не повезло. Я не хочу добавлять имя пользователя 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

person wonk    schedule 13.06.2017    source источник


Ответы (1)


Мне удалось добавить имя пользователя в журнал с помощью NDC (вложенный диагностический контекст).

#include "log4cpp\NDC.hh"

Затем я добавил контекст для каждого потока (Да, NDC зависит от потока, он не будет виден всем потокам, если вы его не установите). В моем случае я нажал имя текущего пользователя Windows. Затем имя пользователя автоматически добавляется во все журналы, которые были добавлены в потоке с установленным NDC.

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