如何让google guice注入一个自定义记录器,比如一个commons-logging或log4j logger

时间:2010-04-09 05:09:46

标签: java logging dependency-injection apache-commons guice

Google guice有built-in logger binding。但是如果我想使用commons-logging或log4j logger呢?

我可以注意注入由

创建的日志
LogFactory.getLog(CLASS.class)

但具有与内置绑定相同的行为:

  

绑定会自动将记录器的名称设置为注入Logger的类的名称。


它甚至有意义吗?或者喊我只是使用内置的java Logger?或者只使用没有注射的公共记录?

4 个答案:

答案 0 :(得分:11)

Guice wiki上的CustomInjections页面详细描述了如何注入由其注入的类命名的记录器。

答案 1 :(得分:1)

这是你的选择。我已经使用wiki上详述的方法成功地使用了logback和Guice。

查看sli4j项目。它可能很有用。

答案 2 :(得分:0)

Guice对于注入接口的不同实现非常有用。这不是这里的情况,因为不同的日志记录实现都有不同的API。

如果您希望以后能够在针对界面进行开发时交换实际的日志记录实现,请使用commons loggingslf4j

答案 3 :(得分:0)

虽然您无法覆盖提供的java.util.logging.Logger记录器,但您可以像绑定任何其他类一样绑定新的记录器:

bind(Log.class).to(LogFactory.getLog(YourClass)); // or toInstance(...);

但是,创建一个命名的记录器会有点困难。

如果您浏览Google Guice代码(u til.BinderImpl.java:87),您可以看到他们如何为注入的记录器的每个实例分配不同的类名。但是,我没有仔细检查它,知道它是否易于重现。

有可能创建一个提供者或注入一个以某种方式访问​​上下文的工厂,这样你就可以提供一个命名的记录器。