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

一、基本使用

1.1 maven依赖项

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

1.2 Hello world演示样例

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

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

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

该配置仅仅有一个Appender:Console,目标是SYSTEM_OUT。即日志内容,都会打印在eclipse控制台上。

Root Logger的级别是error,即:全部error及以上级别的日志才会记录。(注:日志级别顺序为 TRACE < DEBUG < INFO < WARN < ERROR < FATAL ),所以终于仅仅有2日志会输出(error,fatal)

  1. 1 13:07:56.099 [main] ERROR - error message
  2. 2 13:07:56.100 [main] FATAL - fatal message
  3. 3 Hello World!

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

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

1.3 文件方式记录日志

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

  1. 1 <?xml version="1.0" encoding="UTF-8"?>
  2. 2 <Configuration status="off" monitorInterval="1800">
  3. 3
  4. 4 <properties>
  5. 5 <property name="LOG_HOME">logs/sample</property>
  6. 6 <property name="FILE_NAME">mylog</property>
  7. 7 </properties>
  8. 8
  9. 9 <Appenders>
  10. 10 <Console name="Console" target="SYSTEM_OUT">
  11. 11 <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
  12. 12 </Console>
  13. 13
  14. 14 <RollingRandomAccessFile name="running-log"
  15. 15 fileName="${LOG_HOME}/${FILE_NAME}.log" filePattern="${LOG_HOME}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}-%i.log.gz">
  16. 16 <PatternLayout
  17. 17 pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n" />
  18. 18 <Policies>
  19. 19 <TimeBasedTriggeringPolicy />
  20. 20 <SizeBasedTriggeringPolicy size="10 MB" />
  21. 21 </Policies>
  22. 22 <DefaultRolloverStrategy max="20" />
  23. 23 </RollingRandomAccessFile>
  24. 24 </Appenders>
  25. 25
  26. 26 <Loggers>
  27. 27 <Logger name="com.cnblogs.yjmyzz.App2" level="trace"
  28. 28 additivity="true">
  29. 29 <AppenderRef ref="running-log" />
  30. 30 </Logger>
  31. 31 <Root level="error">
  32. 32 <AppenderRef ref="Console" />
  33. 33 </Root>
  34. 34 </Loggers>
  35. 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. 1 <properties>
  2. 2 <java.version>1.6</java.version>
  3. 3 <springframework.version>3.2.8.RELEASE</springframework.version>
  4. 4 <log4j2.version>2.0.2</log4j2.version>
  5. 5 </properties>
  6. 6 <dependencies>
  7. 7 <!-- Spring -->
  8. 8 <dependency>
  9. 9 <groupId>org.springframework</groupId>
  10. 10 <artifactId>spring-core</artifactId>
  11. 11 <version>${springframework.version}</version>
  12. 12 </dependency>
  13. 13 <dependency>
  14. 14 <groupId>org.springframework</groupId>
  15. 15 <artifactId>spring-beans</artifactId>
  16. 16 <version>${springframework.version}</version>
  17. 17 </dependency>
  18. 18 <dependency>
  19. 19 <groupId>org.springframework</groupId>
  20. 20 <artifactId>spring-context</artifactId>
  21. 21 <version>${springframework.version}</version>
  22. 22 </dependency>
  23. 23 <dependency>
  24. 24 <groupId>org.springframework</groupId>
  25. 25 <artifactId>spring-web</artifactId>
  26. 26 <version>${springframework.version}</version>
  27. 27 </dependency>
  28. 28 <dependency>
  29. 29 <groupId>org.springframework</groupId>
  30. 30 <artifactId>spring-webmvc</artifactId>
  31. 31 <version>${springframework.version}</version>
  32. 32 </dependency>
  33. 33 <dependency>
  34. 34 <groupId>org.springframework</groupId>
  35. 35 <artifactId>spring-expression</artifactId>
  36. 36 <version>${springframework.version}</version>
  37. 37 </dependency>
  38. 38
  39. 39 <!-- log4j2 -->
  40. 40 <dependency>
  41. 41 <groupId>org.apache.logging.log4j</groupId>
  42. 42 <artifactId>log4j-api</artifactId>
  43. 43 <version>${log4j2.version}</version>
  44. 44 </dependency>
  45. 45 <dependency>
  46. 46 <groupId>org.apache.logging.log4j</groupId>
  47. 47 <artifactId>log4j-core</artifactId>
  48. 48 <version>${log4j2.version}</version>
  49. 49 </dependency>
  50. 50 <dependency>
  51. 51 <groupId>org.apache.logging.log4j</groupId>
  52. 52 <artifactId>log4j-web</artifactId>
  53. 53 <version>2.0.2</version>
  54. 54 </dependency>
  55. 55 </dependencies>

