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) @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 .
Статьи по Теме :
- Постоянный слой с Spring 3.1 и Hibernate
- Упрощение уровня доступа к данным с помощью Spring и Java Generics
- Spring Pitfalls: транзакционные тесты считаются вредными
- Log4j, Stat4j, SMTPAppender Integration — Объединение журналов ошибок для отправки электронной почты, когда слишком много
- Java Logging Mess
- 10 советов для правильной регистрации приложений
- Первичная причина регистрации исключений