java - 如何使用 Google Guice 注入(inject)记录器

标签 java logging guice

通常我这样定义记录器:

private static final Logger logger = LoggerFactory.getLogger(MyClass.class); 

但是在使用@Inject时我们必须使用非静态和非final字段,比如:

@Inject
private Logger logger;

即记录器将在此类的每个实例中创建,记录器也是可变的。可能存在某种使记录器静态的方法?还有我如何将记录器绑定(bind)到某个类(我在从工厂 LoggerFactory.getLogger(MyClass.class); 创建记录器对象时使用发送类对象,如何使用注入(inject)以相同的方式创建记录器?) ?

最佳答案

请检查Custom Injections在 Guice wiki 上,有一个完整的 Log4J 示例。

编辑:您可以为记录器使用 static 字段或 final 字段,但不能使用 static final 字段。这是一个 Java limitation .

也要小心that :

Injecting final fields is not recommended because the injected value may not be visible to other threads.

还没有测试过,但是文章中的代码应该适用于静态字段,尽管您可以通过摆脱 MembersInjector 并在 TypeListener 中完成所有操作来改进它(因为静态字段只需要设置一次).

使用 requestStaticInjection() 将强制您在模块文件中列出所有类 - 这不是一个好主意,因为您很快就会忘记添加一个。

OTOH 如果你只想支持 JUL,你最好使用 built-in support (正如 Jeff 所提到的,我假设您不想要一个笼统的答案,因为您没有在您的问题中具体提到 JUL)。

关于java - 如何使用 Google Guice 注入(inject)记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14953541/

相关文章:

java - 容器和算法

java - Android 蓝牙检测设备何时连接问题

java - 在 MVC 应用程序中对日志消息进行分组的最佳方法是什么

java - 混淆后的日志消息

spring - 将Guice组件集成到Spring应用程序中

java - Tomcat Web 应用程序、Spring 和 Hibernate 的数据源

java - .asSet(...) 是否存在于任何 API 中?

ruby-on-rails - 如何从Rails日志中过滤嵌套参数

java - 使用 Spring 作为 Morphia 的对象工厂

scala - Play/Scala 将 Controller 注入(inject)测试