2010-04-09 55 views
7

谷歌guice有一个built-in logger binding。但是如果我想使用commons-logging或log4j记录器呢?我如何获得谷歌guice注入自定义记录器,说一个commons-logging或log4j记录器

我能得到吉斯由

LogFactory.getLog(CLASS.class) 

注入创造了一个日志,但与如内置装订相同的行为:

的自动绑定设置记录器的名称的名称到其中的记录器正在喷射的类..


它有意义吗?或者我只是简单地使用内置的java Logger?或者只使用commons-logging而不注射?

+0

不,它是有道理的。 Log4j支持更多的日志记录级别,并有更多可用的appender,因此想要使用它而不是内置记录器对我来说非常合适。 – 2010-04-09 05:28:36

回答

11

Guice wiki上的CustomInjections页面描述了如何注入一个记录器,该记录器由它所注入的类命名。

+0

不错的链接。这是一个痛苦的过程,但功能仍然存在。 – 2010-04-09 16:19:09

+0

感谢您的链接。它为我工作。我使用这个策略来实现SLF4J解决方案。 – 2010-04-10 15:27:58

+3

对于所有在示例中对InjectLogger类感到困惑的人:只需在项目中创建一个名为“InjectLogger”的空Annotation类。这不是一个外部依赖(这是我第一次假设)。 – 2013-04-20 12:49:27

1

这是您的选择。我已经使用wiki上详细介绍的方法成功使用了与Guice的logback

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

0

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

如果您希望能够在以后使用commons loggingslf4j进行开发时更改实际的日志记录实施。

+0

Hibernate使用SLF4J和我整合到一个基于Guice的应用程序没有任何问题,所以我可以推荐它,虽然我没有玩过commons logging。 – 2010-04-09 06:15:38

0

虽然不能覆盖所提供的java.util.logging.Logger记录器,你绑定一个新的记录,就像使用任何其他类:

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

但是,创建一个名为记录器将是一个有点困难。

如果您深入了解Google Guice代码(u til.BinderImpl.java:87),您可以看到它们如何为注入的每个记录器实例指定不同的类名。但是,我没有仔细检查,以确定它是否容易重现。

可能可以创建一个提供程序或注入某种方式访问​​上下文的工厂,以便您可以提供一个指定的记录器。

+0

我不明白这一点。如果您在活页夹中明确定义YourClass,则会为整个应用程序获取同一个班级的日志。 – 2016-05-09 19:58:13