私はSpringとslf4jを使用するアプリケーションで作業しています。そのアプリケーションは、より多くのApplicationContextを並列に使用します。 これらの異なるApplicationContextが異なるログプロパティを使用する方法はありますか? 最初のACは "x.txt"に、2番目のACは "y.txt"にログインできます。Spring:異なるApplicationContextの異なるロギング動作
私はより多くのプロパティファイルを使用したくありません。適切な方法は、Spring XML設定ファイルでLogger Beanを定義し、適切なプロパティに対して異なる出力ターゲットを設定できるようにすることです。例えば
:
<bean id="LoggerBean" class="???">
<property name="target" value="${target}" />
</bean>
は、ここで私は非常に便利になり、ソースからターゲット変数を操作できます。
private static final Logger log = LoggerFactory.getLogger(MyClass.class);
のでLoggerFactory.getLogger
はLoggerクラスをインスタンス化するLoggerBean
Bean構成を使用します。
私は、それぞれのApplicationContextが異なるプロパティ(異なるターゲット出力のような)を持つ独自のLoggerFactory
オブジェクトを持つメソッドが必要です。だから私は現在のコードを書き直す必要はありません。
同じxml設定ファイルで設定されたApplicationContexts
を使用します。したがって、これらのApplicationContextでは、同じクラスの が使用されます。そのため、すべてLogger
は、LoggerFactory
からインスタンス化されています。 すべてのLoggerは、すべてApplicationContext
( "MyClass")で同じクラスなのでLoggerFactory.getLogger(MyClass.class)
という形式でインスタンス化されますが、別の名前はLoggers
。
ご回答ありがとうございます。
あなたがコンテキストにロガーを追加するためのカスタム FactoryBeanを使用することができます
プライベートstatic final Logger log = LoggerFactory.getLogger(MyClass.class); ここで、org.slf4j.LoggerFactoryのstaticメソッドは、org.slf4j.Loggerクラスを生成します。 私は、各ApplicationContextが異なるプロパティ(異なるターゲット出力のような)を持つ独自のLoggerFactoryオブジェクトを持っているメソッドが必要です。 したがって、現在のコードを書き直す必要はなく、import文をLoggerFactory実装に入れ替えるだけです。 – Sharp
FactoryBeanをSLF4Jロガーを返すように変更しました –