2.2 web.xml配置

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

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

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

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

Log4j2 与 SpringMVC 整合的更多相关文章

  1. (转)Dubbo与Zookeeper、SpringMVC整合和使用

    原文地址: https://my.oschina.net/zhengweishan/blog/693163 Dubbo与Zookeeper.SpringMVC整合和使用 osc码云托管地址:http: ...

  2. SSM整合(三):Spring4与Mybatis3与SpringMVC整合

    源码下载 SSMDemo 上一节整合了Mybatis3与Spring4,接下来整合SpringMVC! 说明:整合SpringMVC必须是在web项目中,所以前期,新建的就是web项目! 本节全部采用 ...

  3. Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)

    互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的.现在核心业务抽取出来,作为独立的服务,使 ...

  4. springmvc整合fastjson

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  5. 【转】Dubbo_与Zookeeper、SpringMVC整合和使用(负载均衡、容错)

    原文链接:http://blog.csdn.net/congcong68/article/details/41113239 互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服 ...

  6. 160906、Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)

    互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的.现在核心业务抽取出来,作为独立的服务,使 ...

  7. Springmvc整合tiles框架简单入门示例(maven)

    Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积 ...

  8. SpringMVC整合Tiles框架

    SpringMVC整合Tiles框架 Tiles组件 tiles-iconfig.xml Tiles是一个JSP布局框架. Tiles框架为创建Web页面提供了一种模板机制,它能将网页的布局和内容分离 ...

  9. Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)转

    互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的.现在核心业务抽取出来,作为独立的服务,使 ...

随机推荐

  1. nyoj--1233--差值(贪心模拟+大数)

    差值 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 输入一个整数数组,将它们连接起来排成一个数,找出能排出的所有数字中最大,最小的两个,输出两个数的差值.例如输入数组{ ...

  2. 从Git里拉取远程的所有分支

    从Git里拉取远程的所有分支 git branch -r | grep -v '\->' | while read remote; do git branch --track "${r ...

  3. 数位$dp$

    数位\(dp\)搞了一上午才搞懂.靠这种傻\(X\)的东西竟然花了我一上午的时间. 数位\(dp\) 概念 数位\(dp\)就是强制你分类一些数,例如给你一段区间,然后让你求出不包含\(2\)的数的个 ...

  4. AngularJS 导航栏动态添加.active

    在传统jQuery中,实现导航栏动态添加.active类的思路比较简单,就是当点击的时候,清除其他.active,然后给当前类加上.active. 但是在AngularJS中,就不能再采用这种jQue ...

  5. ora_tool

    #!/bin/ksh # # Copyright (c) 1998, 2002, Oracle Corporation.  All rights reserved. #   version() {   ...

  6. man帮助

    man命令是Linux下的帮助指令,通过man指令可以查看Linux中的指令帮助.配置文件帮助和编程帮助等信息.

  7. 洛谷 P3199 [HNOI2009]最小圈

    P3199 [HNOI2009]最小圈 题目背景 如果你能提供题面或者题意简述,请直接在讨论区发帖,感谢你的贡献. 题目描述 对于一张有向图,要你求图中最小圈的平均值最小是多少,即若一个圈经过k个节点 ...

  8. ArcGIS api for javascript——地图配置-滑动器的刻度线、方向、大小的改变

    描述 本例展示了如果删除缩放等级滑动器的刻度线.通过设置esriConfig里的sliderLabel为null来实现: esriConfig.defaults.map.sliderLabel = n ...

  9. poj 2533 Longest Ordered Subsequence 最长递增子序列(LIS)

    两种算法 1.  O(n^2) #include<iostream> #include<cstdio> #include<cstring> using namesp ...

  10. 基于ArcGIS Flex API实现动态标绘(1.2)

    动态标绘API 1.2,相较前一版本号(点击进入),该版本号新增对基本标绘符号的支持,包含: 单点.多点.折线.手绘线.多边形.手绘多边形.矩形,并提供对应的编辑功能. 例如以下图所看到的,对多点的编 ...