log4j详解 将指定日志输出到不同的文件中

来源:互联网 发布:北大软件工程硕士年薪 编辑:程序博客网 时间:2024/05/16 12:22

0.概述

本文主要介绍以下内容(所用版本log4j 1.x):
0、Hello World 示例
配合着动手学习,效率会高很多,这先来个最简单的示例,好有个感性的认识先。
1、项目中所用日志介绍
在我使用log4j的项目中,需要将debug、info、warn、error日志分别输出到指定文件,且给用户看的info日志只含info级别的日志,这里贴出log4j配置文件及测试程序,列示测试结果。
2、log4j理论介绍
这部分介绍log4j的类层次结构、log4j的配置等信息
3、如何自定义日志等级级并将自定义日志输出到指定文件中
实际使用中可能需要将用户登录、邮件发送等特定的日志输出到指定的文件中,这里举例说明。
4、log4j其他功能简介
log4j功能强大,这里就它有但尚未使用到的功能做一个介绍,好心里有个概念。

1、log4j的Hello World示例

0、到Apache下载jar包 [点我] ,这里的版本是log4j 1.2.17。
1、建java项目,并将导入下面两个jar包
2、编写代码
import org.apache.log4j.Logger;<span style="font-family: Arial, Helvetica, sans-serif;">public class HelloWorld {</span><span style="white-space:pre"></span>private static Logger logger = Logger.getLogger(HelloWorld.class.getName());         public static void main(String[] args) {     <span style="white-space:pre"></span>logger.trace("trace ...");<span style="white-space:pre"></span>    logger.debug("Debug ...");<span style="white-space:pre"></span>    logger.info("Info ...");<span style="white-space:pre"></span>    logger.warn("Warn ...");<span style="white-space:pre"></span>    logger.error("Error ...");  <span style="white-space:pre"></span>    logger.fatal("Fatal ...");     }  }

3、新建文件夹config用于存放配置文件,写配置文件log4j.xml。

有以下两点建议新建config文件夹存放配置文件:

a、一般项目中用到的配置文件比较多,有专门的文件夹存放会比较方便。

b、项目打成jar包时,一般不会把配置文件也打进jar包。

配置文件log4j内容如下:

