2013-09-24 3 views
1

В моей WAR я хочу иметь свои собственные настройки, используя log4j.properties (находится в WEB-INF/classes). Ведение журнала для развертывания, как описано here, не работает, а именно JBoss не регистрирует ничего из моего приложения. Мое простое приложение (воспроизвести проблему) содержит:Как настроить slf4j - log4j для каждого развертывания для JBoss 7.2

WEB-INF/classes/log4j.properties 
WEB-INF/classes/logging/LoggingContextListener.class 
WEB-INF/lib/log4j-1.2.17.jar 
WEB-INF/lib/slf4j-api-1.7.5.jar 
WEB-INF/lib/slf4j-log4j12-1.7.5.jar 

LoggingContextListener где просто регистрирует случайные строки. log4j.properties содержит:

log4j.rootLogger=WARN, stdout 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.Target=System.out 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 

Кто-нибудь сталкивался аналогичный вопрос?

Знаете ли вы, если это fixable? Как?

Для того, чтобы избежать путаницы относительно порога регистрации здесь это тело LoggingContextListener

System.err.println("Trying to log something using SLF4J-Log4J"); 
org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(getClass()); 
logger.error("Hello"); 
logger.warn("anybody home?"); 
logger.info("can you hear me?"); 
logger.debug("WTF?"); 
System.err.println("Did you notice any logs?"); 

Когда я удалить log4j.properties из пути к классам я получаю:

ERROR [stderr] (ServerService Thread Pool -- 54) Trying to log something using SLF4J-Log4J 
ERROR [logging.LoggingContextListener] (ServerService Thread Pool -- 54) Hello 
WARN [logging.LoggingContextListener] (ServerService Thread Pool -- 54) anybody home? 
INFO [logging.LoggingContextListener] (ServerService Thread Pool -- 54) can you hear me? 
ERROR [stderr] (ServerService Thread Pool -- 54) Did you notice any logs? 

но эти журналы поступают непосредственно из JBoss logger настроен в standalone.xml - не то, что я хочу.

ответ

0

попробовать это log4j.properties добавить еще одно свойство

log4j.appender.stdout.Threshold=debug 

копию пасты ниже свойств и проверить его

log4j.rootLogger=WARN, stdout 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.Threshold=debug 
log4j.appender.stdout.Target=System.out 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%m%n 
+0

Единственная разница в том, что вы добавили log4j.appender.stdout.Threshold = debug. В чем смысл? В любом случае, это не помогает (почему?) – pbielicki

+0

см. Это .. http: // stackoverflow.com/questions/5119883/log4j-what-is-threshold –

+0

пороговое значение определяет ваш режим ведения журнала, ошибки, отладки .. –

2

Существует уродливая обходной путь к этому вопросу (это не правильный ответ на мой вопрос):

Properties props = new Properties(); 
props.load(getClass().getResourceAsStream("/log4j.xxx.properties")); 
PropertyConfigurator.configure(props); 

Этот код должен выполняться только один раз, поэтому в идеале в какой-то своей реализации ServletContextListener. Будьте осторожны - вы должны переименовать свои log4j.properties, иначе JBoss «позаботится» об этом и проглотит все ваши журналы.

Но это должно быть сделано JBoss в первую очередь! По крайней мере, это то, что они пишут в своем доке.

Это очевидная ошибка, так что я собираюсь сообщить об этом на их JIRA

PS. Смешная вещь: когда у вас есть log4j в вашем пути к классу, это все равно не принимается во внимание - даже если модули развертывания должны быть независимыми от корня. JBoss использует самодельный log4j implementation. Последствие: при попытке позвонить:

PropertyConfigurator.configure(getClass().getResourceAsStream("/log4j.xxx.properties")); 

, имеющими оригинальный log4j в сборках классов, вы получите NoSuchMethodException во время выполнения, как их PropertyConfigurator не реализует Configure (java.io.InputStream). Не здорово :(

+0

У меня такая же проблема в Wildfly, что и есть, это проблема с jira (классифицируется как «minor» :-(https://issues.jboss.org/browse/WFLY- 2012 – geert3

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