2014-11-20 5 views
0

Я создаю проект Spring boot с сервером Tomcat, где весной автоматически заботится обо всех механизмах ведения журнала, все журналы присутствуют в файле "catalina.out".Разделение журналов Spring и пользовательских журналов

Теперь у меня есть требование, когда мне нужно записывать только определенную информацию в отдельный файл журнала.

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

Мне нужны только определенные журналы в отдельный файл журнала.

Может ли кто-нибудь предложить мне решение для этого?

Мой pom.xml выглядит так.

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter</artifactId> 
     <exclusions> 
      <exclusion> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-starter-logging</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-log4j</artifactId> 
    </dependency> 

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

# Root logger option 
log4j.rootLogger=INFO,file 

# Direct log messages to a log file 
log4j.appender.file=org.apache.log4j.RollingFileAppender 

#Redirect to Tomcat logs folder 
#log4j.appender.file.File=${catalina.home}/logs/logging.log 

log4j.appender.file.File=/my_log.log 
log4j.appender.file.Append=true 
log4j.appender.file.MaxFileSize=10MB 
log4j.appender.file.MaxBackupIndex=10 
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 

Файл java выглядит так.

static org.apache.log4j.Logger log4jLogger = org.apache.log4j.Logger.getLogger(MyClass.class.getName()); 

log4jLogger.info("My specific logs here"); 

ответ

1

Согласно FAQ Logging, то CATALINA_BASE/logs/catalina.out содержит вывод System.out и System.err.

Следовательно, вам необходимо перенаправить выход пружины на номер System.out. Это можно сделать, используя org.apache.log4j.ConsoleAppender.

Используя этот Appender, файл конфигурация может быть аналогичен:

# Root logger option 
log4j.rootLogger=info, stdout 

# Direct log messages to the console 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
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 

# Direct log messages to a log file 
log4j.appender.file=org.apache.log4j.RollingFileAppender 
log4j.appender.file.File=/my_log.log 
log4j.appender.file.Append=true 
log4j.appender.file.MaxFileSize=10MB 
log4j.appender.file.MaxBackupIndex=10 
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 

# Output to the file only from certain packages (e.g. your application) 
log4j.logger.com.foo=trace, file 
log4j.logger.org.company=trace, file 

Если вы не хотите, чтобы ваше приложение также войти в stdout, используйте:

# Output to the file only from certain packages (e.g. your application) 
log4j.logger.com.foo=trace, file 
log4j.additivity.com.foo=false 
log4j.logger.org.company=trace, file 
log4j.additivity.org.company=false 

См больше в Short introduction to log4j на Apache log4j 1.2 веб-страницы.


Примечания

  1. Log4j Tutorial: Additivity – what and why?
+0

Paul, ваше предложение разрешено на определенном этапе, где я могу видеть свой вывод консоли, как раньше. Но все журналы с уровнем «info» все еще добавляются в мой конкретный файл журнала, который мне не нужен. –

+0

Какую конфигурацию вы используете? Вы можете использовать http://pastie.org/, чтобы поделиться им и ввести здесь сгенерированный URL. –

+0

Вот он Павел. http://pastie.org/9734050 –

0

Вы должны создать несколько журналов, которые указывают на разные файлы (теперь у вас есть только одно, поэтому все заканчивается в одном файле). Затем вы можете отличить регистраторы с некоторым префиксом к пакету. Что-то вроде

log4j.logger.file1.com.spring.something=.../define the logger 
log4j.logger.file2.com.spring.somethingelse=.../second logger 

, а затем при получении использовать регистратор как-то

org.apache.log4j.Logger.getLogger("file1" + MyClass.class.getName()); 
+0

Благодаря Надир. Но как я могу сохранить исходные журналы Spring в catalina.out? –

+0

Если вы хотите использовать стандартный журнал, просто не префиксное имя класса с «file1». Также помните, что в этой ситуации есть стандартный регистратор. – Nadir

+0

Спасибо Надир.Поскольку я исключил «загрузку с помощью Spring-boot-startter-logging», на моей консоли ничего не печатается. –

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