<?xml version="1.0" encoding="UTF-8"?>  <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">  <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' >          <appender name="myConsole" class="org.apache.log4j.ConsoleAppender">          <layout class="org.apache.log4j.PatternLayout">              <param name="ConversionPattern"                    value="[%d{yyyy-MM-dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\} - %m%n" />          </layout>      </appender>     <root>          <priority value ="error"/>          <appender-ref ref="myConsole"/>      </root>    </log4j:configuration> 
这时若报log4j.dtd的错误,则需要将log4j.dtd文件拷贝到xml配置文件目录中,log4j.dtd文件在log4j的jar包的org\apache\log4j\xml文件夹可以找到。

运行程序输出为:

[2014-09-27 18:16:28,215 ERROR] [main] test.HelloWorld - Error ...[2014-09-27 18:16:28,215 FATAL] [main] test.HelloWorld - Fatal ...

1、使用项目中所用到的log4j配置文件说明

写本文时项目对log4j写日志的要求是:
a、提供用户及开发人员看的两大类日志。
b、提供给用户看的日志只有info级别的信息并输出到指定文件中
c、提供给开发人员用的有debug、warn、error,三个级别的日志分别输出到指定文件中。

1.1 先看配置文件

log4j.properties配置文件,配置简单,但不支持复杂过滤器filter,log4j.xml虽然配置文件看似复杂,但支持复杂过滤器和Log4j的新特性。推荐使用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/' >           <appender name="myConsole" class="org.apache.log4j.ConsoleAppender">          <layout class="org.apache.log4j.PatternLayout">              <param name="ConversionPattern"                    value="[%d{yyyy-MM-dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\} - %m%n" />          </layout>      </appender>     <span style="white-space:pre"></span><appender name="user" class="org.apache.log4j.DailyRollingFileAppender"><span style="white-space:pre"></span><param name="File" value="files/logs/result.log" />  <span style="white-space:pre"></span><param name="Append" value="true"/><span style="white-space:pre"></span><layout class="org.apache.log4j.PatternLayout">  <span style="white-space:pre"></span>  <span style="white-space:pre"></span><param name="ConversionPattern" value="%d{yyy-MM-dd HH:mm:ss} [%-5p] %c {%F:%L} - %m%n" />  <span style="white-space:pre"></span></layout><span style="white-space:pre"></span><filter class="com.test.test.UserLogFilter">     <span style="white-space:pre"></span> <span style="white-space:pre"></span><param name="LevelMin" value="20060" />     <span style="white-space:pre"></span>  <span style="white-space:pre"></span><param name="LevelMax" value="20060" /> <span style="white-space:pre"></span>  <span style="white-space:pre"></span><param name="acceptOnMatch" value="true" />     <span style="white-space:pre"></span></filter>  <span style="white-space:pre"></span></appender>         <appender name="info" class="org.apache.log4j.DailyRollingFileAppender">            <param name="File" value="files/logs/info.log" />        <!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->          <param name="Append" value="true" />  <span style="white-space:pre"></span><param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />        <layout class="org.apache.log4j.PatternLayout">              <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss\}] - %m%n" />          </layout>          <!--过滤器设置输出的级别-->         <filter class="org.apache.log4j.varia.LevelRangeFilter">    <span style="white-space:pre"></span>   <param name="levelMin" value="INFO" />    <span style="white-space:pre"></span>   <param name="levelMax" value="INFO" />    <span style="white-space:pre"></span>   <param name="AcceptOnMatch" value="true" />    <span style="white-space:pre"></span></filter>    </appender>       <appender name="debug" class="org.apache.log4j.DailyRollingFileAppender">       <span style="white-space:pre"></span><!-- 设置日志输出文件名 -->             <param name="File" value="files/logs/debug.log" />        <!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->          <param name="Append" value="true" />  <span style="white-space:pre"></span><param name="DatePattern" value="'.'yyyy-MM-dd'.log'" /><span style="white-space:pre"></span><!-- 指定日志消息的输出最低层次 --><span style="white-space:pre"></span><param name="Threshold" value="debug" />          <layout class="org.apache.log4j.PatternLayout">              <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\} - %m%n" />          </layout>      </appender>         <appender name="warn" class="org.apache.log4j.DailyRollingFileAppender">       <span style="white-space:pre"></span><!-- 设置日志输出文件名 -->             <param name="File" value="files/logs/warn.log" />        <!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->          <param name="Append" value="true" />  <span style="white-space:pre"></span><param name="DatePattern" value="'.'yyyy-MM-dd'.log'" /><span style="white-space:pre"></span><!-- 指定日志消息的输出最低层次 --><span style="white-space:pre"></span><param name="Threshold" value="warn" />          <layout class="org.apache.log4j.PatternLayout">              <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\} - %m%n" />          </layout>      </appender>         <appender name="error" class="org.apache.log4j.DailyRollingFileAppender">       <span style="white-space:pre"></span><!-- 设置日志输出文件名 -->             <param name="File" value="files/logs/error.log" />        <!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->          <param name="Append" value="true" />  <span style="white-space:pre"></span><param name="DatePattern" value="'.'yyyy-MM-dd'.log'" /><span style="white-space:pre"></span><!-- 指定日志消息的输出最低层次 --><span style="white-space:pre"></span><param name="Threshold" value="error" />          <layout class="org.apache.log4j.PatternLayout">              <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\} - %m%n" />          </layout>      </appender>         <!-- 根logger的设置-->      <root>          <priority value ="debug"/>          <appender-ref ref="myConsole"/>    <span style="white-space:pre"></span><appender-ref ref="debug"/>        <appender-ref ref="info"/>          <appender-ref ref="warn"/>        <appender-ref ref="error"/>    </root>    </log4j:configuration> 

1.2、创建所需用到的文件夹及文件


1.3、编写测试方法

import org.apache.log4j.Logger;import org.apache.log4j.PropertyConfigurator;public class Log4jTest {static final Logger logger = Logger.getLogger(Log4jTest.class.getName());public static void main(String[] args) {PropertyConfigurator.configure("config/log4j.xml");logger.trace("trace ...");    logger.debug("Debug ...");    logger.info("Info ...");    logger.warn("Warn ...");    logger.error("Error ...");}}

1.4、日志输出结果

a、控制台

[2014-09-27 18:32:51,923 DEBUG] [main] test.Log4jTest - Debug ...[2014-09-27 18:32:51,923 INFO ] [main] test.Log4jTest - Info ...[2014-09-27 18:32:51,924 WARN ] [main] test.Log4jTest - Warn ...[2014-09-27 18:32:51,924 ERROR] [main] test.Log4jTest - Error ...

b、debug日志

[2014-09-27 18:32:51,923 DEBUG] [main] test.Log4jTest - Debug ...[2014-09-27 18:32:51,923 INFO ] [main] test.Log4jTest - Info ...[2014-09-27 18:32:51,924 WARN ] [main] test.Log4jTest - Warn ...[2014-09-27 18:32:51,924 ERROR] [main] test.Log4jTest - Error ...

c、准备给用户看的info日志

[2014-09-27 18:32:51] - Info ...

d、warn日志

[2014-09-27 18:37:02,224 WARN ] [main] test.Log4jTest - Warn ...[2014-09-27 18:37:02,225 ERROR] [main] test.Log4jTest - Error ...

  e、error日志

[2014-09-27 18:37:02,225 ERROR] [main] test.Log4jTest - Error ...

2、log4j理论介绍

Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。

Log4j主要有Logger、Appender、Layout三个主要的组件,这三个组件相互配合使得我们可以获得非常强大的日志记录的能力。

Log4j的类层次结构如下:

       

2.1、根类别

根类别在类别层次结构的顶部,即全局性的日志级别

配置根Logger,其语法为:

log4j.rootLogger = [ level ] , appenderName, appenderName, ...

level 是日志记录的类别,appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。

类别level 为 OFF、FATAL、ERROR、WARN、INFO、DEBUG、trace、ALL或自定义的优先级。

og4j常用的优先级FATAL>ERROR>WARN>INFO>DEBUG

如果为log4j.rootLogger=WARN,则意味着只有WARN,ERROR,FATAL被输出,DEBUG,INFO将被屏蔽掉。

举例:log4j.rootCategory=INFO,stdout,Runlog,Errorlog

根日志类别为INFO,DEBUG将被屏蔽,其他的将被输出。 stdout,Runlog,Errorlog分别为3个输出目的地。

 

2.2、Appender目的地

配置日志信息输出目的地Appender,其语法为

log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
...
log4j.appender.appenderName.option = valueN
appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。

log4j支持的输出目的地:
org.apache.log4j.ConsoleAppender 控制台
org.apache.log4j.FileAppender 文件
org.apache.log4j.DailyRollingFileAppender 每天产生一个日志文件
org.apache.log4j.RollingFileAppender (文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方) 
org.apache.log4j.net.SMTPAppender 邮件
org.apache.log4j.jdbc.JDBCAppender 数据库
其他如:GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等

         a.ConsoleAppender选项 
                Threshold=WARN:指定日志消息的输出最低层次。 
                ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。 
                Target=System.err:默认情况下是:System.out,指定输出控制台 
          b.FileAppender 选项 
               Threshold=WARN:指定日志消息的输出最低层次。 
               ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。 
               File=mylog.txt:指定消息输出到mylog.txt文件。 
               Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。 
          c.DailyRollingFileAppender 选项 
               Threshold=WARN:指定日志消息的输出最低层次。 
               ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。 
               File=mylog.txt:指定消息输出到mylog.txt文件。 
               Append=false:默认值是true,即以追加的方式将消息增加到指定文件中,false指将消息覆盖指定的文件内容。 
               DatePattern=''.''yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下: 
                    1)''.''yyyy-MM: 每月 
                    2)''.''yyyy-ww: 每周  
                    3)''.''yyyy-MM-dd: 每天 
                    4)''.''yyyy-MM-dd-a: 每天两次 
                    5)''.''yyyy-MM-dd-HH: 每小时 
                    6)''.''yyyy-MM-dd-HH-mm: 每分钟 
         d.RollingFileAppender 选项 
             Threshold=WARN:指定日志消息的输出最低层次。 
              ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。 
              File=mylog.txt:指定消息输出到mylog.txt文件。 
              Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。 
              MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。 
              MaxBackupIndex=2:指定可以产生的滚动文件的最大数。 

