web-dev-qa-db-ja.com

どのログ構成ソースLogbackが実際に使用されているかをどのように判断できますか?

log4jには、プロパティlog4j.debug。これは、ロギングシステムを構成するために実際に使用された構成ファイルをユーザーに示すのに役立ちます。

(そうでなければ優れた)Logbackロギングフレームワークと同等のものを見つけることができませんでした。実行時に(診断目的で)印刷する方法はありますか。Logbackがbootstrap自体を使用していましたか?

[編集]明確にするために、構成ファイル自体を変更する必要のないソリューションが理想的です(たとえば、不適切にアセンブルされたサードパーティJARが誤ってピックアップされ、ログバック構成の前にある可能性があるため) XML)。

31
Peter Mularien

Javaシステムプロパティを設定して、Logbackデバッグ情報を出力できます。

Java -Dlogback.statusListenerClass=ch.qos.logback.core.status.OnConsoleStatusListener

これについては、Logbackのドキュメント 自動ステータス印刷 (ステータス出力の強制)と logback.statusListenerClassプロパティ について詳しく説明しています。

ステータスメッセージがない場合、特にアプリケーションのソースを簡単に変更できない本番環境では、不正なlogback.xml構成ファイルを追跡することが困難な場合があります。不正な構成ファイルの場所を特定するのに役立つように、「logback.statusListenerClass」システムプロパティ(以下で定義)を介してStatusListenerを設定し、ステータスメッセージを強制的に出力できます。 「logback.statusListenerClass」システムプロパティを使用して、エラーが発生した場合に自動的に生成される出力を無音にすることもできます。

28
Michael R

deepLogbackに入れたい場合は、次のようにできます

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.joran.util.ConfigurationWatchListUtil;

public class Main {

    private static final Logger logger = LoggerFactory.getLogger(Main.class);

    public static void main(String[] args) throws Exception {
        LoggerContext loggerContext = ((ch.qos.logback.classic.Logger)logger).getLoggerContext();
        URL mainURL = ConfigurationWatchListUtil.getMainWatchURL(loggerContext);
        System.out.println(mainURL);
        // or even
        logger.info("Logback used '{}' as the configuration file.", mainURL);
    }
}

ロードされた構成ファイルのURLを出力します。

24

debug="true"logback.xmlこのように制御するファイル:

<configuration debug="true">

(...)

</configuration

プログラムを起動するときに、ファイルがlogbackで使用されることを確認し、次のVM引数を追加します。

-Dlogback.configurationFile=/path/to/yourlogback.xml

これは実際にはあなたの質問には答えませんが、回避策を提供します。

8
Frederic Close

あまり科学的ではありませんが、簡単に確認したい場合に有効です。

私は単にログエントリパターンを変更し、それがコンソール/ログファイルで変更されたかどうかを観察しました。

0
Kenny Cason