私はLoggingの初心者です。私はLogbackを選択したプロジェクトを開始しました。SLF4JとLogback:ロガーを自動ワイヤードサービスに伝える
私は、私は2つの異なるパッケージで、2つのサービス(Boo
とBar
)を持って、次のlogback.xml
設定
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="BARLOGGER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME:-/repository/logs}/bar.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME:-/repository/logs}/bar.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="BOOLOGGER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME:-/repository/logs}/boo.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME:-/repository/logs}/boo.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<logger name="com.foo.bar" level="debug" additivity="false">
<appender-ref ref="BARLOGGER" />
</logger>
<logger name="com.foo.boo" level="debug" additivity="false">
<appender-ref ref="BOOLOGGER" />
</logger>
<root level="error">
<appender-ref ref="STDOUT" />
</root>
</configuration>
を持っています。私はそれぞれにアペンダーを設定しており、これらのサービスのロギングは正常に機能します。
これは私が直面している問題です。
両方サービス(Boo
とBar
)が定義されたアペンダがないいる第三のサービス(Tee
)のautowired依存性を有しています。 Tee
サービスはcom.foo.tee
にあります
私は3つのサービスに一意のログを持たせたくありません。異なるサービスと異なる時間に実行するためです。
このサービスと呼ばれるサービス(Boo
/)に応じて、Tee
サービスロギングをBooまたはBarアペンダに含める方法はありますか。
基本的に、私が達成したいことはバーティーの依存関係を持ってい
- です。 BarがTeeメソッドを呼び出す場合、そのメソッドのロギングはBar loggerにのみ書き込む必要があります
- BooにはTee依存関係もあります。ブーはティーメソッドを呼び出すと、そのメソッドのロギングが
Tee用の3番目のログファイルでは、どこから呼び出しが発生したのかを追跡することが困難になるため、これを実行するためのコンテキストが必要になります。
ありがとうございます!
PS:これまでの回答を見つけようとしましたが、間違ったキーワードで検索しているのか、それともできないのか分かりません。
あなたのプロジェクトにロンボクをインストールした場合、ロガーを取得するために必要なのは、@ Slf4jの注釈クラスです。それを見て、幸運。 – Sarief
@Sarief少し余計に1行だけを置き換えます。 'private final Logger log = LoggerFactory.getLogger(getClass())' – OrangeDog
@OrangeDogかもしれませんが、私にとってはインストールと使用のようでした。 D – Sarief