Spring Boot:application.propertiesでロギングレベルを設定するにはどうすればよいですか?


301

これは非常に単純な質問ですが、情報が見つかりません。
(多分Javaフレームワークに関する私の知識はひどく欠けています)

application.propertiesでロギングレベルを設定するにはどうすればよいですか?
そして、ログファイルの場所など?


1
記録のために、別のオプションは、たとえばherokuダッシュボードを介して、ログレベルを環境変数として設定することです。中Settings- > Config Varsセットlogging.level.com.yourpackage所望のレベル(INFO、ERROR、DEBUG)へ。
LukeSolar

回答:


355

更新:設定で、春ブーツv1.2.0.RELEASEを皮切りapplication.propertiesまたはapplication.yml適用されます。リファレンスガイドのログレベルのセクションをご覧ください。

logging.level.org.springframework.web: DEBUG
logging.level.org.hibernate: ERROR

Spring Bootの以前のバージョンではできません。そのためには、ロギングフレームワーク(log4j、logback)の通常の構成を使用するだけです。適切な設定ファイル(log4j.xmlまたはlogback.xml)をsrc/main/resourcesディレクトリに追加し、必要に応じて設定します。

--debugコマンドラインからアプリケーションを起動するときに指定することにより、デバッグログを有効にすることができます。

春ブーツ等着色、いくつかのデフォルト値を設定するには、logbackのためにも素敵な開始点を提供base.xmlのあなたは、単にあなたのlogback.xmlファイルに含めることができるファイル。(これは、Spring Bootのデフォルトのlogback.xmlからも推奨されます。

<include resource="org/springframework/boot/logging/logback/base.xml"/>     

8
通常、コマンドラインで実行できることはすべて、外部設定ファイルで機能します。だから、debug = trueならそれができると思います。ログは非常に早く初期化する必要があるため、このフラグは少し特殊ですが、うまくいくと思います。
Dave Syer

7
ところで、推奨されるロギングシステムはlogbackです。これは、デフォルトでスターターポンから取得するものです。そのため、logback.xmlは、ログをきめ細かく構成するための最も一般的なツールです。--debugフラグは、選択した一部のSpringロギングチャネルをオンにするだけです。
Dave Syer

もう1つのヒントは、春のブーツにbase.xmlが含まれていることです。これは良い出発点です。(私の拡張回答を参照してください)。
M. Deinum 2013

@ M.Deinum素晴らしいヒントをありがとうございます!これで、自分のコードのログレベルを変更できます。
zeodtr 2013

2
できるようになりました。Spring v4.1.3.RELEASE(Spring Boot v1.2.0.RELEASEを使用)の場合、Richardが回答したように、application.propertiesまたはの設定application.ymlが適用されます(modulo :またはorの=問題---コロンは私にとってはうまくいくようです)。
Eric Platon、2014

108

これは、application.propertiesを使用して行うことができます。

logging.level.=ERROR- >エラーにルート・ロギング・レベルを設定します
...
logging.level.=DEBUG- >ルートログレベルをDEBUGに設定します

logging.file=${java.io.tmpdir}/myapp.log- > TMPDIR / myapp.logへの絶対ログファイルのパスを設定し

たプロファイルを使用してロギングに関するapplication.propertiesのA正気のデフォルトセットは次のようになりた: application.properties:

spring.application.name=<your app name here>
logging.level.=ERROR
logging.file=${java.io.tmpdir}/${spring.application.name}.log

application-dev.properties:

logging.level.=DEBUG
logging.file=

お気に入りのIDE内で開発するとき-Dspring.profiles.active=devは、アプリの実行/デバッグ構成にas VM引数を追加するだけです。

これにより、ログファイルに出力を書き込まずに、本番環境でのエラーのみのロギングと開発中のデバッグロギングが提供されます。これにより、開発中のパフォーマンスが向上します(SSDドライブを数時間操作できます;))。


1
割り当ての「=」記号が機能しませんでした。割り当ては、区切り文字として「:」を使用して行われました。 logging.level.:DEBUG
randominstanceOfLivingThing 2014

