web-dev-qa-db-ja.com

Springブートはlogback-spring.xmlをロードしません

ロギングに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は空です。

ここで何か間違っていますか?

16
Tamerlane

デフォルトでは、Springはnot jarファイル外のリソースを探します。外部ログバック構成ファイルを使用する場合は、jarの起動時にその場所を渡す必要があります。

$ Java -jar -Dlogback.configurationFile=/full_path/logback.xml app.jar

Logback.xmlを最終的なJarファイルに含めないでください。クラスパスに複数のlogback.xmlファイルが作成されます。

14
JohanB

問題の説明に従って、ログ設定の外部化バージョンを使用しています。ファイルは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カスタムログ設定 の関連ドキュメントを確認してください

4
Sangam Belose

なぜ機能しないのかわかりません。 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>

あなたはそれらを試すことができます。私はそれがあなたを助けることを願っています。

0
Giang Phan

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>
0
this_is_om_vm

このような動作には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に変更して、動作を確認してください。

0
Shubham Kadlag