Весной, как я могу настроить java.util.Logging, чтобы он мог быть автоматически подключен? - PullRequest
3 голосов
/ 15 июня 2011

В нашем веб-приложении мы используем java.util.Logging (фактически, JULI, так как мы развертываем в Tomcat 6). Ведение журнала настраивается с помощью файла logging.properties в WEB-INF / classes, а this .

Я бы хотел настроить регистратор так, чтобы он мог быть подключен автоматически, например:

@Autowired
private Logger mylogger;

Я искал на форумах Spring, в Интернете и, конечно же, переполнение стека, и не могу найти, как это настроить. Буду признателен за любую помощь в этом.

Спасибо!

Ответы [ 3 ]

3 голосов
/ 15 июня 2011

Одним из способов будет использование стиля Java Config , поэтому у вас будет один компонент, подобный этому:

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

Это может быть автоматически подключено к остальной части приложения, как обычно.

2 голосов
/ 15 июня 2011

Чтобы использовать @Autowired на каком-либо объекте (бобе), вы должны сделать этот бин пружинным.Есть много способов сделать это, и они зависят от того, какую среду ведения журналов вы хотите использовать.

Боюсь, что не существует универсального решения.

Обычно вы используете статический инициализатор, предоставляемый вашей каркасом ведения журналов, или некоторую абстракцию над ней (например, commons-logging).

Я нашел одну ссылку, в которой аннотация @Loggerвводится, может быть, это указывает вам направление по вкусу:

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

1 голос
/ 20 февраля 2018

Чтобы Logger можно было вводить с @Autowired, у вас должен быть класс конфигурации, в котором вы сконфигурировали все Бины, с которыми вы используете @Autowired.Этот класс будет отмечен @Configuration.Там вы должны поместить в вашу конфигурацию следующее @Bean:

@Configuration
public class WebConfiguration {

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