2012-02-12 2 views
0

С std::thread, теперь тривиально, чтобы держать список имен нитей в состоянии программы (либо обернув нить, или с помощью синглтона для управления списком потоков.)C++ имени нити карты и log4cxx

Я начинаю использовать log4cxx для моего ведения журнала, и я хотел бы, чтобы он отображал имя потока. Однако это означает, что я не могу использовать PatternLayout. Номера потоков не очень полезны сами по себе.

Каков наилучший способ для этого? Я застрял, просто выводя карту, или могу ли я переопределить PatternLayout/ConversionPattern умным способом сделать то, что я хочу? И если я перегружаю его, как я могу указать на класс в файле конфигурации? Или я могу добавить символ преобразования?

ответ

1

Поместите ваши имена потоков с использованием MDC перед установкой регистратора в программе

MDC::put("threadName", threadNameString); 

Затем в XML конфигурации

<layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%X{threadName} "/> 
    </layout> 

Таким образом, в каждом сообщении журнала ваше имя поток будет появляться.

Для получения дополнительной информации ответьте на этот вопрос: Add process id to log file name in log4cxx

Смежные вопросы