Ниже мой текущий набор шаблонов:
%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
Мне удалось добавить имя пользователя в журнал, используя NDC (Nested Diagnostic Context).
#include "log4cpp\NDC.hh"
Затем я выдвинул контекст для каждого потока (да, NDC зависит от потока, он не будет виден всем потокам, если вы его не установите). В моем случае я нажал имя текущего пользователя Windows. Затем имя пользователя автоматически добавляется во все журналы, которые были добавлены в потоке с установленным NDC.
CString sUserContext = "[" + GetCurrentUserName() + "]";
std::string userContextStr = CT2CA(sUserContext);
log4cpp::NDC::push(userContextStr);
Других решений пока нет …