2.3、Layout 布局

log4j提供4种布局:
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)


常用输出格式%-Xp %C or $class,  %F or %file,  %l or %location,  %L or %line,  %M or %method

-X号:X信息输出时左对齐;
%p:日志信息级别
%d{}:日志信息产生时间
%c:日志信息所在地(类名)
%m:产生的日志具体信息
%n:输出日志信息换行

2.4、Filters 过滤器

Filter 可以过滤 log 事件,并控制 log 输出

上面例子中用到了过滤器LevelRangeFilter,表示只输出INFO级别的日志

<pre name="code" class="html" style="color: rgb(54, 46, 43); font-size: 14px; line-height: 19.984375px;">        <filter class="org.apache.log4j.varia.LevelRangeFilter">    <span style="white-space:pre"></span>   <param name="levelMin" value="INFO" />    <span style="white-space:pre"></span>   <param name="levelMax" value="INFO" />    <span style="white-space:pre"></span>   <param name="AcceptOnMatch" value="true" />    <span style="white-space:pre"></span></filter>

3、如何自定义log4j的日志级别并将自定义日志输出到指定文件中

我们的项目需要记不同类型,不同格式,不同级别的日志。用它来写日志很方便,但是我们的项目对日志的需求有时会超出它本身的处理能力如:serious,checkout等,如果直接用log4j的log.debug(),log.warn()....是不会写诸如下面这种形式的日志的:serious:XXXX:20140927checkout:xxxxx:20140927 看了看资料,log4j的日志级别是通过Level类来实现的,log.warn(Object)实际调用的logger.log(Level,Object)方法这样就好办了,写一个类继承Log4j的Level类,扩充其日志级别,然后封装log4j的logger类,在封装的类中调用logger.log(扩充的Level类,Object)就可以了,具体步骤如下:
1)、写一个类继承Level,override父类的构造函数,比如我们需要Serious级别。
<pre name="code" class="java">private static class SeriousLevel extends Level {       private SeriousLevel(int level, String name, int sysLogLevel) {            super(level, name, sysLogLevel);       }}
2)、把这些继承Level的子类归到一个接口中,便于统一调用
public interface MyLogLevel {public static final Level SERIOUS_LEVEL = new SeriousLevel(Priority.ERROR_INT<span style="font-family: verdana, sans-serif;"> + 50</span><span style="font-family: verdana, sans-serif;">, "SERIOUS", SyslogAppender.LOG_LOCAL0);</span>public static final Level ALARM_LEVEL = new AlarmLevel(Priority.DEBUG_INT + 50, "ALARM", SyslogAppender.LOG_LOCAL0);}<span style="font-family: verdana, sans-serif; background-color: rgb(255, 255, 255);"> </span>
3)、封装Log4j的Logger,新增serious(Object) alarm(Object)等方法,在方法中调用Logger.log(Level,Object)来传入我们自己的日志level
public class MyLogger {private static Logger logger = Logger.getLogger(MyLogger.class);; public static void serious(Object pm_objLogInfo){ logger.log(MyLogLevel.SERIOUS_LEVEL,pm_objLogInfo);     /*MyLogLevel接口中的所有自定义日志级别都继承自Level*/ }  public static void alarm(Object pm_objLogInfo){ logger.log(MyLogLevel.ALARM_LEVEL,pm_objLogInfo); }}
4)、写自定义过滤器
public class MyLogFilter extends Filter{boolean acceptOnMatch = false;int levelMin;int levelMax;public int getLevelMin() {return levelMin;}public void setLevelMin(int levelMin) {this.levelMin = levelMin;}public int getLevelMax() {return levelMax;}public void setLevelMax(int levelMax) {this.levelMax = levelMax;}public int decide(LoggingEvent lgEvent) {int inputLevel = lgEvent.getLevel().toInt();if (inputLevel >= levelMin && inputLevel <= levelMax) {return 0;}return -1;}}

