web-dev-qa-db-ja.com

Dropwizardロギング:特定のロガーに新しいアペンダーを追加します

私はdropwizardを初めて使用し、ロギングをより適切に構成する方法を見つけようとしています。

私は次のようなバンドルで新しいロガーを登録しました:

Logger log = LoggerFactory.getLogger("mylogger");
log.info("this is a log from mylogger");

現在、私はこのバンドルを一連のサービスで使用しています。デフォルトでは、このロガーを経由するログはすべてアプリケーションログファイルに書き込まれます。

私が解決しようとしている問題はこれです:mylogger(のみ)によって書き込まれたすべてのログを新しいファイルに移動させたいです。次のように、サービスymlファイルに新しいアペンダーを追加するのはかなり簡単です。

logging:

  loggers:

  appenders:
  - type: file.
    currentLogFilename: ./logs/example.log
    archivedLogFilenamePattern: ./logs/example-%d.log.gz
    archivedFileCount: 5

ただし、これは、すべてのアプリケーションログがexample.logに書き込まれることを意味します。既存のロギングに影響を与えたり変更したりしない、このアペンダー専用のロガーを指定する方法がわかりません。

Dropwizardでこれを行う方法があるかどうか誰かに教えてもらえますか?ありがとう!

11
nightcrawler

Dropwizard 0.9.0(2015年10月28日にリリース)では、個々のロガーアペンダーのサポートが追加され、ロガーの加法性が無効になっています。

あなたが説明したことを達成するために、yaml設定ファイルで以下を指定することができます-

logging:
  level: INFO
  loggers:
    "mylogger":
      level: DEBUG
      additive: false
      appenders:
        - type: file
          currentLogFilename: /var/log/mylogger.log
          archivedLogFilenamePattern: /var/log/mylogger-%d.log.gz
          archivedFileCount: 5
  appenders:
    - type: console

アディティブをfalseに設定すると、ロガー(またはその下にあるもの)が、ルートロガーを含むその上に階層的にあるアペンダーに書き込むことができなくなります。

参考文献-

カスタムロガーをログファイル内の唯一のログにし、デフォルトのアペンダーを使用する場合は、Dropwizardのログ仕様に基づいて独自のアペンダーを作成できます。

要件:

カスタムアペンダーファクトリー

_io.dropwizard.logging.AbstractAppenderFactory_ (MyCustomFactoryと呼ばれる)を拡張します

ここでJsonPropertiesを作成し、構成ファイルで必要な検証にHibernate Annotationsを使用することで、.ymlファイルからカスタム構成をここに挿入できます。

_@NotNull
@JsonProperty
private String url;
@JsonProperty
private int maxBufferSize = 100;
@JsonProperty
private int sendDelayInSeconds = 10;
_

クラスに@JsonTypeName("YourAppenderName")を与えます。これは、構成でアペンダーを参照する方法です。

このクラスの機能は、Dropwizardが使用するアペンダーを作成することであるため、このクラスは、アペンダーに渡す構成にアクセスする必要があります。

カスタムアペンダー

_ch.qos.logback.core.AppenderBase_(MyCustomAppenderと呼ばれる)を拡張します。独自に作成することも、Logglyなどのサービスから既存のものを使用することもできます。

アペンダー内で、ログの送信元を確認し、ファイルに書き込む内容をフィルター処理します。

Dropwizardに新しいカスタムファクトリーについて伝えるには...

_io.dropwizard.logging.AppenderFactory_ディレクトリに_src/main/resources/META-INF/services/_というファイルを配置する必要があります。

このファイルの内容は、カスタムファクトリのフルネーム(パッケージを含む)です。 (例:com.myCompany.appender.MyCustomFactory)

カスタムアペンダーの使用

Ymlファイルに、指定した名前で新しいアペンダーを追加します。

_appenders:
# Log warnings and errors to stderr
- type: console
  threshold: INFO
  target: stderr
# Custom Logger
- type: YourAppenderName
  threshold: INFO
  url: https://sendYourLogsHere/logs
_
12
cbradsh1

サンプルについては、dropwizard-loggingライブラリのコードを参照してください。 FileAppenderFactory を確認してください。それは良い基準点です。