私は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でこれを行う方法があるかどうか誰かに教えてもらえますか?ありがとう!
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などのサービスから既存のものを使用することもできます。
アペンダー内で、ログの送信元を確認し、ファイルに書き込む内容をフィルター処理します。
_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
_
サンプルについては、dropwizard-loggingライブラリのコードを参照してください。 FileAppenderFactory
を確認してください。それは良い基準点です。