5)、写配置文件log4j.xml
<?xml version="1.0" encoding="UTF-8"?>  <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">      <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' >           <appender name="myConsole" class="org.apache.log4j.ConsoleAppender">          <layout class="org.apache.log4j.PatternLayout">              <param name="ConversionPattern"                    value="[%d{yyyy-MM-dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\} - %m%n" />          </layout>      </appender>     <appender name="serious" class="org.apache.log4j.DailyRollingFileAppender"><param name="File" value="files/logs/serious.log" />  <param name="Append" value="true"/><layout class="org.apache.log4j.PatternLayout">    <param name="ConversionPattern" value="%d{yyy-MM-dd HH:mm:ss} [%-5p] %c {%F:%L} - %m%n" />  </layout><filter class="com.test.test.MyLogFilter">      <param name="LevelMin" value="40050" />       <param name="LevelMax" value="40050" />   <param name="acceptOnMatch" value="true" />     </filter>  </appender>        <appender name="alarm" class="org.apache.log4j.DailyRollingFileAppender"><param name="File" value="files/logs/alarm.log" />  <param name="Append" value="true"/><layout class="org.apache.log4j.PatternLayout">    <param name="ConversionPattern" value="%d{yyy-MM-dd HH:mm:ss} [%-5p] %c {%F:%L} - %m%n" />  </layout><filter class="com.test.test.MyLogFilter">      <param name="LevelMin" value="10050" />       <param name="LevelMax" value="10050" />   <param name="acceptOnMatch" value="true" />     </filter>  </appender>         <!-- 根logger的设置-->      <root>          <priority value ="debug"/>          <appender-ref ref="myConsole"/>    <appender-ref ref="serious"/>        <appender-ref ref="alarm"/>      </root>    </log4j:configuration> 

6)、写测试类
import org.apache.log4j.Logger;import org.apache.log4j.PropertyConfigurator;public class Log4jTest {static final Logger logger = Logger.getLogger(Log4jTest.class.getName());static final MyLogger log = new MyLogger();public static void main(String[] args) {PropertyConfigurator.configure("config/log4j.xml");logger.trace("trace ...");    logger.debug("Debug ...");    logger.info("Info ...");    logger.warn("Warn ...");    logger.error("Error ...");    log.serious("Serious ...");    log.alarm("Alarm ...");}}

