LogBack — это API для ведения журнала, созданный тем же автором Log4j (более новая реализация, она похожа на новую версию). В этой статье я покажу, как интегрировать его и использовать в проекте Spring.
В этом руководстве я предполагаю, что вы используете простой проект Spring ROO, который подготовит для вас всю структуру проекта, для получения дополнительной информации см .: http://www.springsource.org/spring-roo .
|
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); } ...} |
|
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)@Documentedpublic @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 **/@Componentpublic 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 .
Статьи по Теме :
- Постоянный слой с Spring 3.1 и Hibernate
- Упрощение уровня доступа к данным с помощью Spring и Java Generics
- Spring Pitfalls: транзакционные тесты считаются вредными
- Log4j, Stat4j, SMTPAppender Integration — Объединение журналов ошибок для отправки электронной почты, когда слишком много
- Java Logging Mess
- 10 советов для правильной регистрации приложений
- Первичная причина регистрации исключений