开发者

In Spring how do I configure java.util.Logging so it can be autowired?

In our webapp we're using java.util.Logging (JULI, actually, since we deploy to T开发者_开发百科omcat 6). Logging is configured by a logging.properties file in WEB-INF/classes, a la this.

I'd like to configure the logger so it can be autowired, something like:

@Autowired
private Logger mylogger;

I've searched the Spring forums, the web, and of course Stack Overflow and I can't find how to set this up. I'd appreciate any help on this.

Thanks!


One way would be to use the Java Config style, so you'd have one bean like this:

@Configuration
public class LoggerProvider {
    @Bean
    public Logger logger() {
        return Logger.getLogger("foobar.whatever");
    }
}

That could then be autowired into the rest of the app as normal.


In order to use @Autowired on something (a bean) you must make that bean spring-controlled. There are many ways to do this and they depend on the logging framework you want to use.

I'm afraid there isn't a 'one-size-fits-all' solution.

Usually, you would use a static initializer provided by the logging framework of your choice or some abstraction over it (e.g. commons-logging).

I found one reference in which a @Logger annotation is introduced, maybe that points you into a direction of your liking:

http://jgeeks.blogspot.com/2008/10/auto-injection-of-logger-into-spring.html


In order to make Logger be injectable with @Autowired, you must have a configuration class where you have configured all the Beans with which you use @Autowired. That class will be marked with @Configuration. There you must put the following @Bean in your configuration:

@Configuration
public class WebConfiguration {

    @Bean
    @Scope("prototype")
    public Logger produceLogger(InjectionPoint injectionPoint) {
        Class<?> classOnWired = injectionPoint.getMember().getDeclaringClass();
        return LoggerFactory.getLogger(classOnWired);
    }
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