7)、查看输出结果
a、控制台
log4j:WARN No such property [acceptOnMatch] in com.test.test.MyLogFilter.[2014-09-27 23:16:26,710 DEBUG] [main] test.Log4jTest - Debug ...[2014-09-27 23:16:26,710 INFO ] [main] test.Log4jTest - Info ...[2014-09-27 23:16:26,710 WARN ] [main] test.Log4jTest - Warn ...[2014-09-27 23:16:26,711 ERROR] [main] test.Log4jTest - Error ...[2014-09-27 23:16:26,712 SERIOUS] [main] test.MyLogger - Serious ...[2014-09-27 23:16:26,715 ALARM] [main] test.MyLogger - Alarm ...

b、serious.log
14-09-27 23:16:26 [SERIOUS] com.test.test.MyLogger {MyLogger.java:9} - Serious ...

c、alarm.log
14-09-27 23:16:26 [ALARM] com.test.test.MyLogger {MyLogger.java:14} - Alarm ...

4、log4j其他功能简介

4.1、log4j 2.0中的过滤器

log4j 2 定义了 10 种Filter。[点我看官网介绍]

1)、BurstFilter

<span style="white-space:pre"></span><BurstFilter level="INFO" rate="16" maxBurst="100"/>

level :BurstFilter过滤的事件级别
rate :每秒允许的 log 事件的平均值
maxBurst:当BurstFilter过滤的事件超过 rate 值,排队的 log 事件上限。超过此上限的 log ,将被丢弃。默认情况下 maxBurst = 10*rate
按以上配置,假定每个 log 事件的执行时间较长,输出 117 个 log 事件( INFO级别)到RollingFileAppenders,BurstFilter会过滤得到INFO级别的 log 事件,之后会发生: 16 个 log 事件在执行, 100 个等待执行, 1 个被丢弃。


  2)CompositeFilter

