2016-09-15 4 views
2

log4jロガーインスタンスはLogManager.getLogger()によって作成されているとわかっています。これは、呼び出しクラスを検出するリフレクションマジックを行い、特定のログレベル設定にとって重要な名前です。 しかし、ロガーを手動で作成し、そのクラスの他のすべての依存関係と同様にSpringを使用して注入したい場合はどうすればよいですか?これを行うとき、呼び出し側のクラスはもちろんロガーに依存するものではなく、春です(ある工場)。だから、クラス名を検出することはもうできません。 質問はもっと簡単です:log4j2クラス名の検出はどういうわけかIoCで動作しますか?Log4j2 LogManager.getLogger()with Spring

public class SomeClassWithDependencies { 
    private final DependencyOne dependencyOne; 
    private final Logger logger; 

    @Inject 
    public SomeClassWithDependencies(
       DependencyOne dependencyOne, 
       Logger logger) { // <- this is created by spring and operates on the name of some spring factory instead of SomeClassWithDependencies 
     this.dependencyOne = dependencyOne; 
     this.logger = logger; 
    } 
} 

答えて

0

Nevermind。私は、実際には、ロガーは構成的な依存関係とみなされるべきであると認識しました。だから私は常にクラスごとに手動でロガーインスタンスを作成しています。私が具体的なロギング技術を隠したいのであれば、いくつかのLoggerFactoryをインジェクトし、それをコンストラクタ内に作成して、マジックリフレクションを動作させることができます。