Log4j2 与 SpringMVC 整合

log4j2不仅仅是log4j的简单升级,而是整个项目的重构。官网地址:http://logging.apache.org/log4j/2.x/,大家能够从官网的介绍看出它相比log4j第1代的种种长处。

一、基本使用

1.1 maven依赖项

复制代码
 1         <dependency>
 2             <groupId>org.apache.logging.log4j</groupId>
 3             <artifactId>log4j-api</artifactId>
 4             <version>2.0.2</version>
 5         </dependency>
 6         <dependency>
 7             <groupId>org.apache.logging.log4j</groupId>
 8             <artifactId>log4j-core</artifactId>
 9             <version>2.0.2</version>
10         </dependency>
复制代码

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 }
复制代码

在没有不论什么配置的情况下,log4j2会使用默认配置:

复制代码
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <Configuration status="WARN">
 3     <Appenders>
 4         <Console name="Console" target="SYSTEM_OUT">
 5             <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
 6         </Console>
 7     </Appenders>
 8     <Loggers>
 9         <Root level="error">
10             <AppenderRef ref="Console" />
11         </Root>
12     </Loggers>
13 </Configuration>
复制代码

该配置仅仅有一个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 message
2 13:07:56.100 [main] FATAL  - fatal message
3 Hello World!

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

另:配置文件通常命名为log4j2.xml,执行时仅仅要在classpath下能找到就可以。

1.3 文件方式记录日志

真正应用中,很多其它的是以纯文本文件的方式来记录系统的执行日志。来看一段略微复杂点的配置

复制代码
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <Configuration status="off" monitorInterval="1800">
 3 
 4     <properties>
 5         <property name="LOG_HOME">logs/sample</property>
 6         <property name="FILE_NAME">mylog</property>
 7     </properties>
 8 
 9     <Appenders>
10         <Console name="Console" target="SYSTEM_OUT">
11             <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
12         </Console>
13 
14         <RollingRandomAccessFile name="running-log"
15             fileName="${LOG_HOME}/${FILE_NAME}.log" filePattern="${LOG_HOME}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}-%i.log.gz">
16             <PatternLayout
17                 pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n" />
18             <Policies>
19                 <TimeBasedTriggeringPolicy />
20                 <SizeBasedTriggeringPolicy size="10 MB" />
21             </Policies>
22             <DefaultRolloverStrategy max="20" />
23         </RollingRandomAccessFile>
24     </Appenders>
25     
26     <Loggers>
27         <Logger name="com.cnblogs.yjmyzz.App2" level="trace"
28             additivity="true">
29             <AppenderRef ref="running-log" />
30         </Logger>
31         <Root level="error">
32             <AppenderRef ref="Console" />
33         </Root>
34     </Loggers>
35 </Configuration>
复制代码

 解释一下:

第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。假设正好有这样一个类:

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

很多其它关于logger name继承的规则,请參考log4j2的官方pdf文档

 

二、与Spring MVC 的整合

2.1 maven依赖项

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

2.2 web.xml配置

复制代码
 1 <?

xml version="1.0" encoding="UTF-8" ?

>

2 < web-app version ="2.5" xmlns ="http://java.sun.com/xml/ns/javaee" 3 xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation ="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" > 5 6 < context-param > 7 < param-name >contextConfigLocation </ param-name > 8 < param-value >/WEB-INF/spring/root-context.xml </ param-value > 9 </ context-param > 10 < listener > 11 < listener-class >org.springframework.web.context.ContextLoaderListener </ listener-class > 12 </ listener > 13 14 <!-- log4j2-begin --> 15 < listener > 16 < listener-class >org.apache.logging.log4j.web.Log4jServletContextListener </ listener-class > 17 </ listener > 18 < filter > 19 < filter-name >log4jServletFilter </ filter-name > 20 < filter-class >org.apache.logging.log4j.web.Log4jServletFilter </ filter-class > 21 </ filter > 22 < filter-mapping > 23 < filter-name >log4jServletFilter </ filter-name > 24 < url-pattern >/* </ url-pattern > 25 < dispatcher >REQUEST </ dispatcher > 26 < dispatcher >FORWARD </ dispatcher > 27 < dispatcher >INCLUDE </ dispatcher > 28 < dispatcher >ERROR </ dispatcher > 29 </ filter-mapping > 30 <!-- log4j2-end --> 31 32 < filter > 33 < filter-name >CharacterEncodingFilter </ filter-name > 34 < filter-class >org.springframework.web.filter.CharacterEncodingFilter </ filter-class > 35 < init-param > 36 < param-name >encoding </ param-name > 37 < param-value >utf-8 </ param-value > 38 </ init-param > 39 </ filter > 40 < filter-mapping > 41 < filter-name >CharacterEncodingFilter </ filter-name > 42 < url-pattern >/* </ url-pattern > 43 </ filter-mapping > 44 < servlet > 45 < servlet-name >appServlet </ servlet-name > 46 < servlet-class >org.springframework.web.servlet.DispatcherServlet </ servlet-class > 47 < init-param > 48 < param-name >contextConfigLocation </ param-name > 49 < param-value >/WEB-INF/spring/appServlet/servlet-context.xml </ param-value > 50 </ init-param > 51 < load-on-startup >1 </ load-on-startup > 52 </ servlet > 53 < servlet-mapping > 54 < servlet-name >appServlet </ servlet-name > 55 < url-pattern >/ </ url-pattern > 56 </ servlet-mapping > 57 </ web-app >
复制代码

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

内容前面那段“复杂的”配置差点儿相同,就不反复贴出来了

放置在resources文件夹就可以,打包后,会自己主动拷贝到classpath下.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值