zoukankan      html  css  js  c++  java
  • 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下.

  • 相关阅读:
    oracle 10g 免安装客户端在windows下配置
    sql2005 sa密码
    使用windows live writer 有感
    windows xp SNMP安装包提取
    汉化groove2007
    迁移SQL server 2005 Reporting Services到SQL server 2008 Reporting Services全程截图操作指南
    foxmail 6在使用中的问题
    AGPM客户端连接不上服务器解决一例
    SpringSource Tool Suite add CloudFoundry service
    Java 之 SWing
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7008563.html
Copyright © 2011-2022 走看看