ロギングにLogbackを使用するサンプルのSpring Bootアプリケーションがあります。したがって、ロギングを設定するためにjarの横に_logback-spring.xml
_がありますが、_logging.config
_、ex:_logging.config=logback-spring.xml
_で指定しない限り機能しません。
私は logback-spring.xmlを無視するスプリングブート を調べましたが、どこかに_spring.xml
_が既に存在するためである可能性が示唆されていますが、org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(LoggingInitializationContext, LogFile)
にブレークポイントを置くと、 logFileは空です。
ここで何か間違っていますか?
デフォルトでは、Springはnot jarファイル外のリソースを探します。外部ログバック構成ファイルを使用する場合は、jarの起動時にその場所を渡す必要があります。
$ Java -jar -Dlogback.configurationFile=/full_path/logback.xml app.jar
Logback.xmlを最終的なJarファイルに含めないでください。クラスパスに複数のlogback.xmlファイルが作成されます。
問題の説明に従って、ログ設定の外部化バージョンを使用しています。ファイルはjarの外部に保持されます。したがって、以下のように実行時引数としてパスを指定する必要があります。
-Dlogging.config=file:logback-spring.xml
または、application.propertiesで以下と同じプロパティに言及します。
logging.config=file:logback-spring.xml
この方法で春に構成されているため、リソースフォルダーからファイルを取得する理由。 Springは、クラスパスから以下の名前でログバックファイルを取得します。
logback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy
spring-bootカスタムログ設定 の関連ドキュメントを確認してください
なぜ機能しないのかわかりません。 resourceフォルダーにlogback-spring.xmlファイルを作成しましたが、正常に機能しました。
ログファイルの内容は次のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<property name="LOGDIR" value="logs"></property>
<property name="APP_NAME" value="spring-boot-sample"></property>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d ${APP_NAME} %-5level [%thread] %logger: %msg%n</Pattern>
</layout>
</appender>
<appender name="ROLLINGFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOGDIR}/${APP_NAME}-log.%d{MM-dd-yyyy}.log</fileNamePattern>
<maxHistory>90</maxHistory>
</rollingPolicy>
<encoder>
<charset>utf-8</charset>
<Pattern>%d ${APP_NAME} %-5level [%thread] %logger: %msg%n</Pattern>
</encoder>
</appender>
<springProfile name="local">
<root level="debug">
<appender-ref ref="CONSOLE"/>
</root>
<logger name="co.jp.oha" additivity="false" level="debug">
<appender-ref ref="ROLLINGFILE"/>
<appender-ref ref="STDOUT"/>
</logger>
</springProfile>
</configuration>
あなたはそれらを試すことができます。私はそれがあなたを助けることを願っています。
logback-spring.xmlでこれらの行を定義するだけです
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<logger name="org.springframework.web" level="DEBUG"/>
</configuration>
このような動作には2つの理由があります。
理由1: logback-spring.xmlがクラスパスに含まれていません。 System.getProperty("Java.class.path")
を出力し、logback-spring.xmlを含むフォルダーが出力に存在するかどうかを確認することで、実行時にこれを確認できます。
理由2:理由1が問題でない場合は、クラスパスにlogback.xmlまたはlogback-spring.xmlという名前のファイルがすでに存在し、これが競合の原因となっている可能性があります。ここで、そのファイルを見つける必要があります。 logback-spring.xmlの名前をlogback.xmlに変更して、動作を確認してください。