Как отключить logback ConsoleAppender в Spring Загрузка
Я создаю приложение командной строки, используя Spring Boot. В таком приложении журнал ведения журналов журналов не подходит. Как полностью отключить консольный appender, но все еще есть файл-приложение, работающее с стандартным Spring поддержкой загрузки?
Update
Я создал запрос функции для более простой поддержки этой функции здесь:
https://github.com/spring-projects/spring-boot/issues/1612
Ответы
Ответ 1
Просто добавьте файл с именем logback.xml
в src/main/resources
с контентом (скопированный verbatim, за исключением консольной части из Spring Источник загрузки):
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/>
<property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:- } [%t] --- %-40.40logger{39} : %m%n%wex"/>
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<file>${LOG_FILE}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${LOG_FILE}.%i</fileNamePattern>
</rollingPolicy>
<triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</configuration>
Обратите внимание, что
<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/>
необходим для поддержки установки файла журнала из Spring Boot logging.file
и logging.path
.
Если все, что вы хотите сделать, это установить стандартный файл журнала, вы можете установить его путь в свойстве выше.
Обновление (02-04-2015)
В новых версиях Spring Boot вы можете легко включить base.xml
из Spring Boot и создать следующее logback.xml
.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml" />
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</configuration>
Обновление (15-09-2017)
Чтобы это работало на Spring Boot 1.5.x и 2.0.0.M4, я добавил файл под названием logback-spring.xml
и добавил его в каталог resources
.
Файл может выглядеть так:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/>
<property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:- } [%t] --- %-40.40logger{39} : %m%n"/>
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
<file>${LOG_FILE}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${LOG_FILE}.%i</fileNamePattern>
</rollingPolicy>
<triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</configuration>
Ответ 2
Используя Spring Boot 1.3.0, я создал файл logback-spring.xml
(в src/main/resources
со следующим содержимым:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<springProfile name="dev">
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
<root level="INFO">
<appender-ref ref="CONSOLE" />
</root>
</springProfile>
<springProfile name="staging,prod">
<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</springProfile>
</configuration>
Кроме того, я добавил свойство logging.file
в application-staging.properties
и application-prod.properties
, чтобы указать, какое имя файла должно быть.
Это приведет к регистрации на консоль для dev
и файл для профилей staging
или prod
.
Ответ 3
Я попытался удалить конфигурацию консоли из logback.xml. Но он все еще входил в консоль. Итак, что я сделал, я просто удалил добавление приложения в конфигурацию регистрации с помощью springboot. Таким образом, мы можем остановить ведение журнала Springboot в консоли и отдельный файл журнала. Добавьте нижеприведенные строки в конце вашего приложения. Ваш пользовательский appender не должен соответствовать ни одному из этих имен appender. Это сработало для меня.
// get instance of your log4j instance
Logger logger = LogManager.getRootLogger();
logger.removeAppender("CONSOLE"); // stops console logging
logger.removeAppender("LOGFILE"); // stops file logging
Ответ 4
Протестировано с последним релизом версии 1.3.1 spring..
поместите файл logback.xml в папку ресурсов
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/>
<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
<!-- Send debug messages to a file "application.log" -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>application.log</file>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%d{yyyy-MM-dd_HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<FileNamePattern>application.%i.log</FileNamePattern>
<MinIndex>1</MinIndex>
<MaxIndex>10</MaxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration>
Также убедитесь, что вы исключили исключения из spring -boot-startter-logging из "spring -boot-starter" и "spring -boot-starter-web", если вы добавили исключения раньше.
Нет необходимости в зависимостях ниже
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.2</version>
</dependency>
application.properties
logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
Ответ 5
Добавьте ниже к вашему application.properties
logging.level.root=OFF
spring.main.banner-mode=OFF
Ответ 6
Включить file-appender.xml
, а не console-appender
со следующей конфигурацией в logback-spring.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/>
<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</configuration>
Вам также нужно добавить logging.file
к вашему application.properties
Это соответствует тому, что упоминается в документации по загрузке spring - http://docs.spring.io/spring-boot/docs/current/reference/html/howto-logging.html