web-dev-qa-db-ja.com

SpringBootでログバックConsoleAppenderを無効にする方法

SpringBootを使用してコマンドラインアプリケーションを構築しています。このようなアプリケーションでは、ログバックコンソールのロギングは適切ではありません。コンソールアペンダーを完全に無効にしながら、ファイルアペンダーを デフォルトのSpring Bootサポート で動作させるにはどうすればよいですか?

更新

この機能をより簡単にサポートするための機能リクエストをここに作成しました。

https://github.com/spring-projects/spring-boot/issues/1612

10
btiernay

logback.xmlsrc/main/resourcesというファイルを追加するだけで、次のような内容になります(Spring Bootのソースからコンソール部分を除いて逐語的にコピー):

<?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}"/>

springBootのlogging.fileおよびlogging.pathからのログファイルの設定をサポートするために必要です。

標準のログファイルを設定するだけの場合は、そのパスを上のプロパティに配置するように設定できます。

更新(2015年2月4日)

Spring Bootの新しいバージョンでは、SpringBootのbase.xmlを簡単に含めて、次の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>

更新(2017年9月15日)

これをSpringBoot 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>
10
geoand

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.fileapplication-staging.propertiesapplication-prod.propertiesプロパティを追加して、ファイル名を指定しました。

これにより、devのコンソールにログが記録され、stagingまたはprodプロファイルのファイルが記録されます。

11
Wim Deblauwe

最新の1.3.1SpringBootリリースでテスト済み。

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-starter」および「spring-boot-starter-web」依存関係からspring-boot-starter-loggingの除外を必ず削除してください。

以下の依存関係は必要ありません

<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
3
Pratap A.K

Logback.xmlからコンソール構成を削除してみました。しかし、それはまだコンソールにログインしていました。だから私がしたことは、springbootによってロギング構成に追加されているアペンダーを削除したことです。これにより、コンソールでのスプリングブートロギングを停止し、ログファイルを分離できます。アプリケーションの最後に以下の行を追加すると、特定のアペンダーが追加されます。カスタムアペンダーは、これらのアペンダー名のいずれとも一致しないようにする必要があります。それは私のために働いた。

// get instance of your log4j instance
Logger logger = LogManager.getRootLogger();
logger.removeAppender("CONSOLE"); // stops console logging
logger.removeAppender("LOGFILE"); // stops file logging
2
Kaliappan

以下をapplication.propertiesに追加します

logging.level.root=OFF
spring.main.banner-mode=OFF
0
Peter Szanto

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.fileapplication.propertiesに追加する必要があります

これは、SpringBootのドキュメントに記載されている内容に準拠しています http://docs.spring.io/spring-boot/docs/current/reference/html/howto-logging.html

0
panksy2k