1前書き

この記事では、カスタムのLogbackアペンダーの作成について説明します。 Javaでのログインの概要を探しているなら、

この記事

を見てください。

このチュートリアルでは、

logback-classic

に焦点を当てます。これには、次のMaven依存関係が必要です。

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
</dependency>

この依存関係の最新版はhttps://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22ch.qos.logback%22%20AND%20a%3A%22logback-classic%にあります。 22[メイヴン中央]。


2ベースログバックアペンダー

  • 私たちのカスタムアペンダは



    AppenderBase



    または




    UnsynchronizedAppenderBase


    **

    _

    ___のいずれかを拡張する必要があります。



  • OutputStream


    に書き込んでいる場合、


    _

    カスタムアペンダは




    OutputStreamAppender_

    ** をサブクラス化する必要があります。


3カスタムアペンダー

私たちのカスタムの例では、

MapAppender

という名前のおもちゃアペンダを作成します。

このアペンダはすべてのロギングイベントをキーのタイムスタンプとともに

ConcurrentHashMap

に挿入します。まず、

AppenderBase

をサブクラス化し、ジェネリック型として

ILoggingEvent

を使用します。

public class MapAppender extends AppenderBase<ILoggingEvent> {

    private ConcurrentMap<String, ILoggingEvent> eventMap
      = new ConcurrentHashMap<>();

    @Override
    protected void append(ILoggingEvent event) {
        eventMap.put(System.currentTimeMillis(), event);
    }

    public Map<String, ILoggingEvent> getEventMap() {
        return eventMap;
    }
}

次に、

MapAppender

がロギングイベントの受信を開始できるようにするには、設定ファイル

logback.xml

にアペンダとして追加します。

<configuration>
    <appender name="map" class="com.baeldung.logback.MapAppender"/>
    <root level="info">
        <appender-ref ref="map"/>
    </root>
</configuration>


4プロパティを設定する

Logbackはアペンダに設定されたプロパティを分析するためにJavaBeansイントロスペクションを使用します。私たちのカスタムアペンダはイントロスペクターがこれらのプロパティを見つけて設定することを可能にするためにゲッターとセッターメソッドを必要とします。


EventMap

にキーのプレフィックスを与える

MapAppender

にプロパティを追加しましょう。

public class MapAppender extends AppenderBase<ILoggingEvent> {

   //...

    private String prefix;

    @Override
    protected void append(ILoggingEvent event) {
        eventMap.put(prefix + System.currentTimeMillis(), event);
    }

    public String getPrefix() {
        return prefix;
    }

    public void setPrefix(String prefix) {
        this.prefix = prefix;
    }

   //...

}

次に、このプレフィックスを設定するために設定にプロパティを追加します。

<configuration debug="true">

    <appender name="map" class="com.baeldung.logback.MapAppender">
        <prefix>test</prefix>
    </appender>

   //...

</configuration>


5エラー処理

カスタムアペンダの作成および設定中のエラーを処理するために、

AppenderBase

から継承されたメソッドを使用できます。

たとえば、prefixプロパティがnullまたは空の文字列の場合、

MapAppender



addError()

を呼び出して早期に戻ります。

public class MapAppender extends AppenderBase<ILoggingEvent> {

   //...

    @Override
    protected void append(final ILoggingEvent event) {
        if (prefix == null || "".equals(prefix)) {
            addError("Prefix is not set for MapAppender.");
            return;
        }

        eventMap.put(prefix + System.currentTimeMillis(), event);
    }

   //...

}

設定でデバッグフラグがオンになっていると、コンソールにプレフィックスプロパティが設定されていないことを警告するエラーが表示されます。

<configuration debug="true">

   //...

</configuration>


6. 結論

このクイックチュートリアルでは、Logback用のカスタムアペンダを実装する方法に焦点を当てました。

いつものように、この例はhttps://github.com/eugenp/tutorials/tree/master/logging-modules/logback[Githubに追加]を見つけることができます。