2011-02-09 2 views
3

Я хочу, чтобы в моем приложении было 4 файла журнала. Три из файлов журнала - это типичные журналы log4j Info, Warn и Error. 4-й файл журнала полностью не связан и используется для регистрации некоторых данных.несколько несвязанных файлов журнала с регистрацией log4j и commons

Мой log4j.properties файл выглядит следующим образом:

log4j.threshold=ALL 
log4j.rootLogger=ALL, InfoAppender, WarnAppender, ErrorAppender 
log4j.DATA_LOGGER=INFO, DataAppender 
log4j.additivity.DATA_LOGGER = false 

log4j.appender.DataAppender=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.DataAppender.File=/app_logs/data.log 

log4j.appender.InfoAppender=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.InfoAppender.File=/app_logs/info.log 

log4j.appender.WarnAppender=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.WarnAppender.File=/app_logs/warn.log 

log4j.appender.ErrorAppender=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.ErrorAppender.File=/app_logs/error.log 

И мой Java-код выглядит следующим образом:

import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 

private static final Log LOG = LogFactory.getLog(SomeClassInMyApp.class); 
private static final Log DATA_LOG = LogFactory.getLog("DATA_LOGGER"); 

private static void foo() { 
    LOG.info("Hello"); 
    DATA_LOG.info("Some data"); 
} 

Когда я запускаю этот текст «Hello» правильно написано в info.log. Но файл data.log никогда не создается и не записывается.

Почему строка DATA_LOG.info («Некоторые данные») не записывается в файл data.log и какое изменение кода необходимо сделать для того, чтобы это произошло?

ответ

2

commons должен работать как хорошо, вы можете попробовать это

import org.apache.log4j.Logger; 
    ... 
    ... 
    Logger log = Logger.getLogger("DATA_LOGGER"); 
    ... 
    ... 
    log.info("my data"); 

вместо этого

import org.apache.commons.logging.Log; 

Update Просто тестировал этот код работает:

log4j.properties

log4j.rootLogger = DEBUG, R 

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.R.File=E:/testroot.log 

log4j.appender.R.layout=org.apache.log4j.PatternLayout 
log4j.appender.R.layout.ConversionPattern=%d{DATE} %-5p %c:%L %x - %m%n 


########################################################################## 
################## Appender for Other Logger ############################ 
########################################################################## 
log4j.logger.TestLog=DEBUG, cache 
log4j.additivity.TestLog=false 

log4j.appender.cache=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.cache.File=E:/testcache.log 
log4j.appender.cache.layout=org.apache.log4j.PatternLayout 
log4j.appender.cache.layout.ConversionPattern=%d{dd/MM/yyyy HH:mm:ss} %c %m%n 

Test Code

private static final Logger DATA_LOG = Logger.getLogger("TestLog"); 
private static final Logger LOG = Logger.getLogger(Test.class); 

public static final void main(String[] args){ 
    LOG.error("MSG1"); 
    DATA_LOG.error("MSG2"); 
} 

Output

testroot.log 
09 Feb 2011 12:18:29,671 ERROR in.naishe.so.Test:11 - MSG1 

testcache.log 
09/02/2011 12:18:29 TestLog MSG2 

Вы не нашли что-нибудь?

+0

Очевидно, проблема заключается в log4j, а не в регистрации сообщений. Поведение точно так же, когда я попробовал ваше предложение напрямую вызвать log4j вместо использования commons-logging. –

+0

@Mike W обновил код. Не знаете, чего не хватает в коде. – Nishant

+1

Благодаря вашему рабочему примеру, я вижу проблему. В строке 3 моего log4j.properties у меня есть «log4j.DATA_LOGGER», но должен был иметь «log4j.logger.DATA_LOGGER». –

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