Статьи

Настроить ведение журнала LogBack с помощью Spring

LogBack — это API для ведения журнала, созданный тем же автором Log4j (более новая реализация, она похожа на новую версию). В этой статье я покажу, как интегрировать его и использовать в проекте Spring.

В этом руководстве я предполагаю, что вы используете простой проект Spring ROO, который подготовит для вас всю структуру проекта, для получения дополнительной информации см .: http://www.springsource.org/spring-roo .

Прежде всего вам нужно создать файл logback.xml (содержащий конфигурационные приложения, такие как log4j.properprties) в файле src / main / resources :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?xml version="1.0" encoding="UTF-8"?>
 
<configuration>
 
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
 
        <encoder>
 
            <pattern>%d %5p | %t | %-55logger{55} | %m %n</pattern>
 
        </encoder>
 
    </appender>
 
    <logger name="test.myapp.repos">
 
        <level value="INFO" />
 
    </logger>
 
    <logger name="org.springframework">
 
        <level value="INFO" />
 
    </logger>
 
    <root>
 
        <level value="INFO" />
 
        <appender-ref ref="CONSOLE" />
 
    </root>
 
</configuration>

Второй шаг — настроить зависимости Maven и добавить необходимые библиотеки LogBack:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<-- Properties Settings -->
 
<properties>
 
    <roo.version>1.1.0.RELEASE</roo.version>
 
    <spring.version>3.0.5.RELEASE</spring.version>
 
    <aspectj.version>1.6.10</aspectj.version>
 
    <slf4j.version>1.6.1</slf4j.version>
 
    <logback.version>0.9.26</logback.version>
 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 
 </properties>
 
<-- Dependencies Settings -->
 
<dependency>
 
    <groupId>org.slf4j</groupId>
 
    <artifactId>slf4j-api</artifactId>
 
    <version>${slf4j.version}</version>
 
</dependency>
 
<dependency>
 
    <groupId>log4j</groupId>
 
    <artifactId>log4j</artifactId>
 
    <version>1.2.16</version>
 
</dependency>
 
<dependency>
 
    <groupId>org.slf4j</groupId>
 
    <artifactId>jcl-over-slf4j</artifactId>
 
    <version>${slf4j.version}</version>
 
</dependency>
 
<dependency>
 
    <groupId>ch.qos.logback</groupId>
 
    <artifactId>logback-classic</artifactId>
 
    <version>${logback.version}</version>
 
</dependency>
 
<dependency>
 
    <groupId>ch.qos.logback</groupId>
 
    <artifactId>logback-core</artifactId>
 
    <version>${logback.version}</version>
 
</dependency>
 
<dependency>
 
    <groupId>ch.qos.logback</groupId>
 
    <artifactId>logback-access</artifactId>
 
    <version>${logback.version}</version>
 
</dependency>

Вам нужно избавиться от всех зависимостей Log4j в Maven pom.xml, сгенерированном Spring ROO, очистить каждую отдельную зависимость, связанную с ведением журнала, прежде чем добавлять код, предоставленный для настройки LogBack.

Чтобы использовать регистратор в разрабатываемом вами классе, вам необходимо создать его статический экземпляр и нормально использовать его при использовании Log4J, единственное отличие — это код реализации и конфигурации LogBack против Log4j. На Logback.xml ваш класс должен быть отсканирован для работы регистратора.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
package test.myapp.repos; /*This package figures on LogBack.xml*/
 
import org.slf4j.Logger;
 
import org.slf4j.LoggerFactory;
 
public class MyTestClass {
 
    static Logger logger = LoggerFactory.getLogger(ItemController.class);
 
    ...
 
    public void create(String args) {
 
        logger.debug("My Args Is => " + args);
 
    }
 
    ...
 
}
Существует еще один изощренный способ внедрения регистратора в bean-компоненте Spring, это может быть достигнуто путем разработки пользовательского BeanPostProcessor, который будет автоматически внедрять регистратор в поля, помеченные @Log (мы создали эту пользовательскую аннотацию) вместо создания вручную вручную регистратор, как описано ранее.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/** Custom @Logger annotation **/
 
@Retention(RUNTIME)
 
@Target(FIELD)
 
@Documented
 
public @interface Log { }
 
/** LoggerPostProcessor => Custom Spring BeanPostProcessor **/
 
public class LoggerPostProcessor implements BeanPostProcessor {
 
    public Object postProcessAfterInitialization(Object bean, String beanName) throws
 
        BeansException {
 
        return bean;
 
    }
 
    public Object postProcessBeforeInitialization(final Object bean, String beanName)
 
          throws BeansException {
 
        ReflectionUtils.doWithFields(bean.getClass(), new FieldCallback() {
 
                @SuppressWarnings("unchecked")
 
                public void doWith(Field field) throws IllegalArgumentException,
 
                    IllegalAccessException {
 
                    ReflectionUtils.makeAccessible(field);
 
                    //Check if the field is annoted with @Log
 
                    if (field.getAnnotation(Log.class) != null) {
 
                        Log logAnnotation = field.getAnnotation(Log.class);
 
                        Logger logger = LoggerFactory.getLogger(bean.getClass());
 
                        field.set(bean, logger);
 
                    }
 
                }
 
        });
 
        return bean;
 
    }
 
}
 
/** Usage on a Spring Bean **/
 
@Component
 
public class MyBeanImpl implements MyBean {
 
    /** Not manual set up code **/
 
    @Log Logger myLogger;
 
    ...
 
}

Последнее, что нужно сделать, это объявить этот новый BeanPostProcessor в файле applicationContext.xml:

1
2
3
<!-- The Logger Injector -->
 
<bean id="LogginInjector" class="ma.oncf.achat.utils.LoggerPostProcessor" />

Для получения дополнительной информации о том, почему нужно переключиться на LogBack, см .: Почему переключаться на LogBack

Ссылка: Настройте LogBack Logging с помощью Spring от нашего партнера JCG Идрисса Мрабти в блоге Fancy UI .

Статьи по Теме :