slf4j+log4j2的配置
昨天⾃⼰测试了⼀下slf4j+log4j2的配置,可以正常使⽤,虽然配置⼗分简单,但好记性不如烂笔头,想想还是记录下来吧。运⾏的环境:jdk1.7、tomcat7、Maven的web项⽬
1.在新建的maven项⽬的pom⽂件中添加jar包依赖(依赖代码在步骤末尾):
需要添加依赖的jar包有:
slf4j的api接⼝包:slf4j-api
log4j2的核⼼包:log4j-core
log4j2的api接⼝包:log4j-api
slf4j对应log4j2⽇志框架的驱动包:log4j-slf4j-impl
log4j2的异步⽇志功能包:com.lmax.disruptor
解决web项⽬log4j可能出现警告的jar包:log4j-web
2.配置l⽇志配置⽂件(⽇志配置⽂件内容放在步骤末尾):
·⽇志配置⽂件默认读取路径为src/main/resource
·若⽂件放置在默认读取路径下则⽆需配置读取路径
·若⽂件放置到其他路径下则需要在l中设置⽇志配置⽂件的读取路径,代码如下:
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>l</param-value>
</context-param>
3.在代码中使⽤⽇志功能:
1 import org.slf4j.Logger;
2 import org.slf4j.LoggerFactory;
3
4 public class logTest {
5
6    // 通过slf4j接⼝创建Logger对象
7    private static final Logger logger = Logger(logTest.class);
8
9    public static void main(String[] args) {
10        logger.info("this is info");
11        ("this is error");
12    }
13 }
运⾏效果:
关于⽇志配置⽂件的详细说明请参考,以下是l需要加⼊的jar包依赖以及⽇志配置⽂件l内容⽰例:l需要加⼊的jar包依赖:
<properties>
<!-- jar包版本设置 -->
<slf4j.version>1.7.21</slf4j.version>
<log4j.version>2.11.0</log4j.version>
</properties>
<dependencies>
<!-- 导⼊slf4j的接⼝包以及对应⽇志框架的驱动包 -->
<!-- mvnrepository/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!--⽤于slf4j与log4j2保持桥接 -->
<!-- mvnrepository/artifact/org.apache.logging.log4j/log4j-slf4j-impl -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<scope>runtime</scope>
<version>${log4j.version}</version>
</dependency>
<!-- 导⼊⽇志框架核⼼包与接⼝包 -->
<!-- mvnrepository/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<scope>runtime</scope>
<version>${log4j.version}</version>
</dependency>
<!-- mvnrepository/artifact/org.apache.logging.log4j/log4j-api -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<!--⽤于解决web环境下关闭服务器时可能出现的log4j线程⽆法及时关闭的warn,web⼯程需要包含log4j-web,⾮web⼯程不需要 --> <!-- mvnrepository/artifact/org.apache.logging.log4j/log4j-web -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<scope>runtime</scope>
<version>${log4j.version}</version>
</dependency>
<!--使⽤log4j2的AsyncLogger时需要包含disruptor -->
<!-- mvnrepository/artifact/com.lmax/disruptor -->
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<scope>runtime</scope>
<version>3.4.2</version>
</dependency>
</dependencies>
⽇志配置⽂件内容⽰例:
1<?xml version="1.0" encoding="UTF-8"?>
2
3<!--
4⽇志说明:
5
6(1)请根据实际情况配置各项参数
7
8(2)需要注意⽇志⽂件备份数和⽇志⽂件⼤⼩,注意预留⽬录空间
9
10(3)实际部署的时候backupFilePatch变量需要修改成linux⽬录
11
12-->
13
14<configuration status="error">
15
16<Properties>
17
18<Property name="fileName">front.log</Property>
19
20<Property name="backupFilePatch">d:/usr/front/log/</Property>
21
22</Properties>
23
24<!--先定义所有的appender-->
25
26<appenders>
27
28<!--这个输出控制台的配置-->
29
30<Console name="Console" target="SYSTEM_OUT">
31
32<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
33
34<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
35
36<!--这个都知道是输出⽇志的格式-->
37
38<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
39
40</Console>
log4j2不打印日志
41
42
43
44<!--这个会打印出所有的信息,每次⼤⼩超过size,则这size⼤⼩的⽇志会⾃动存⼊按年份-⽉份建⽴的⽂件夹下⾯并进⾏压缩,作为存档--> 45
46<RollingFile name="RollingFile" fileName="${backupFilePatch}/${fileName}"
47
48            filePattern="${backupFilePatch}$${date:yyyy-MM}/app-%d{yyyyMMddHHmmssSSS}.">
49
50<PatternLayout
51
52pattern="%d{yyyy-MM-dd HH:mm:ss.SSS z} %-5level %class{36} %L %M - %msg%xEx%n"/>
53
54
55
56<!-- ⽇志⽂件⼤⼩ -->
57
58<SizeBasedTriggeringPolicy size="20MB"/>
59
60<!-- 最多保留⽂件数 -->
61
62<DefaultRolloverStrategy max="20"/>
63
64</RollingFile>
65
66</appenders>
67
68
69
70<!--然后定义logger,只有定义了logger并引⼊的appender,appender才会⽣效-->
71
72<loggers>
73
74<!--建⽴⼀个logger,此logger监听name对应的包名下的⽇志输出,level表⽰⽇志级别-->
75
76<Logger name="stlog" level="trace"
77
78            additivity="true">
79
80<AppenderRef ref="RollingFile"/>
81
82</Logger>
83
84<!--建⽴⼀个默认的root的logger-->
85
86<Root level="error">
87
88<!-- 在root中关联appender才会在对应的位置输出⽇志,定义⼀个输出到⽂件的appender也必须关联到此处才会保存⽇志到⽂件 --> 89
90<AppenderRef ref="Console"/>
91
92</Root>
93
94</loggers>
95
96</configuration>