問題タブ [spring-logback]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spring-boot - logback を使用して Spring Boot から JSON 形式のログを取得するための推奨される方法はありますか
スプリング ブートを使用すると、次のようにファイルを2.1.1.RELEASE
指定することで、ログを JSON としてフォーマットすることができます。logback-spring.xml
に追加するpom.xml
実際に次のようなメッセージが表示されます:
なんで?
ログが JSON 形式である場合により有利に動作するように見えるlogz.ioを試しています。一部の荷送人は、Java スタック トレースで見られるように複数行のログに苦労し、JSON でフォーマットすると、 and などのフィールドを自動的に解析level
できmessage
ますMDC データは自動的に取得されます。
docker イメージや、JSON 形式のログ メッセージを使用せずに rsyslog を使用するなど、ログを logzio に送信するいくつかの方法については、それほど素晴らしい経験ではありませんでした。
このアプローチの問題点
コンソールの追加では問題なく動作しますが、スプリング ブートは , , のようlogging.file=test.log
にlogging.level.com.example=WARN
提供しますlogging.pattern.console
。実際に、管理された構成をインポートして、そこからfile-appender.xml`spring-boot-2.1.1.RELEASE.jar!/org/springframework/boot/logging/logback/base.xml
をインポートできます。console-appender.xml and
コンソールアペンダーの例
ファイルアペンダーの例
これら 2 つは、まさにプロパティのスプリング構成をサポートするために必要なものですが、必要なエンコーダー/レイアウトは含まれていません。
私の最初のテストでは、アペンダーにそれらと同じ名前を付けてレイアウトを提供することはできないようです。例えば:
JSON 形式とプレーン テキスト形式の両方でメッセージがログに記録されます。
実際、これら 3 つのファイルの内容をインポートするのではなく、コピーしてカスタム構成に貼り付けることができます。次に、カスタマイズしたいものをオーバーライドすることがあります。
ただし、春が進化し、機能を追加する可能性のある新しいリリースが作成されると、新しいファイルをコピーして貼り付け、変更を加えてテストすることを永遠に強制されます。
私ができるより良い方法はありますか:
- アペンダーを完全に再定義するのではなく、アペンダーに追加の変更を加えるだけです。たとえば、構成を春から保持し、それらのアペンダーで使用される独自のエンコーダーまたはレイアウトを提供します。
- 構成なしで完全にプロパティを介してSpringをJSONログに構成します-私はこれを疑います:S
脚注: logzio はインポートできる依存関係を提供しますが、ログ プロバイダーをコードに直接結合するという考えは嫌いです。サーボがたまたま標準出力またはファイルに JSON ログを生成した場合、どのプロバイダーでもそれらを処理して特定の宛先に出荷するのは簡単だと思います。