Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > log4j запись в разные файлы


Автор: ZeusX 19.2.2008, 16:59
Здравствуйте друзья,

Возник такой вопрос: как заставить log4j ввести логирование в разные файлы...  допустим в системе есть 5 различных сервиса(s1,s2,s3...) каждый сервис должен логироваться только в свой лог файл(s1.log, s2.log...) подскажите пожалуйста как энто моно разрулить в log4j.properties    

Автор: Kangaroo 19.2.2008, 17:05
Цитата(ZeusX @  19.2.2008,  15:59 Найти цитируемый пост)
допустим в системе есть 5 различных сервиса(s1,s2,s3...) каждый сервис должен логироваться только в свой лог файл(s1.log, s2.log...) подскажите пожалуйста как энто моно разрулить в log4j.properties     

хм.. а почему просто не поставить логгеру каждого сервиса свой аппендер?

Автор: ZeusX 20.2.2008, 10:17
Kangaroo, 

 smile 

Автор: AlexeyVorotnikov 20.2.2008, 10:36
Что-то типа вот такого
Код

log4j.appender.s1Appender=org.apache.log4j.RollingFileAppender
log4j.appender.s1Appender.File=logs/s1.log
log4j.appender.s1Appender.MaxFileSize=10MB
log4j.appender.s1Appender.MaxBackupIndex=1
log4j.appender.s1Appender.Threshold=DEBUG
log4j.appender.s1Appender.layout=org.apache.log4j.PatternLayout
log4j.appender.s1Appender.layout.ConversionPattern=%d %-5p %c - %m%n

log4j.appender.s2Appender=org.apache.log4j.RollingFileAppender
log4j.appender.s2Appender.File=logs/s2.log
log4j.appender.s2Appender.MaxFileSize=10MB
log4j.appender.s2Appender.MaxBackupIndex=1
log4j.appender.s2Appender.Threshold=DEBUG
log4j.appender.s2Appender.layout=org.apache.log4j.PatternLayout
log4j.appender.s2Appender.layout.ConversionPattern=%d %-5p %c - %m%n

log4j.logger.s1=DEBUG, s1Appender
log4j.logger.s2=DEBUG, s2Appender

Автор: ZeusX 20.2.2008, 12:24
AlexeyVorotnikov, 

а как в классах вызывать (прописывать) тот или иной аппендр

Автор: Kangaroo 20.2.2008, 12:28
Цитата(ZeusX @  20.2.2008,  11:24 Найти цитируемый пост)
AlexeyVorotnikov, 

а как в классах вызывать (прописывать) тот или иной аппендр 

В классах вы вызываете не аппендер, а логгер.

Код

private final Logger logger = Logger.getLogger("s1");

Автор: ZeusX 20.2.2008, 12:50
AlexeyVorotnikov, 
Kangaroo, 

СПАСИБО

Автор: olegrolik 16.4.2008, 08:50
А у меня вот такой вопрос: Есть пакеты package.helloworld.pack1, package.helloworld.pack2, package.helloworld.pack3 и package.helloworld.client
Вот мой log4j.properties:
Код

#Это на консоль
log4j.rootLogger=INFO, stdout 
package.helloworld=DEBUG, pack
package.helloworld.client=DEBUG, client

# ну а тут каждый аппендер прописан (pack и client) 
....


В результате то, что должно писаться в аппендер client, пишется в аппендер pack. Я могу конечно написать в log4j.properties и так:
Код

#Это на консоль
log4j.rootLogger=INFO, stdout 
package.helloworld.pack1=DEBUG, pack
package.helloworld.pack2=DEBUG, pack
package.helloworld.client=DEBUG, client

# ну а тут каждый аппендер прописан (pack и client) 
....

Но что делать, если таких пакетов (pack1, pack2) много? Как-то получается слишком многа букав  smile .
Подскажите какой-нить выход smile

Автор: AlexeyVorotnikov 16.4.2008, 09:56
А разве нужно писать не вот так:
Код

log4j.logger.package.helloworld.pack1=DEBUG, pack
log4j.logger.package.helloworld.pack2=DEBUG, pack
log4j.logger.package.helloworld.client=DEBUG, client


Попробуйте добавить такую строчку:
Код

log4j.additivity.package.helloworld.client=false

Автор: olegrolik 16.4.2008, 12:50
AlexeyVorotnikov, +1!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)