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

Google guice具有内置的记录器绑定function 。 但是,如果我想使用commons-logging或log4j记录器呢?

我是否可以注入一个由其创建的日志

LogFactory.getLog(CLASS.class) 

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

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


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

Guice wiki上的CustomInjections页面准确描述了如何注入由它注入的类命名的记录器。

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

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

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

如果您希望以后能够在针对接口进行开发时交换实际的日志记录实现,请使用commons logging或slf4j 。

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

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

但是,创建一个命名的记录器会变得更加困难。

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

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