博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
log4j2 与 spring mvc整合
阅读量:4994 次
发布时间:2019-06-12

本文共 8677 字,大约阅读时间需要 28 分钟。

log4j2不仅仅是log4j的简单升级,而是整个项目的重构,官网地址:,大家可以从官网的介绍看出它相比log4j第1代的种种优点。

一、基本使用

1.1 maven依赖项

1         
2
org.apache.logging.log4j
3
log4j-api
4
2.0.2
5
6
7
org.apache.logging.log4j
8
log4j-core
9
2.0.2
10
View Code

1.2 Hello world示例

1 package com.cnblogs.yjmyzz; 2  3 import org.apache.logging.log4j.LogManager; 4 import org.apache.logging.log4j.Logger; 5  6 /** 7  * Hello world! 8  *  9  */10 public class App {11     static Logger logger = LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);12 13     public static void main(String[] args) {14         logger.trace("trace message");15         logger.debug("debug message");16         logger.info("info message");17         logger.warn("warn message");18         logger.error("error message");19         logger.fatal("fatal message");20         System.out.println("Hello World!");21     }22 }
View Code

在没有任何配置的情况下,log4j2会使用默认配置:

1 
2
3
4
5
6
7
8
9
10
11
12
13
View Code

该配置只有一个Appender:Console,目标是SYSTEM_OUT,即日志内容,都会打印在eclipse控制台上。Root Logger的级别是error,即:所有error及以上级别的日志才会记录。(注:日志级别顺序为 TRACE < DEBUG < INFO < WARN < ERROR < FATAL ),所以最终只有2日志会输出(error,fatal)

1 13:07:56.099 [main] ERROR  - error message2 13:07:56.100 [main] FATAL  - fatal message3 Hello World!

配置第1行中的status="WARN",可以去掉,它的含义为是否记录log4j2本身的event信息,默认是OFF,设置成“WARN”指:所有log4j2的event信息中,只有WARN及以上级别的信息才记录,大家可以把它改成TRACE试试(最低级别),看下输出内容有何变化。

另:配置文件通常命名为log4j2.xml,运行时只要在classpath下能找到即可。

1.3 文件方式记录日志

真正应用中,更多的是以纯文本文件的方式来记录系统的运行日志,来看一段稍微复杂点的配置

1 
2
3 4
5
logs/sample
6
mylog
7
8 9
10
11
12
13 14
16
18
19
20
21
22
23
24
25 26
27
29
30
31
32
33
34
35
View Code

 解释一下:

第1行中的 monitorInterval="1800" 指log4j2每隔1800秒(半小时),自动监控该配置文件是否有变化,如果变化,则自动根据文件内容重新配置(很不错的功能!)

4-7行定义了一些属性(可以根据需要自己随便添加),主要是为了后面引用起来方便

14行 RollingRandomAccessFile  即表示以文件方式记录,注意一下filePattern 的设置,它与20行的SizeBasedTriggeringPolicy (表示单个文件最大多少容量)结合在一起,非常有用,以这段配置为例,当单个文件达到10M后,会自动将以前的内容,先创建类似 2014-09(年-月)的目录,然后按 "xxx-年-月-日-序号"命名,打成压缩包(很体贴的设计,即省了空间,又不丢失以前的日志信息)

22行的DefaultRolloverStrategy max="20"表示压缩包,最多保留20个

27-30行,定义了一个新logger,它的级别是trace ,使用文件方式来记录日志,additivity="true" 这里注意一下,因为下面还有一个root logger,任何其它的logger最终都相当于继承自root logger,所以“com.cnblogs.yjmyzz.App2”这个logger中,如果记录了error及以上级别的日志,除了文件里会记录外,root logger也会生效,即:控制台也会输出一次。如果把additivity="true" 中的true,改成false,root logger就不会再起作用,即只会记录在文件里,控制台无输出。

另外关于logger的命名,很有讲究的,这里我们命名为com.cnblogs.yjmyzz.App2,如果正好有这样一个类:

1 package com.cnblogs.yjmyzz; 2  3 import org.apache.logging.log4j.LogManager; 4 import org.apache.logging.log4j.Logger; 5  6 public class App2 { 7  8     static Logger logger = LogManager.getLogger(); 9 10     public static void main(String[] args) {11         for (int i = 0; i < 10; i++) {12             logger.trace("trace message " + i);13             logger.debug("debug message " + i);14             logger.info("info message " + i);15             logger.warn("warn message " + i);16             logger.error("error message " + i);17             logger.fatal("fatal message " + i);18         }        19         System.out.println("Hello World! 2");20     }21 }
View Code

log4j2是根据名称来用哪个logger的,第8行没有传任何参数,默认这个logger的name就是当前类的全称,即 com.cnblogs.yjmyzz.App2,这样就跟配置对应上了,所以刚才配置中的 nam="com.cnblogs.yjmyzz.App2"的logger,相当于只对App2这一个类起作用。

更多关于logger name继承的规则,请参考

 

二、与Spring MVC 的整合

2.1 maven依赖项

1 
2
1.6
3
3.2.8.RELEASE
4
2.0.2
5
6
7
8
9
org.springframework
10
spring-core
11
${springframework.version}
12
13
14
org.springframework
15
spring-beans
16
${springframework.version}
17
18
19
org.springframework
20
spring-context
21
${springframework.version}
22
23
24
org.springframework
25
spring-web
26
${springframework.version}
27
28
29
org.springframework
30
spring-webmvc
31
${springframework.version}
32
33
34
org.springframework
35
spring-expression
36
${springframework.version}
37
38 39
40
41
org.apache.logging.log4j
42
log4j-api
43
${log4j2.version}
44
45
46
org.apache.logging.log4j
47
log4j-core
48
${log4j2.version}
49
50
51
org.apache.logging.log4j
52
log4j-web
53
2.0.2
54
55
View Code

2.2 web.xml配置

1 
2
5 6
7
contextConfigLocation
8
/WEB-INF/spring/root-context.xml
9
10
11
org.springframework.web.context.ContextLoaderListener
12
13 14
15
16
org.apache.logging.log4j.web.Log4jServletContextListener
17
18
19
log4jServletFilter
20
org.apache.logging.log4j.web.Log4jServletFilter
21
22
23
log4jServletFilter
24
/*
25
REQUEST
26
FORWARD
27
INCLUDE
28
ERROR
29
30
31 32
33
CharacterEncodingFilter
34
org.springframework.web.filter.CharacterEncodingFilter
35
36
encoding
37
utf-8
38
39
40
41
CharacterEncodingFilter
42
/*
43
44
45
appServlet
46
org.springframework.web.servlet.DispatcherServlet
47
48
contextConfigLocation
49
/WEB-INF/spring/appServlet/servlet-context.xml
50
51
1
52
53
54
appServlet
55
/
56
57
View Code

注:这是web app 2.5的整合方法,web app3.0不需要这么复杂的配置,3.0的整合请参考官方pdf文档

2.3 log4j2.xml

内容前面那段“复杂的”配置差不多,就不重复贴出来了

放置在resources目录即可,打包后,会自动复制到classpath下.

转载于:https://www.cnblogs.com/yjmyzz/p/3988114.html

你可能感兴趣的文章
第二个spring冲刺第3天
查看>>
AwSnap:让全版本(Windows、iOS、Android)Chrome浏览器崩溃的有趣漏洞
查看>>
线段树合并学习笔记
查看>>
AndroidAutoLayout
查看>>
样本不均衡下的分类损失函数
查看>>
node启动服务后,窗口不能关闭。pm2了解一下
查看>>
vsCode 改变主题
查看>>
【vijos】【树形dp】佳佳的魔法药水
查看>>
聚合新闻头条
查看>>
Ubuntu 关闭锁屏界面的 on-screen keyboard
查看>>
凸优化学习笔记
查看>>
使用ehcache-spring-annotations开启ehcache的注解功能
查看>>
Charles设置HTTPS抓包
查看>>
NGUI出现Shader wants normals, but the mesh UIAtlas doesn&#39;t have them
查看>>
Boost.Asio c++ 网络编程翻译(14)
查看>>
Codeforces Round #306 (Div. 2) D.E. 解题报告
查看>>
uva 1557 - Calendar Game(博弈)
查看>>
HDU1051 Wooden Sticks 【贪婪】
查看>>
十大经典数据挖掘算法
查看>>
Rhythmbox乱码的解决的方法
查看>>