2015-05-27 3 views
1

API, над которым я работаю, не может быть подключен к базе данных, но вам нужно регистрировать события, которые происходят в API. Для этого я думал об использовании log4j для создания файла журнала с информацией о событиях API.Записать несколько файлов log4j с различной информацией

Проблема в том, что все записи журнала в обоих журналах не разделены.

Требования Я должен выполнить

  • несколько файлов журналов с определенной информацией внутри
  • лог-файлов резервного копирования бесконечно жить
  • файл

LOG4J свойства

log4j.rootLogger=QuietAppender, LoudAppender, FirstLog, SecondLog, TRACE 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n 

# setup A1 
log4j.appender.QuietAppender=org.apache.log4j.RollingFileAppender 
log4j.appender.QuietAppender.Threshold=INFO 
log4j.appender.QuietAppender.File=${wls.logs-path}/test-api/test-api-info.log 
log4j.appender.QuietAppender.MaxFileSize=512KB 
log4j.appender.QuietAppender.layout=org.apache.log4j.PatternLayout 
log4j.appender.QuietAppender.layout.ConversionPattern=%d %p [%c] - %m%n 
# Keep three backup files. 
log4j.appender.QuietAppender.MaxBackupIndex=100 
# Pattern to output: date priority [category] - message 
log4j.appender.QuietAppender.layout=org.apache.log4j.PatternLayout 
log4j.appender.QuietAppender.layout.ConversionPattern=%d %p [%c] - %m%n 

# setup A2 
log4j.appender.LoudAppender=org.apache.log4j.RollingFileAppender 
log4j.appender.LoudAppender.Threshold=DEBUG 
log4j.appender.LoudAppender.File=${wls.logs-path}/test-api/test-api-debug.log 
log4j.appender.LoudAppender.MaxFileSize=512KB 
# Keep three backup files. 
log4j.appender.LoudAppender.MaxBackupIndex=3 
# Pattern to output: date priority [category] - message 
log4j.appender.LoudAppender.layout=org.apache.log4j.PatternLayout 
log4j.appender.LoudAppender.layout.ConversionPattern=%d %p [%c] - %m%n 

# setup FirstLog 
log4j.appender.FirstLog=org.apache.log4j.RollingFileAppender 
log4j.appender.FirstLog.Threshold=INFO 
log4j.appender.FirstLog.File=${wls.logs-path}/test-api/first-info.log 
log4j.appender.FirstLog.MaxFileSize=10240kB 
log4j.appender.FirstLog.MaxBackupIndex=99999 
log4j.appender.FirstLog.layout=org.apache.log4j.PatternLayout 
log4j.appender.FirstLog.layout.ConversionPattern=%d %p [%c] - %m%n 

# setup SecondLog 
log4j.appender.SecondLog=org.apache.log4j.RollingFileAppender 
log4j.appender.SecondLog.Threshold=INFO 
log4j.appender.SecondLog.File=${wls.logs-path}/test-api/second-info.log 
log4j.appender.SecondLog.MaxFileSize=10240kB 
log4j.appender.SecondLog.MaxBackupIndex=99999 
log4j.appender.SecondLog.layout=org.apache.log4j.PatternLayout 
log4j.appender.SecondLog.layout.ConversionPattern=%d %p [%c] - %m%n 

класса Java

private static final Logger logkp = Logger.getLogger("FirstLog"); 
private static final Logger logda = Logger.getLogger("SecondLog"); 

logkp.info(sb.toString()); 
logda.info(sb.toString()); 

Текущие результаты

2015-05-27 10:27:46,175 INFO [SecondLog] - 12645,APIServer1,0,000bdc5000000100011055042d0114a6 

2015-05-27 10:27:46,583 INFO [FirstLog] - APIServer1,Caller,test-Version-1.0,certValue,1 
2015-05-27 10:28:22,458 INFO [SecondLog] - 12645,APIServer1,0,000bdc5000000100011055042d0114a6 

2015-05-27 10:28:22,793 INFO [FirstLog] - APIServer1,Caller,test-Version-1.0,certValue,1 

2015-05-27 10:28:25,203 INFO [SecondLog] - 12645,APIServer1,0,000bdc5000000100011055042d0114a6 

2015-05-27 10:28:25,528 INFO [FirstLog] - APIServer1,Caller,test-Version-1.0,certValue,1 

2015-05-27 10:28:26,686 INFO [SecondLog] - 12645,APIServer1,0,000bdc5000000100011055042d0114a6 
+0

Звучит неплохо. Вы сталкиваетесь с проблемой? – Barett

+0

Да, он публикует все вещи для первого журнала и второго входа в оба файла, а не каждый из них соответственно. –

+0

Вы пытались установить аддитивность на false? Как и все журналы, вы отправляетесь в корневой журнал и, следовательно, на все приложения. – Fildor

ответ

1

Я не 100% уверен в этом, потому что это было в то время, что я использовал log4j и мы использовали напишите конфигурацию в xml, но я думаю, что вам нужно создать регистраторы следующим образом:

log4j.rootLogger=QuietAppender, LoudAppender, TRACE 
log4j.logger.FirstLogger = FirstLog, INFO 
log4j.additivity.FirstLogger = false 
log4j.logger.SecondLogger = SecondLog, INFO 
log4j.additivity.SecondLogger = false 

... // then configure appenders as you did 

Чтобы получить нужные выходы. Установка аддитивности на false «разрезает» соединение с rootLogger. По умолчанию установлено значение true, и все лог-сообщения будут добавлены к регистратору и всем предкам регистратора. Это значение изменится на false.

Если API имеет свое собственное пространство имен - скажем, "my.own.API", то вы можете также создать API-Logger, как это:

log4j.logger.my.own.API = MyAPIAppender, INFO 
log4j.additivity.my.own.API = false 

И создать регистраторы, как это:

package my.own.API 

public class MyAPIClass{ 
    private static Logger apiLog = Logger.getLogger(MyAPIClass.class); 
    // ... 
} 
Смежные вопросы