Google guice 有一个内置的记录器绑定。但是,如果我想使用 commons-logging 或 log4j 记录器怎么办?
我可以得到 guice 来注入由创建的日志吗
LogFactory.getLog(CLASS.class)
但具有与内置绑定相同的行为:
绑定会自动将记录器的名称设置为注入记录器的类的名称。
它甚至有意义吗?还是喊我干脆用java自带的Logger?或者只使用公共日志而不注入?
Google guice 有一个内置的记录器绑定。但是,如果我想使用 commons-logging 或 log4j 记录器怎么办?
我可以得到 guice 来注入由创建的日志吗
LogFactory.getLog(CLASS.class)
但具有与内置绑定相同的行为:
绑定会自动将记录器的名称设置为注入记录器的类的名称。
它甚至有意义吗?还是喊我干脆用java自带的Logger?或者只使用公共日志而不注入?
Guice wiki 上的CustomInjections页面准确地描述了如何注入一个由它被注入的类命名的记录器。
这是你的选择。我已经使用logback
wiki 上详述的方法成功地使用了 Guice。
看看sli4j项目。它可能有用。
Guice 对于注入接口的不同实现非常有用。这不是这里的情况,因为不同的日志记录实现都有不同的 API。
如果您希望以后在针对接口进行开发时能够交换实际的日志记录实现,请使用commons logging或slf4j。
尽管您不能覆盖提供的java.util.logging.Logger
记录器,但您可以像绑定任何其他类一样绑定一个新的记录器:
bind(Log.class).to(LogFactory.getLog(YourClass)); // or toInstance(...);
但是,创建一个命名记录器会有点困难。
如果您深入研究 Google Guice 代码(util.BinderImpl.java:87),您可以看到它们如何为注入的每个记录器实例分配不同的类名。但是,我还没有仔细检查过它是否很容易重现。
可以创建一个提供者或注入一个以某种方式可以访问上下文的工厂,这样您就可以提供一个命名的记录器。