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下.
Log4j2 与 SpringMVC 整合的更多相关文章
- (转)Dubbo与Zookeeper、SpringMVC整合和使用
原文地址: https://my.oschina.net/zhengweishan/blog/693163 Dubbo与Zookeeper.SpringMVC整合和使用 osc码云托管地址:http: ...
- SSM整合(三):Spring4与Mybatis3与SpringMVC整合
源码下载 SSMDemo 上一节整合了Mybatis3与Spring4,接下来整合SpringMVC! 说明:整合SpringMVC必须是在web项目中,所以前期,新建的就是web项目! 本节全部采用 ...
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的.现在核心业务抽取出来,作为独立的服务,使 ...
- springmvc整合fastjson
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- 【转】Dubbo_与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
原文链接:http://blog.csdn.net/congcong68/article/details/41113239 互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服 ...
- 160906、Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的.现在核心业务抽取出来,作为独立的服务,使 ...
- Springmvc整合tiles框架简单入门示例(maven)
Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积 ...
- SpringMVC整合Tiles框架
SpringMVC整合Tiles框架 Tiles组件 tiles-iconfig.xml Tiles是一个JSP布局框架. Tiles框架为创建Web页面提供了一种模板机制,它能将网页的布局和内容分离 ...
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)转
互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的.现在核心业务抽取出来,作为独立的服务,使 ...
随机推荐
- nyoj--1233--差值(贪心模拟+大数)
差值 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 输入一个整数数组,将它们连接起来排成一个数,找出能排出的所有数字中最大,最小的两个,输出两个数的差值.例如输入数组{ ...
- 从Git里拉取远程的所有分支
从Git里拉取远程的所有分支 git branch -r | grep -v '\->' | while read remote; do git branch --track "${r ...
- 数位$dp$
数位\(dp\)搞了一上午才搞懂.靠这种傻\(X\)的东西竟然花了我一上午的时间. 数位\(dp\) 概念 数位\(dp\)就是强制你分类一些数,例如给你一段区间,然后让你求出不包含\(2\)的数的个 ...
- AngularJS 导航栏动态添加.active
在传统jQuery中,实现导航栏动态添加.active类的思路比较简单,就是当点击的时候,清除其他.active,然后给当前类加上.active. 但是在AngularJS中,就不能再采用这种jQue ...
- ora_tool
#!/bin/ksh # # Copyright (c) 1998, 2002, Oracle Corporation. All rights reserved. # version() { ...
- man帮助
man命令是Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助.配置文件帮助和编程帮助等信息.
- 洛谷 P3199 [HNOI2009]最小圈
P3199 [HNOI2009]最小圈 题目背景 如果你能提供题面或者题意简述,请直接在讨论区发帖,感谢你的贡献. 题目描述 对于一张有向图,要你求图中最小圈的平均值最小是多少,即若一个圈经过k个节点 ...
- ArcGIS api for javascript——地图配置-滑动器的刻度线、方向、大小的改变
描述 本例展示了如果删除缩放等级滑动器的刻度线.通过设置esriConfig里的sliderLabel为null来实现: esriConfig.defaults.map.sliderLabel = n ...
- poj 2533 Longest Ordered Subsequence 最长递增子序列(LIS)
两种算法 1. O(n^2) #include<iostream> #include<cstdio> #include<cstring> using namesp ...
- 基于ArcGIS Flex API实现动态标绘(1.2)
动态标绘API 1.2,相较前一版本号(点击进入),该版本号新增对基本标绘符号的支持,包含: 单点.多点.折线.手绘线.多边形.手绘多边形.矩形,并提供对应的编辑功能. 例如以下图所看到的,对多点的编 ...