在我们的 web 应用程序中,我们使用 java.util.Logging(实际上是 JULI,因为我们部署到 Tomcat 6)。日志由 WEB-INF/classes 中的 logging.properties 文件配置,例如this。
我想配置记录器,以便它可以自动连接,例如:
@Autowired
private Logger mylogger;
我搜索了 Spring 论坛、网络,当然还有 Stack Overflow,但我找不到如何设置它。我很感激这方面的任何帮助。
谢谢!
一种方法是使用Java Config style,因此您将拥有一个像这样的 bean:
@Configuration
public class LoggerProvider {
@Bean
public Logger logger() {
return Logger.getLogger("foobar.whatever");
}
}
然后可以正常自动连接到应用程序的其余部分。
为了在某物(豆)上使用@Autowired,您必须使该豆受弹簧控制。有很多方法可以做到这一点,它们取决于您要使用的日志框架。
恐怕没有“一刀切”的解决方案。
通常,您会使用您选择的日志框架提供的静态初始化程序或对其进行一些抽象(例如 commons-logging)。
我找到了一个引用,其中引入了 @Logger 注释,也许这会将您指向您喜欢的方向:
http://jgeeks.blogspot.com/2008/10/auto-injection-of-logger-into-spring.html
为了使 Logger 可注入@Autowired,您必须有一个配置类,在其中配置了您使用的所有 Bean @Autowired。该类将标有@Configuration。在那里,您必须@Bean在配置中添加以下内容:
@Configuration
public class WebConfiguration {
@Bean
@Scope("prototype")
public Logger produceLogger(InjectionPoint injectionPoint) {
Class<?> classOnWired = injectionPoint.getMember().getDeclaringClass();
return LoggerFactory.getLogger(classOnWired);
}
}