SpringBootを使用してコマンドラインアプリケーションを構築しています。このようなアプリケーションでは、ログバックコンソールのロギングは適切ではありません。コンソールアペンダーを完全に無効にしながら、ファイルアペンダーを デフォルトのSpring Bootサポート で動作させるにはどうすればよいですか?
この機能をより簡単にサポートするための機能リクエストをここに作成しました。
logback.xml
にsrc/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>
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
プロファイルのファイルが記録されます。
最新の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
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
以下をapplication.propertiesに追加します
logging.level.root=OFF
spring.main.banner-mode=OFF
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
に追加する必要があります
これは、SpringBootのドキュメントに記載されている内容に準拠しています http://docs.spring.io/spring-boot/docs/current/reference/html/howto-logging.html