2

私はログバックが初めてです。私はそれに非常に魅了されましたが、それが私のユースケースに合っているかどうかはわかりません.

停止と開始ができるロガーが欲しいです。停止している間、ログファイルをファイルシステムから削除したいと思います。ロギングが再開されたら、ファイルを再作成する必要があります。

ログバックはこれが可能ですか? ロギングが一時停止している間、クラスで Logger を呼び出さないようにする必要がありますか、それとも logback でこれを処理できますか?

現在、slf4j.Logger を使用しています。マニュアルで私はそれを見ましたAppender objects implement the LifeCycle interface, which implies that they implement start(), stop() and isStarted()

これは、ファイルを移動できるように停止できることを意味すると思いましたが、後で次のようになります。

アペンダーを開始できなかった場合、または停止した場合は、logback の内部ステータス管理システムを通じて警告メッセージが発行されます。同じ警告メッセージのコピーで内部ステータス システムがあふれないようにするために、何度か試行した後、doAppend() メソッドはこれらの警告の発行を停止します。

停止してからファイルを削除してから再起動できるということですか?

4

1 に答える 1

1

停止と開始ができるロガーが欲しいです。停止している間、ログファイルをファイルシステムから削除したいと思います。ロギングが再開されたら、ファイルを再作成する必要があります。

プログラムでこれを達成する方法はわかりませんが、構成ファイルに追加jmxConfiguratorした場合は JMX を介してこれを達成できます。logback.xml

<configuration>
    <jmxConfigurator />
    ...

ch.qos.logback.classic.jmx.JMXConfiguratorこれにより、という操作を持つ Bean が公開されreloadDefaultConfigurationます。実行時にそれを押すと、ログファイルが再度開かれます。以下の Jconsole の画像を参照してください。これは、jmx クライアント (たとえば、SimpleJMX ライブラリ内のものなど) がコマンド ラインからそれを実行できることを意味します。

同じアプリケーション内からプログラムで実行しようとしている場合は、mbean を取得して自分で呼び出しをトリガーできるはずです。私にとってはうまくいくようです:

ManagementFactory.getPlatformMBeanServer().invoke(new ObjectName(
    "ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator"),
    "reloadDefaultConfiguration", null, null);

私がすることは、ログファイルの名前を別の名前に変更してから、reload 構成コマンドを発行することです。その後、名前が変更されたファイルは、新しいファイルが作成された後にアーカイブまたは削除できます。

お役に立てれば。

ここに画像の説明を入力

于 2016-01-27T17:42:24.800 に答える