2
奇妙なことに、私はこのセットアップをサンプルプロジェクトで機能させています。''(スペース)、 '='および ':'記号は、キーでセパレータが使用されている場合を除いて、セパレータと同じように扱われます。キーに空白が含まれていませんか?
Richard

1
「:」は機能するが「=」は無視されることを確認できます。編集:間もなく話しかけました。「=」とレベルの間にスペースがありました。すべてが今動作します。
Mike R

1
これは私のテストでは動作しませんspring-boot 1.4.0:でlogging.level.=DEBUGアプリケーションが起動せず、エラーが発生します:java.lang.ClassCircularityError: java/util/logging/LogRecord
Eric Wang

2
私に思えるの logging.level.は、の便利な構文ショートカットでありlogging.level.root、(1)タイプミスと混同されにくい、(2)より明示的である可能性が高い、および(3)=より全体的な一貫性を提供する割り当て記号で作業するのが望ましいかもしれません構成ファイルに。
Alain BECKER


15

アプリケーションのパッケージ名がであるとしますcom.company.myproject。次に、application.propertiesファイルで以下に示すように、プロジェクト内のクラスのロギングレベルを設定できます。

logging.level.com.company.myproject = DEBUG

logging.level.org.springframework.web = DEBUGまたlogging.level.org.hibernate = DEBUG、SpringフレームワークWebおよびHibernateのクラスのログレベルのみを設定します。

ログファイルの場所を設定するには

logging.file = /home/ubuntu/myproject.log


14

Spring Bootを使用している場合は、application.propertiesファイルに次のプロパティを直接追加して、ロギングレベルを設定し、ロギングパターンをカスタマイズし、ログを外部ファイルに保存できます。

これらは、さまざまなログレベルとその順序です。最小<<最大。

オフ<<致命的<<エラー<<警告<<情報<<デバッグ<<トレース<<すべて

# To set logs level as per your need.
logging.level.org.springframework = debug
logging.level.tech.hardik = trace

# To store logs to external file
# Here use strictly forward "/" slash for both Windows, Linux or any other os, otherwise, its won't work.      
logging.file=D:/spring_app_log_file.log

# To customize logging pattern.
logging.pattern.file= "%d{yyyy-MM-dd HH:mm:ss} - %msg%n"

ログをより鮮やかにカスタマイズするには、このリンクを通過してください。

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html


理由はわかりませんが、logging.level.tech.hardik = traceこれは私の場合、logging.level.roo = traceを実行すると機能しません
Arvind Kumar

10

debug=trueapplication.propertiesに追加すると、実際にデバッグロギングが有効になるため、Dave Syerのヒントが気に入ってくれるでしょう。


8

たとえばlog4jなど、別のロギングフレームワークを使用する場合、最も簡単な方法は、スプリングブーツのロギングを無効にして、独自のロギングを実装することです。そうすれば、1つのファイル内のすべてのログレベルを構成できます。つまり、私の場合はlog4j.xmlです。

これを実現するには、これらの行をpom.xmlに追加するだけです。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j</artifactId>
</dependency>

おそらく最初の依存関係がすでにあり、他の2つだけが必要です。この例はlog4jのみを対象としていることに注意してください。
以上で、log4j構成ファイル内でブート用のロギングを構成する準備が整いました。


この除外は私にとってはうまくいきました。REST APIは、log4j依存関係とを選択していませんlog4j.properties
ankitjaininfo 2016

彼らはまた、spring-boot-starter-log4j2を持っています
Kalpesh Soni

4

ログレベルをDEBUGに設定してみると、アプリケーションの起動中にすべてが表示されます。

logging.level.root=DEBUG

3

記録:公式ドキュメント、Spring Boot v1.2.0.RELEASEおよびSpring v4.1.3.RELEASEの場合:

ロギングに対して行う必要がある唯一の変更が、さまざまなロガーのレベルを設定することである場合は、「logging.level」プレフィックスを使用してapplication.propertiesでそれを行うことができます。例えば、

logging.level.org.springframework.web: DEBUG logging.level.org.hibernate: ERROR

「logging.file」を使用して、(コンソールに加えて)ログを記録するファイルの場所を設定することもできます。

