如何通过配置log4j.xml来打印指定类或指定级别的日志信息

把指定类的日志信息输出到指定appender里:
============================================================
<!--appender中,Theshold和Filter都是可选。不过,建议这种目的下最好不要写,这样,什么信息会输出到该appender中,就只由指定logger的appender-ref的值来决定。否则会受到Theshold和Filter值的影响)。-->
<appender name="appender-3" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="file" value="${loggingRoot}/file.log"/>
    <param name="append" value="true"/>
    <param name="encoding" value="GBK"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%p [%d{HH:mm:ss}] %c{1}.%M(%L) - %m%n"/>
    </layout>
    </appender>
<logger name="com.a.b.c.d.e" additivity="false">
    <!--指定类的日志级别,会影响指定类日志发出信息的成功与否-->
    <level value = "debug" />
    <appender-ref ref="appender-3" />
</logger>
同样,在root元素里不要指定该appender,如下:
<root>
    <level value="warn"/>
    <appender-ref ref="appender-1"/>
    <appender-ref ref="appender-2"/>
</root>
这样的话,就杜绝了被其他logger继承的可能性。
此例中,如果在root里指定了该appender,则级别不低于warn的日志信息都会输出到appender-3中。



把各个级别的日志信息输出到各个的appender里,可使用过滤器,下面以info级别为例:
============================================================
<appender name="appender-info" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="file" value="${loggingRoot}/info.log"/>
    <param name="append" value="true"/>
    <param name="encoding" value="GBK"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%p [%d{HH:mm:ss}] %c{1}.%M(%L) - %m%n"/>
    </layout>
    <filter class="org.apache.log4j.varia.LevelRangeFilter">
           <param name="LevelMin" value="INFO" />
           <param name="LevelMax" value="INFO" />
      </filter>
</appender>
appender-info只接受信息级别为info的日志信息。



再说说关于root的一些情况:
============================================================
root元素定义的一些信息只供作默认情况和继承用。
只要后面的logger或appender,稍作显式声明,这些信息都会被覆盖。
以下面为例:
<root>
    <level value="warn"/>
    <appender-ref ref="appender-1"/>
    <appender-ref ref="appender-2"/>
</root>
默认情况是:
1. 输出器appender-1和appender-2只接受不低于warn级别的日志信息,不过一旦指定了Theshold或Filter,就以指定的为准。
2. 日志记录器logger的输出器appender,默认会输出到appender-1和appender-2中,若指定了<appender-ref value="appender-3" />,则日志信息会输出到这三个,要停止这种继承关系,可添加additivity=false。


log4j简明手册中的要点。
 
.1 Named Hierarchy
如果一个logger 的名字后面跟着一个点号(dot),它就是点号(dot)后面的那个logger的前辈( ancestor),是这个晚辈(descendant) 的前缀。如果在它自己和这个晚辈之间没有其它的前辈,它和这个晚辈之间就是父子关系。

.2 Level Inheritance
对于一个给定的logger C,它继承的级别等于logger阶层里,从C开始往root logger上去的第一个non-null级别。

.3 Basic Selection Rule
在一个级别为q(被指定的或继承的)的logger里,一个级别为p的日志请求,只有在p >= q 时才能够被执行。

.4 Appender Additivity
Logger C的log输出信息将被输出到C的所有appenders和它的前辈的 appenders。这就是"appender additivity"的意思。
但是,如果logger C的前辈,比如说P,P的additivity flag被设置为 false,那么,C的输出信息将被输出到C的所有appenders中去,以及它的前辈的——截 止在P那里,包括P在内的,appenders中去,但是不会输出到P的前辈的 appenders中去。

默认情况下,Loggers的additivity flag设置为true。

log4j简明手册:http://log4j.jaxmao.org/log4j/docs/manual.html

初次实施log4j,做了些小总结,期待交流哈。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用以下配置输出 log.debug 级别日志信息: ```xml <?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n" /> </Console> </Appenders> <Loggers> <Root level="debug"> <AppenderRef ref="Console" /> </Root> </Loggers> </Configuration> ``` 在上述配置中,我们使用了 `Root` 元素指定了默认的日志级别为 `debug`,因此所有 `debug` 级别日志都会被输出到控制台。同时,我们使用了 `PatternLayout` 来定义日志信息输出格式,其中 `%d` 表示日期时间,`%t` 表示线程名,`%-5level` 表示日志级别,`%logger{36}` 表示日志记录器名,`%msg%n` 表示日志消息和换行符。 你可以将上述配置保存为 `log4j2.xml` 文件并放置到 classpath 下的任何一个目录中,然后在代码中通过 `LogManager` 获取日志记录器并输出日志信息: ```java import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class Example { private static final Logger logger = LogManager.getLogger(Example.class); public static void main(String[] args) { logger.debug("This message will be logged as debug."); logger.info("This message will be logged as info."); logger.warn("This message will be logged as warn."); logger.error("This message will be logged as error."); logger.fatal("This message will be logged as fatal."); } } ``` 上述代码中,我们使用 `LogManager` 获取了日志记录器 `logger`,并通过 `logger.debug` 输出了一条 `debug` 级别日志信息。你可以根据需要调整日志级别日志输出格式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值