<span style="font-size:12px;"><span style="white-space:pre"></span><Filters><span style="white-space:pre"></span><Marker marker="EVENT" onMatch="ACCEPT" onMismatch="NEUTRAL"/><span style="white-space:pre"></span><DynamicThresholdFilter key="loginId" defaultThreshold="ERROR"<span style="white-space:pre"></span>onMatch="ACCEPT" onMismatch="NEUTRAL"><span style="white-space:pre"></span><KeyValuePair key="User1" value="DEBUG"/><span style="white-space:pre"></span></DynamicThresholdFilter><span style="white-space:pre"></span></Filters></span>
不止一个过滤器时可以通过使用一个CompositeFilter。


3)、DynamicThresholdFilter

<span style="white-space:pre"></span><DynamicThresholdFilter key="loginId" defaultThreshold="ERROR" onMatch="ACCEPT" onMismatch="NEUTRAL"><span style="white-space:pre"></span><KeyValuePair key="User1" value="DEBUG"/><span style="white-space:pre"></span></DynamicThresholdFilter>
DynamicThresholdFilter可以过滤具有特定的属性某一级别的日志。例如, 
如果用户的登录ID被捕获在ThreadContext
的Map中则可以启用debug级的日志。 

4)、MapFilter

<span style="white-space:pre"></span><MapFilter onMatch="ACCEPT" onMismatch="NEUTRAL" operator="or"><span style="white-space:pre"></span><KeyValuePair key="eventId" value="Login"/><span style="white-space:pre"></span><KeyValuePair key="eventId" value="Logout"/><span style="white-space:pre"></span></MapFilter>
MapFilter可以对Map中的信息进行过滤,进而记录特定事件,比如登入、退出。


5)、 MarkerFilter

<span style="white-space:pre"></span><RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/app-%d{MM-dd-yyyy}.log.gz"><span style="white-space:pre"></span><MarkerFilter marker="FLOW" onMatch="ACCEPT" onMismatch="DENY"/><span style="white-space:pre"></span><PatternLayout><span style="white-space:pre"></span><pattern>%d %p %c{1.} [%t] %m%n</pattern><span style="white-space:pre"></span></PatternLayout><span style="white-space:pre"></span><TimeBasedTriggeringPolicy /><span style="white-space:pre"></span></RollingFile>

6)、RegexFilter

<span style="white-space:pre"></span><RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/app-%d{MM-dd-yyyy}.log.gz"><span style="white-space:pre"></span><RegexFilter regex=".* test .*" onMatch="ACCEPT" onMismatch="DENY"/><span style="white-space:pre"></span><PatternLayout><span style="white-space:pre"></span><pattern>%d %p %c{1.} [%t] %m%n</pattern><span style="white-space:pre"></span></PatternLayout><span style="white-space:pre"></span><TimeBasedTriggeringPolicy /><span style="white-space:pre"></span></RollingFile>

7)、StructuredDataFilter

<span style="white-space:pre"></span><StructuredDataFilter onMatch="ACCEPT" onMismatch="NEUTRAL" operator="or"><span style="white-space:pre"></span><KeyValuePair key="id" value="Login"/><span style="white-space:pre"></span><KeyValuePair key="id" value="Logout"/><span style="white-space:pre"></span></StructuredDataFilter>

8)、ThreadContextMapFilter

<span style="white-space:pre"></span><ThreadContextMapFilter onMatch="ACCEPT" onMismatch="NEUTRAL" operator="or"><span style="white-space:pre"></span><KeyValuePair key="User1" value="DEBUG"/><span style="white-space:pre"></span><KeyValuePair key="User2" value="WARN"/><span style="white-space:pre"></span></ThreadContextMapFilter>

9)、ThresholdFilter

<span style="white-space:pre"></span><ThresholdFilter level="TRACE" onMatch="ACCEPT" onMismatch="DENY"/>

10)、TimeFilter

<span style="white-space:pre"></span><TimeFilter start="05:00:00" end="05:30:00" onMatch="ACCEPT" onMismatch="DENY"/>



0 0
原创粉丝点击