log4j详解 将指定日志输出到不同的文件中
来源:互联网 发布:北大软件工程硕士年薪 编辑:程序博客网 时间:2024/05/16 12:22
0.概述
1、log4j的Hello World示例
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配置文件说明
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的日志级别并将自定义日志输出到指定文件中
<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)、查看输出结果
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"/>
- log4j详解 将指定日志输出到不同的文件中
- log4j将日志按模块输出到不同文件中
- log4j不同的日志输出到不同的文件中
- log4j有针对性的将日志输出到不同文件且不重复输出到root中
- 用log4j如何使不同的类的日志输出到不同的日志文件中.
- 使log4j不同level的日志输出到不同文件
- log4j不同的类输出到不同的日志文件中
- log4j日志针对不同的类输出到不同的文件中。
- log4j输出到指定日志文件
- log4j输出到指定日志文件
- log4j输出到指定日志文件
- Log4j按级别输出日志到不同的文件
- Log4j按级别输出日志到不同的文件
- Log4j按级别输出日志到不同的文件
- Log4j按级别输出日志到不同的文件
- log4j只输出指定类的日志到某个文件
- log4j日志按分模块和分级输出到不同的文件中去
- eclipse控制将日志输出到外部指定文件中
- C++中的类的定义
- C++中类的继承与派生
- 小米2015校招(2014-9-25合肥) 排队 图 有向图是否存在回路 拓扑排序
- 100001 win 7 下 java环境变量配置
- 具有局部范围
- log4j详解 将指定日志输出到不同的文件中
- C++的多态性
- java初学者对递归调用的理解
- 设置iframe
- URAL 1192 Ball in a Dream(抛物线运动)
- 网络编程学习笔记(TCP套接口选项)
- 函数被改变
- Extjs — 图片上传预览案例
- Virtual Box4.3.10 + centos6.3+OpenCV2.4.2+Python2.7.8