项目日志输入出不同的文件,按级别输出

一,需要用到的jar,添加maven依赖

    

        <!-- log -->
        <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>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

1,log4j.properties 记录的信息没有log4j.xml 全,故只记录log4j.xml 的用法,先看看配置文件,

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">

    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="target" value="System.out"/>
        <param name="encoding" value="UTF8"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
        </layout>
    </appender>
    <appender name="controller" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="encoding" value="UTF8"/>
        <param name="File" value="${catalina.base}/logs/cms/controller/controller.log"/>
        <param name="Append" value="true"/>
        <param name="DatePattern" value="'.'yyyy-MM-dd"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <!-- 设置日志输出的最小级别 -->
            <param name="levelMin" value="WARN" />
            <!-- 设置日志输出的最大级别 -->
            <param name="levelMax" value="ERROR" />
            <!-- 设置日志输出的xxx,默认是false -->
            <param name="AcceptOnMatch" value="true" />
        </filter>
</appender> <!-- 注意: 1:当additivity="false"时,root中的配置就失灵了,不遵循缺省的继承机制 2:logger中的name非常重要,它代表记录器的包的形式,有一定的包含关系,试验表明 2-1:当定义的logger的name同名时,只有最后的那一个才能正确的打印日志 2-2:当对应的logger含有包含关系时,比如:name=test.log4j.test8 和 name=test.log4j.test8.UseLog4j, 则父级目录按照子级目录设置的级别输出 2-3:logger的name表示所有的包含在此名的所有记录器都遵循同样的配置,name的值中的包含关系是指记录器的名称哟!注意啦! 3:logger中定义的level和appender中的filter定义的level的区间取交集 4:如果appender中的filter定义的 levelMin > levelMax ,则打印不出日志信息 --> <!-- 指定logger的设置,additivity指示是否遵循缺省的继承机制--> <logger name="test.log4j.test8.UseLog4j" additivity="false"> <level value ="WARN"/> <appender-ref ref="DailyRollingFileAppender"/> </logger> <root> <level value="ALL"></level> <!-- 限定记录等级 --> <appender-ref ref="console"/> </root></log4j:configuration>



在appender节点下设置路径,${ catalina}指向tomcat安装目录,catalina.base或者catalina.home都是指向bin,logs的父目录,有一点区别,idea指定tomcat路径之后,实际产生的日志文件放在了系统盘用户目录下的idea运行目录



父子日志打印问题

下面定义了四个 logger,他们的父子关系从小到大为: 
  com.lwc.qg.test.logbackDemo → com.lwc.qg.tes → com.lwc.qg → root
 
<!-- 根 logger -->
  <root level="info">
       <appender-ref ref="STDOUT"/>
  </root>
<!--
     普通的 logger
     name:类名或包名,标志该 logger 与哪个包或哪个类绑定
     level:该 logger 的日志级别
     additivity:是否将日志信息传递给上一级 true:传递,false:不传递
 -->
<logger name="com.lwc.qg.test.logbackDemo" level="debug" additivity="true">
      <appender-ref ref="STDOUT"/>
</logger>
<logger name="com.lwc.qg.test" level="info" additivity="true">
       <appender-ref ref="STDOUT"/>
</logger>
<logger name="com.lwc.qg" level="info" additivity="true">
       <appender-ref ref="STDOUT"/>
</logger>



从该种级别来看,如果此时在最低层的 logger 输出日志信息,以该配置作为基础,它将会向父级的所有 logger 依次传递,所以按理来说一个打印信息将会打印四次
  从控制台上看,的确每条日志信息都被打印出了四次,但是细心从配置文件上来看,root 的日志级别配置的为 info,但是却输出 debug 级别的日志信息,所以从测试结果可以看出,向上传递的日志信息的日志级别将由最底层的子元素决定(最初传递信息的 logger),因为子元素设置的日志级别为 debug,所以也输出了 debug 级别的信息。
因此,从理论上来说,如果子元素日志级别设置高一点,那么也将会只输出高级别的日志信息。实际上也是如此,如果我们把 com.lwc.qg.test.logbackDemo对应的 logger 日志级别设为 warn,那么将只会输出 warn及其以上的信息


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值