slf4j+log4j2的配置

Posted new-life

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了slf4j+log4j2的配置相关的知识,希望对你有一定的参考价值。

昨天自己测试了一下slf4j+log4j2的配置,可以正常使用,虽然配置十分简单,但好记性不如烂笔头,想想还是记录下来吧。

运行的环境:jdk1.7tomcat7Mavenweb项目

1.在新建的maven项目的pom文件中添加jar包依赖(依赖代码在步骤末尾):

需要添加依赖的jar包有:

slf4japi接口包:slf4j-api

log4j2的核心包:log4j-core

log4j2api接口包:log4j-api

slf4j对应log4j2日志框架的驱动包:log4j-slf4j-impl

log4j2的异步日志功能包:com.lmax.disruptor

解决web项目log4j可能出现警告的jar包:log4j-web

2.配置log4j2.xml日志配置文件(日志配置文件内容放在步骤末尾

·日志配置文件默认读取路径为src/main/resource

·若文件放置在默认读取路径下则无需配置读取路径

·若文件放置到其他路径下则需要在web.xml中设置日志配置文件的读取路径,代码如下:

<context-param>
   <param-name>log4jConfiguration</param-name>
   <param-value>classpath:log4j2.xml</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 = LoggerFactory.getLogger(logTest.class);
 8 
 9     public static void main(String[] args) {
10         logger.info("this is info");
11         logger.error("this is error");
12     }
13 }

运行效果:

 技术分享图片

关于日志配置文件的详细说明请参考log4j2配置文件log4j2.xml详解,以下是pom.xml需要加入的jar包依赖以及日志配置文件log4j2.xml内容示例:

pom.xml需要加入的jar包依赖:

<properties>

<!-- jar包版本设置 -->

<slf4j.version>1.7.21</slf4j.version>

<log4j.version>2.11.0</log4j.version>

</properties>

<dependencies>

<!-- 导入slf4j的接口包以及对应日志框架的驱动包 -->

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-api</artifactId>

<version>${slf4j.version}</version>

</dependency>

<!--用于slf4j与log4j2保持桥接 -->

<!-- https://mvnrepository.com/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>

 

<!-- 导入日志框架核心包与接口包 -->

<!-- https://mvnrepository.com/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>

<!-- https://mvnrepository.com/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工程不需要 -->

<!-- https://mvnrepository.com/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 -->

<!-- https://mvnrepository.com/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>
41 
42         
43 
44         <!--这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
45 
46         <RollingFile name="RollingFile" fileName="${backupFilePatch}/${fileName}"
47 
48             filePattern="${backupFilePatch}$${date:yyyy-MM}/app-%d{yyyyMMddHHmmssSSS}.log.gz">
49 
50             <PatternLayout
51 
52                 pattern="%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="com.testlog" 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>

 

以上是关于slf4j+log4j2的配置的主要内容,如果未能解决你的问题,请参考以下文章

org.slf4j 怎么读取log4j的配置文件

Log4j 2 + Slf4j 的配置和使用

log4j和slf4j的使用

log4j2配置文件详解(springboot+slf4j+log4j2+yaml+lombok)

Log4j,Log4j2,logback,slf4j日志学习

JAVA中使用log4j及slf4j进行日志输出的方法