log4j.xml配置实例

1.log4j简单介绍

log4j的三大组件:loggers、appenders、layout

  • loggers为日志记录器,负责处理日志记录的大部分操作。
  • appenders 为日志信息的输出目的地,log4j中所有继承自Appender接口的类。他们一起定义了log4j需要把日志写到哪些地方,比如数据库或者是文件。
  • layout为日志信息的输出格式。

log4j输出信息的类别level为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL等。常用优先级为:ERROR>WARN>INFO>DEBUG。

举个例子:如果配置的level级别为WARN,那么意味着只有WARN、ERROR、FATAL被输出。DEBUG、INFO将被屏蔽掉。

log4j支持两种配置文件格式,一种是XML格式的文件,一种时properties格式的文件。

2.言归正传,log4j.xml如何配置?

  1. 引入log4j的依赖
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.7.12</version> 
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </dependency>

     2.log.xml的配置

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">

<log4j:configuration debug="true">

    <!--输出到控制台-->
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
		<layout class="com.sf.sgs.sflog.log4j.layout.SfPatternLayout"/>
	</appender>


    <!--输出到文件(info)-->
    <!--将生成“info.log.2014-06-11”这样的日志文件-->
    <appender name="SYSTEM" class="com.sf.sgs.sflog.log4j.appender.SFDailyRollingFileAppender">
        <!-- 设置日志信息输出文件路径 -->
        <param name="File" value="./log4j/logs/system.log" />
        <!-- 设置日志每天回滚一次,即产生一个新的日志文件 -->
        <param name="datePattern" value="'.'yyyy-MM-dd'.log'"  />
        <!-- 设置日志输出的样式 -->
        <layout class="com.sf.sgs.sflog.log4j.layout.SfPatternLayout">
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="levelMin" value="INFO" />
            <param name="levelMax" value="INFO" />
            <param name="acceptOnMatch" value="true" />
        </filter>
    </appender>

    <!--输出到文件(error)-->
    <appender name="ERROR" class="com.sf.sgs.sflog.log4j.appender.SFDailyRollingFileAppender">
        <!-- 设置日志每天回滚一次,即产生一个新的日志文件 -->
        <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
        <param name="File" value="./log4j/logs/error.log" />
        <param name="maxBackupIndex" value="3" />
        <layout class="com.sf.sgs.sflog.log4j.layout.SfPatternLayout">
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="levelMin" value="ERROR" />
            <param name="levelMax" value="ERROR" />
            <param name="acceptOnMatch" value="true" />
        </filter>
    </appender>


	<logger name="org.apache" additivity="false">
		<level value="ERROR" />
		<appender-ref ref="console" />
	</logger>

  
    <root>
        <level value="INFO" />
        <appender-ref ref="SYSTEM"/>
        <appender-ref ref="ERROR"/>
    </root>

</log4j:configuration>

    3. 测试类,程序中使用

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

/**
 * log4j测试
 */
@Service
public class Log4jTest {
    private Logger logger = LoggerFactory.getLogger(Log4jTest.class);

    protected void TestLog() {
        logger.trace("trace级别的日志输出");
        logger.debug("debug级别的日志输出");
        logger.info("info级别的日志输出");
        logger.warn("warn级别的日志输出");
        logger.error("error级别的日志输出");
    }
}

注意:

1:当additivity="false"时,root中的配置就失灵了,不遵循缺省的继承机制

2:logger中的name非常重要,它代表记录器的包的形式,有一定的包含关系,试验表明

   2-1:当定义的logger的name同名时,只有最后的那一个才能正确的打印日志

   2-2:当对应的logger含有包含关系时,比如:name=com.test.log4j和 name=com.test.log4j.test11,则2-1的情况是一样的

   2-3:logger的name表示所有的包含在此名的所有记录器都遵循同样的配置,name的值中的包含关系是指记录器的名称!

3:logger中定义的level和appender中的filter定义的level的区间取交集

4:如果appender中的filter定义的 levelMin > levelMax ,则打印不出日志信息

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章