【Spring】在springmvc中使用log4j日志功能

来源:互联网 发布:surge for mac 教程 编辑:程序博客网 时间:2024/06/01 07:57

  • step 1maven的依赖配置
  • step 2log4jxml配置文件
  • step 3webxml配置
  • step 4在程序中获取logger对象写日志

step 1、maven的依赖配置

<!-- Logging -->    <dependency>      <groupId>org.slf4j</groupId>      <artifactId>slf4j-api</artifactId>      <version>1.6.6</version>    </dependency>    <dependency>      <groupId>org.slf4j</groupId>      <artifactId>jcl-over-slf4j</artifactId>      <version>1.6.6</version>      <scope>runtime</scope>    </dependency>    <dependency>      <groupId>org.slf4j</groupId>      <artifactId>slf4j-log4j12</artifactId>      <version>1.6.6</version>      <scope>runtime</scope>    </dependency>

step 2、log4j.xml配置文件

主要是appender和logger、root的配置;
appender提供给logger、root调用,appender提供的信息包括输出的类型(控制台、文件等)、输出的格式、输出的级别等等;一般会设置一个console的输出,和几个info、dubug、error等的file类型的appender;
子logger会继承root,即继承appender的引用,但是输出level不会有影响,但是当additivity属性设置为false的时候就不会继承;
logger里面level的设置,指的是最低的级别。log4j的级别对应为:
ALL

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd"><log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">    <!--输出到控制台的appender-->    <appender name="console" class="org.apache.log4j.ConsoleAppender"><!--appender的名字,供logger或者root调用 -->        <param name="encoding" value="utf-8"/><!--编码 -->        <param name="target" value="System.out"/><!--输出到控制台 -->        <layout class="org.apache.log4j.PatternLayout"><!-- layout表示输出方式,可以多种,class值区分,PatternLayout表示自定义格式-->            <param name="ConversionPattern" value="%d{ISO8601} 耗时:%r [日志来自:%-40.40c{3} 日志类型: %-5p 日志内容:%m]%n"/><!--输出格式 -->        </layout>    </appender>    <!--输出到文件的appender,公共的,按日期生成新文件-->    <appender name="DEFAULT-APPENDER" class="org.apache.log4j.DailyRollingFileAppender">        <param name="File" value="/Users/apple/logs/conmmon-default.log"/>        <param name="Append" value="true"/><!--是否项目重启 继续保存之前日志 -->        <param name="threshold" value="all"/><!--纪录所有类型日志, -->        <param name="DatePattern" value="'.'yyyy-MM-dd'.log'"/>        <param name="encoding" value="utf-8"/><!--编码 -->        <layout class="org.apache.log4j.PatternLayout"><!-- layout表示输出方式,可以多种,class值区分,PatternLayout表示自定义格式-->            <param name="ConversionPattern" value="%d{ISO8601} 耗时:%r [日志来自:%-40.40c{3} 日志类型: %-5p 日志内容:%m]%n"/><!--输出格式 -->        </layout>    </appender>    <!--输出到文件的appender, info日志-->    <appender name="INFO-APPENDER" class="org.apache.log4j.DailyRollingFileAppender">        <param name="File" value="/Users/apple/logs/conmmon-info.log"/>        <param name="Append" value="true"/><!--是否项目重启 继续保存之前日志 -->        <param name="DatePattern" value="'.'yyyy-MM-dd'.log'"/>        <param name="encoding" value="utf-8"/><!--编码 -->        <layout class="org.apache.log4j.PatternLayout"><!-- layout表示输出方式,可以多种,class值区分,PatternLayout表示自定义格式-->            <param name="ConversionPattern" value="%d{ISO8601} 耗时:%r [日志来自:%-40.40c{3} 日志类型: %-5p 日志内容:%m]%n"/><!--输出格式 -->        </layout>        <!--只记录info信息,就做如下设置-->        <filter class="org.apache.log4j.varia.LevelRangeFilter">            <param name="LevelMax" value="info"/>            <param name="LevelMin" value="info"/>        </filter>    </appender>    <!--输出到文件的appender,error日志-->    <appender name="ERROR-APPENDER" class="org.apache.log4j.DailyRollingFileAppender">        <param name="File" value="/Users/apple/logs/conmmon-error.log"/>        <param name="Append" value="true"/><!--是否项目重启 继续保存之前日志 -->        <param name="DatePattern" value="'.'yyyy-MM-dd'.log'"/>        <param name="encoding" value="utf-8"/><!--编码 -->        <layout class="org.apache.log4j.PatternLayout"><!-- layout表示输出方式,可以多种,class值区分,PatternLayout表示自定义格式-->            <param name="ConversionPattern" value="%d{ISO8601} 耗时:%r [日志来自:%-40.40c{3} 日志类型: %-5p 日志内容:%m]%n"/><!--输出格式 -->        </layout>        <!--只记录error信息,就做如下设置-->        <filter class="org.apache.log4j.varia.LevelRangeFilter">            <param name="LevelMax" value="error"/>            <param name="LevelMin" value="error"/>        </filter>    </appender>    <!--输出到文件的appender,warn日志-->    <appender name="WARN-APPENDER" class="org.apache.log4j.DailyRollingFileAppender">        <param name="File" value="/Users/apple/logs/conmmon-warn.log"/>        <param name="Append" value="true"/><!--是否项目重启 继续保存之前日志 -->        <param name="DatePattern" value="'.'yyyy-MM-dd'.log'"/>        <param name="encoding" value="utf-8"/><!--编码 -->        <layout class="org.apache.log4j.PatternLayout"><!-- layout表示输出方式,可以多种,class值区分,PatternLayout表示自定义格式-->            <param name="ConversionPattern" value="%d{ISO8601} 耗时:%r [日志来自:%-40.40c{3} 日志类型: %-5p 日志内容:%m]%n"/><!--输出格式 -->        </layout>        <!--只记录warn信息,就做如下设置-->        <filter class="org.apache.log4j.varia.LevelRangeFilter">            <param name="LevelMax" value="warn"/>            <param name="LevelMin" value="warn"/>        </filter>    </appender>    <!--info log-->    <logger name="whu.lmars.indoorparking" additivity="false"><!--为false的时候 限制了叠加性  即此时子logger不会继承root的appender -->        <level value="info"/><!-- ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF -->        <appender-ref ref="INFO-APPENDER"/>        <appender-ref ref="ERROR-APPENDER"/>        <appender-ref ref="WARN-APPENDER"/>        <appender-ref ref="console"/>    </logger>    <root>        <!--<level value="ALL"/>--><!--默认是debug -->        <appender-ref ref="DEFAULT-APPENDER"/>    </root></log4j:configuration>

step 3、web.xml配置

<!--关于log4j的相关配置-->  <context-param>    <param-name>log4jConfigLocation</param-name>    <param-value>classpath:log4j.xml</param-value>  </context-param>  <!--加载log4j配置文件-->  <listener>    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>  </listener>

step 4、在程序中获取logger对象,写日志

 static Logger logger = LoggerFactory.getLogger(UpdateScoreThread.class);    /**     * UpdateScoreThread.class传入的实际上是完整的包名加类名,即whu.lmars.indoorparking.thread.UpdateScoreThread,那么如果存在     * whu.lmars.indoorparking 或者whu.lmars.indoorparking.thread的logger,那么此log就继承他,否则的话就继承rootLogger     */
0 0