Заметки об исследовании Spring Boot (2) Интеграция log4j2
1. Введение в log4j2
Хороший вывод журнала может быстро найти проблему при обнаружении проблемы. Поэтому мы сначала интегрировали в него log4j.
Мы используем log4j2, который в принципе ничем не отличается от log4j с точки зрения использования, большая разница в том, чтоlog4j2 больше не поддерживает файл конфигурации свойств и поддерживает файлы в формате xml и json.
2. Добавьте зависимость log4j2
Добавьте зависимости в файл pom:
1<!-- 从parent项目中出去logging这个包,因为我们使用的是log4j2 -->
2<dependency>
3 <groupId>org.springframework.boot</groupId>
4 <artifactId>spring-boot-starter</artifactId>
5 <exclusions>
6 <exclusion>
7 <groupId>org.springframework.boot</groupId>
8 <artifactId>spring-boot-starter-logging</artifactId>
9 </exclusion>
10 </exclusions>
11</dependency>
12<!-- 引入log4j2支持 -->
13<dependency>
14 <groupId>org.springframework.boot</groupId>
15 <artifactId>spring-boot-starter-log4j2</artifactId>
16</dependency>
17
18<dependency>
19 <groupId>org.slf4j</groupId>
20 <artifactId>log4j-over-slf4j</artifactId>
21 <version>1.7.24</version>
22 <exclusions>
23 <exclusion>
24 <artifactId>slf4j-api</artifactId>
25 <groupId>org.slf4j</groupId>
26 </exclusion>
27 </exclusions>
28</dependency>
3. Добавьте файл конфигурации log4j2
1<?xml version="1.0" encoding="UTF-8"?>
2<!--
3 status : 这个用于设置log4j2自身内部的信息输出,可以不设置,
4 当设置成trace时,会看到log4j2内部各种详细输出
5 monitorInterval : Log4j能够自动检测修改配置文件和重新配置本身,
6 设置间隔秒数。此处表示每隔600秒重读一次配置文件
7-->
8<Configuration status="OFF" monitorInterval="600">
9
10 <!--日志级别:TRACE < DEBUG < INFO < WARN < ERROR < FATAL-->
11 <!--如果设置为WARN,则低于WARN的信息都不会输出-->
12 <Properties>
13 <!-- 配置日志文件输出目录,此处为项目根目录下的logs文件夹 -->
14 <Property name="LOG_HOME">D:\sysLogs\learning</Property>
15 <property name="FILE_NAME">learningSpringBoot</property>
16 </Properties>
17
18 <Appenders>
19 <!--这个输出控制台的配置-->
20 <Console name="Console" target="SYSTEM_OUT">
21 <!--控制台只输出level及其以上级别的信息(onMatch),
22 其他的直接拒绝(onMismatch)-->
23 <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
24 <!--日志输出的格式-->
25 <!--%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n-->
26
27 <PatternLayout pattern="|%d{yyyy-MM-dd HH:mm:ss.SSS}|%5p|%5t|%4c:%L|%m%n"/>
28 </Console>
29
30 <RollingRandomAccessFile name="LEARNING" fileName="${LOG_HOME}/${FILE_NAME}.log"
31 filePattern="${LOG_HOME}/backup/${FILE_NAME}_%d{yyyy-MM-dd}_%i.log">
32 <!--%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n-->
33 <PatternLayout pattern="|%d{yyyy-MM-dd HH:mm:ss.SSS}|%5p|%5t|%4c:%L|%m%n"/>
34 <Policies>
35 <TimeBasedTriggeringPolicy interval="1"/>
36 <SizeBasedTriggeringPolicy size="20MB"/>
37 </Policies>
38 <DefaultRolloverStrategy max="10"/>
39 </RollingRandomAccessFile>
40 </Appenders>
41
42 <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
43 <Loggers>
44 <Logger name="com.zdran.springboot" level="INFO" additivity="true">
45 <AppenderRef ref="LEARNING"/>
46 </Logger>
47 <Logger name="org.springframework" level="INFO" additivity="true">
48 <AppenderRef ref="LEARNING"/>
49 </Logger>
50 <Logger name="org.apache" level="INFO" additivity="true">
51 <AppenderRef ref="LEARNING"/>
52 </Logger>
53 <Root level="INFO">
54 <Appender-Ref ref="Console"/>
55 </Root>
56 </Loggers>
57
58</Configuration>
Такие подробные примечания не нуждаются в дополнительных пояснениях. . .
в<Property name="LOG_HOME">D:\sysLogs\learning</Property>
Есть еще одна настройка, мы можем настроить заполнитель в xml, а затем указать каталог журнала в виде параметров при запуске командной строки. Его можно настроить так:
1<Property name="LOG_HOME">${sys:log4j.path}/learning</Property>
2
3启动命令 java -jar xxx.jar -log4j.path=D:\sysLogs\learning
Если вы используете эту конфигурацию, она сообщит о
1ERROR StatusLogger Cannot access RandomAccessFile java.io.IOException: 文件名、目录名或卷标语法不正确。
2 java.io.IOException: 文件名、目录名或卷标语法不正确。
Эта ошибка вызвана тем, что заполнитель не является допустимым путем, который можно настроить с помощью:
Настройте параметры в параметрах виртуальной машины
-Dlog4j.path=D:\sysLogs
.Пожалуйста, укажите источник
Ссылка на эту статью:Этот курс.com/20180629.Контракт…