1. ホーム
  2. logging

[解決済み] Scalaのロギング

2022-04-21 13:41:02

質問

Scalaアプリケーションでロギングを行う良い方法は何でしょうか?言語哲学と一致し、コードを乱雑にせず、メンテナンスが少なく、邪魔にならないようなもの。以下は基本的な要求リストです。

  • シンプル
  • はコードを散らかさない。Scalaはその簡潔さが素晴らしいのです。コードの半分をロギング文にしたくはありません
  • ログ形式を変更することで、他のエンタープライズログやモニタリングソフトウェアに適合させることができます。
  • ロギングのレベル(デバッグ、トレース、エラーなど)に対応しています。
  • ディスクおよびその他の宛先(ソケット、コンソールなど)にログを記録できます。
  • 最小構成(ある場合
  • コンテナで動作する (例: ウェブサーバ)
  • (オプションですが、あると便利です) 言語に含まれているか、Mavenのアーティファクトとして提供されているので、これを使うためにビルドをハックする必要はないです。

既存のJavaロギングソリューションが使えることは知っていますが、上記のうち少なくとも2つ、つまり散らかり具合と構成で失敗しています。

ご返信ありがとうございました。

どのように解決するのですか?

slf4j ラッパー

Scalaのロギングライブラリのほとんどは、Javaのロギングフレームワーク(slf4j、log4jなど)の何らかのラッパーでしたが、2015年3月現在、生き残っているログライブラリはすべてslf4jとなっています。これらのログライブラリは、ある種の log オブジェクトを呼び出すことができます。 info(...) , debug(...) など。私はslf4jの大ファンではありませんが、今ではロギングフレームワークとして主流になっているようです。以下は、その説明です。 SLF4J :

<ブロッククオート

Simple Logging Facade for Java または (SLF4J) は、様々なロギングフレームワーク、例えば java.util.logging, log4j と logback のためのシンプルなファサードまたは抽象化として機能し、エンドユーザーがデプロイ時に希望のロギングフレームワークをプラグインできるようにするものである。

デプロイ時に基礎となるログライブラリを変更できることは、slf4jファミリーのロガー全体にユニークな特徴をもたらしますが、これは意識する必要があります。

  1. 設定としてのクラスパス のアプローチになります。slf4jがあなたが使っている基礎的なロギングライブラリを知る方法は、ある名前でクラスをロードすることです。私は、クラスローダーがカスタマイズされたとき、slf4jが私のロガーを認識しない問題を経験しました。
  2. なぜなら シンプルファサード は共通項であろうとするため、実際のログ呼び出しにのみ限定される。つまり、コード経由での設定はできない。

大きなプロジェクトでは、もしみんながslf4jを使うなら、推移的依存関係のロギング動作をコントロールできることは、実際に便利かもしれません。

Scalaのロギング

Scalaのロギング は、Heiko Seeberger が彼の slf4s . マクロを使って呼び出しを if 式に展開することで、高価なログコールを回避することができます。

<ブロッククオート

Scala Loggingは便利で高性能なロギングライブラリで、SLF4Jやその他のロギングライブラリをラッピングすることができます。

歴史的ロガー

  • ログラ Coda Hale氏によって書かれたLog4Jのラッパーです。昔はこれが好きだったのですが、今は放棄されています。
  • コンフィグ Scalaの初期に流行ったjava.util.loggingのラッパー。今は廃れた。