Как отключить 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.xmlsrc/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