2015-11-30 3 views
1

Я создаю парсер, и я хочу выводить сообщения отладки и WARN в разные файлы.Различные файлы для разных уровней

Код очень прост:

logger(log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("TParser"))); 
LOG4CPLUS_WARN/DEBUG(logger, "XYZ"); 

Я пытался использовать следующий файл конфигурации

log4cplus.logger.TParser=DEBUG, TD 

log4cplus.appender.TD=log4cplus::RollingFileAppender 
log4cplus.appender.TD.MaxFileSize=5MB 
log4cplus.appender.TD.MaxBackupIndex=5 
log4cplus.appender.TD.layout=log4cplus::TTCCLayout 
log4cplus.appender.TD.File=debug.log 

log4cplus.logger.TParser=WARN, TW 
log4cplus.appender.TW=log4cplus::RollingFileAppender 
log4cplus.appender.TW.MaxFileSize=5MB 
log4cplus.appender.TW.MaxBackupIndex=5 
log4cplus.appender.TW.layout=log4cplus::TTCCLayout 
log4cplus.appender.TW.File=trace.log 

Но Debug не бей регистратор (log4cplus :: Logger :: деЫпзЬапсе (LOG4CPLUS_TEXT («TksParser»))) ng сгенерирован ... если я удалю [log4cplus.logger.TParser = WARN, TW], а строки после этого генерирует отладочную ошибку.

Я также не хочу выводить данные на консоль. Мне очень сложно узнать, как использовать, но не так много информации о log4cplus

ответ

1

Одна из проблем вашего файла свойств заключается в том, что у вас есть значение для двух строк: log4cplus.logger.TParser. Строка, устанавливающая это свойство, перезаписывается второй строкой, устанавливающей это свойство.

Что касается отдельных файлов для отдельных уровней журналов, это возможно, но это не то, что вы обычно делаете. Во-первых, поймите, что существует еще много уровней журналов, чем только DEBUG и WARN, таких как INFO, ERROR, FATAL, TRACE. Куда бы они шли?

Вы можете записывать различные уровни журналов в разные файлы с помощью фильтров. Если вы буквально хотите вывести только один уровень журнала DEBUG (а не уровни журналов DEBUG и TRACE) в файл, используйте LogLevelMatchFilter (или LogLevelRangeFilter, если хотите диапазон уровней журнала), чтобы настроить приложение, которое будет регистрировать только журнал DEBUG уровня. Затем настройте еще один appender с фильтром, соответствующим уровню WARN log, и присоедините его к тому же журналу. В вашем случае, вы будете использовать это:

log4cplus.logger.TParser=DEBUG, TD, TW 

Чтобы избежать журналов от одного регистратора, достигающие корневой регистратор, отключить аддитивность:

log4cplus.additivity.TParser=false 

С помощью этой линии, события, которые будут достичь TParser регистратор не будет распространяться дальше к корневому регистратору.

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