ロギングシステムのより詳細な設定を構成するには、対象のLoggingSystemでサポートされているネイティブ構成形式を使用する必要があります。デフォルトでは、Spring Bootはシステムのデフォルトの場所(Logbackの場合はclasspath:logback.xmlなど)からネイティブ構成を取得しますが、「logging.config」プロパティを使用して構成ファイルの場所を設定できます。


2

より詳細に設定したい場合は、ログ設定ファイル名「logback.xml」または「logback-spring.xml」を追加してください。

application.propertiesファイルに、次のように入力します。

logging.config: classpath:logback-spring.xml

loback-spring.xmlで、次のように入力します。

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <include resource="org/springframework/boot/logging/logback/base.xml"/>

        <appender name="ROOT_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">

            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>INFO</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>

            <file>sys.log</file>

            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">


                <fileNamePattern>${LOG_DIR}/${SYSTEM_NAME}/system.%d{yyyy-MM-dd}.%i.log</fileNamePattern>

                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>500MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>

            <encoder>
                <pattern>%-20(%d{yyy-MM-dd HH:mm:ss.SSS} [%X{requestId}]) %-5level - %logger{80} - %msg%n
                </pattern>
            </encoder>
        </appender>


        <appender name="BUSINESS_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <filter class="ch.qos.logback.classic.filter.LevelFilter">
                <level>TRACE</level>
                <onMatch>ACCEPT</onMatch>
                <onMismatch>DENY</onMismatch>
            </filter>

            <file>business.log</file>

            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

                <fileNamePattern>${LOG_DIR}/${SYSTEM_NAME}/business.%d{yyyy-MM-dd}.%i.log</fileNamePattern>

                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>500MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>

            <encoder>
                <pattern>%-20(%d{yyy-MM-dd HH:mm:ss.SSS} [%X{requestId}]) %-5level - %logger{80} - %msg%n
                </pattern>
            </encoder>
        </appender>


        <logger name="{project-package-name}" level="TRACE">
            <appender-ref ref="BUSINESS_APPENDER" />
        </logger>

        <root level="INFO">
            <appender-ref ref="ROOT_APPENDER" />
        </root>

    </configuration>

2

既存の答えは素晴らしいです。ログをグループ化し、グループ全体のログレベルを設定できる新しいスプリングブート機能を皆さんと共有したいと思います。

ドキュメントの例:

  • ロギンググループを作成する
logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat
  • グループのログレベルを設定する
logging.level.tomcat=TRACE

それはより多くの柔軟性をもたらす素晴らしい機能です。


2

私の現在の構成では、application.yamlで次のように定義しています

logging:
  level:
    ROOT: TRACE

私はspring-boot:2.2.0.RELEASEを使用しています。そのようなTRACEレベルを持つパッケージを定義できます。


1
これは、アプリケーションレベルで設定します。OPは、ログ設定でパッケージレベルのフィルターが必要な休止状態のログに対してのみトレースを要求します
Sudip Bhandari

2

春のブートプロジェクトでは、logging.level.root = WARNを書き込むことができますが、ここで問題は、devtoolsの依存関係を追加した場合でも再起動する必要があります。変更すると、プロパティファイルに値が自動検出されなくなります。この制限について知りましたソリューション、つまり、アクチュエータをpom.xmlに追加し、以下のようにロガーレベルをpostmanクライアントのURLバーhttp:// localhost:8080 / loggers / ROOTまたは http:// localhost:8080 / loggers / comに渡すことができます。 .mycompany本文では、以下のようなjson形式を渡すことができます

{
  "configuredLevel": "WARN"
}

1

Eclipse IDEでプロジェクトがMavenの場合は、プロジェクトをクリーンアップしてビルドし、変更を反映してください。


1

Springboot 2では、次のような環境変数を使用してルートロギングレベルを設定できます。

logging.level.root=DEBUG

または、次のようにパッケージの特定のログを設定できます。

logging.level.my.package.name=TRACE

環境変数の設定のために、あなたはむしろ使用したい:LOGGING_LEVEL_ROOT=DEBUG、キャメルケースの構文を使用して
アンソニーDahanne
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.