LOG4j 2使用

log4j 2log4j的升级版html

log4j 2简介:http://logging.apache.org/log4j/2.x/manual/index.htmljava

1. 下载log4j 2apache

log4j 2官网:http://logging.apache.org/log4j/2.x/json

log4j 2下载页面:http://logging.apache.org/log4j/2.x/download.htmlapi

我下载的是”apache-log4j-2.0-beta9-bin.zip”,解压该文件,将log4j-api-2.0-beta9.jar、log4j-core-2.0-beta9.jar导入项目,便可使用log4j 2并发

2. 初识log4j 2app

[java]  view plain  copy
  1. package log4j2;  
  2.   
  3. import org.apache.logging.log4j.LogManager;  
  4. import org.apache.logging.log4j.Logger;  
  5.   
  6. public class Test01 {  
  7.     public static void main(String[] args) {  
  8.         Logger logger = LogManager.getLogger(Test01.class.getName());   
  9.         logger.trace("trace");  
  10.         logger.debug("debug");  
  11.         logger.info("hello");  
  12.         logger.warn("warn");  
  13.         logger.error("error");  
  14.         logger.fatal("fatal");  
  15.     }  
  16.   
  17. }  

Outputdom

[plain]  view plain  copy
  1. 12:24:25.398 [main] ERROR log4j2.Test01 - error  
  2. 12:24:25.401 [main] FATAL log4j2.Test01 - fatal  

代码中写了6种输出,为何只出来”error”,”fatal”呢?eclipse

原来log4j 2初始化时,自动从src目录加载配置文件。配置文件的格式有两种:jsonxmlide

配置文件的优先级(从高到低):

log4j2-test.json(或log4j2-test.jsn

log4j2-test.xml

log4j2.json(log4j2.jsn)

log4j2.xml

默认配置文件

log4j 2初始化时,优先从src目录下找log4j2-test.json(或log4j2-test.jsn”,若是没找到,会继续找”log4j2-test.xml”,以此类推

刚才的例子中,src目录下没有配置文件,所以log4j 2将使用默认配置文件

默认配置文件由DefaultConfiguration类提供。DefaultConfiguration内容:

[java]  view plain  copy
  1. * Licensed to the Apache Software Foundation (ASF) under one or more  
  2. package org.apache.logging.log4j.core.config;  
  3.   
  4. import java.io.Serializable;  
  5.   
  6. import org.apache.logging.log4j.Level;  
  7. import org.apache.logging.log4j.core.Appender;  
  8. import org.apache.logging.log4j.core.Layout;  
  9. import org.apache.logging.log4j.core.appender.ConsoleAppender;  
  10. import org.apache.logging.log4j.core.layout.PatternLayout;  
  11. import org.apache.logging.log4j.util.PropertiesUtil;  
  12.   
  13. /** 
  14.  * The default configuration writes all output to the Console using the default logging level. You configure default 
  15.  * logging level by setting the system property "org.apache.logging.log4j.level" to a level name. If you do not 
  16.  * specify the property, Log4j uses the ERROR Level. Log Events will be printed using the basic formatting provided 
  17.  * by each Message. 
  18.  */  
  19. public class DefaultConfiguration extends BaseConfiguration {  
  20.   
  21.     /** 
  22.      * The name of the default configuration. 
  23.      */  
  24.     public static final String DEFAULT_NAME = "Default";  
  25.     /** 
  26.      * The System Property used to specify the logging level. 
  27.      */  
  28.     public static final String DEFAULT_LEVEL = "org.apache.logging.log4j.level";  
  29.   
  30.     /** 
  31.      * Constructor to create the default configuration. 
  32.      */  
  33.     public DefaultConfiguration() {  
  34.   
  35.         setName(DEFAULT_NAME);  
  36.         final Layout<? extends Serializable> layout =  
  37.                 PatternLayout.createLayout("%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"nullnullnullnull);  
  38.         final Appender appender =  
  39.                 ConsoleAppender.createAppender(layout, null"SYSTEM_OUT""Console""false""true");  
  40.         appender.start();  
  41.         addAppender(appender);  
  42.         final LoggerConfig root = getRootLogger();  
  43.         root.addAppender(appender, nullnull);  
  44.   
  45.         final String levelName = PropertiesUtil.getProperties().getStringProperty(DEFAULT_LEVEL);  
  46.         final Level level = levelName != null && Level.valueOf(levelName) != null ?  
  47.             Level.valueOf(levelName) : Level.ERROR;  
  48.         root.setLevel(level);  
  49.     }  
  50.   
  51.     @Override  
  52.     protected void doConfigure() {  
  53.     }  
  54. }  

DefaultConfiguration提供的默认配置等同于以下配置:

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <Configuration status="WARN">  
  3.   <Appenders>  
  4.     <Console name="Console" target="SYSTEM_OUT">  
  5.       <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>  
  6.     </Console>  
  7.   </Appenders>  
  8.   <Loggers>  
  9.     <Root level="error">  
  10.       <AppenderRef ref="Console"/>  
  11.     </Root>  
  12.   </Loggers>  
  13. </Configuration>  

log4j 2定义了8个事件级别:ALL,TRACE, DEBUG, INFO, WARN, ERROR ,FATAL,OFF(由低到高)

因为Root level设置为”error”,所以只有等于高于”error”级别的事件才能输出。因此刚才的例子中只输出了”error”,”fatal”

3. log4j 2读取配置文件

log4j 2读取的配置文件能够分为三类:src下的配置文件、绝对路径的配置文件、相对路径的配置文件

3.1 log4j 2读取src下的配置文件

src目录下建立log4j2.xml,复制log4j 2默认配置的内容到log4j2.xml,并将log4j2.xml里的Root level改成”trace”,内容以下:

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <Configuration status="WARN">  
  3.   <Appenders>  
  4.     <Console name="Console" target="SYSTEM_OUT">  
  5.       <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>  
  6.     </Console>  
  7.   </Appenders>  
  8.   <Loggers>  
  9.     <Root level="trace">  
  10.       <AppenderRef ref="Console"/>  
  11.     </Root>  
  12.   </Loggers>  
  13. </Configuration>  

再次运行Test01 ,输出以下:

[plain]  view plain  copy
  1. 13:24:03.939 [main] TRACE log4j2.Test01 - trace  
  2. 13:24:03.942 [main] DEBUG log4j2.Test01 - debug  
  3. 13:24:03.942 [main] INFO  log4j2.Test01 - info  
  4. 13:24:03.942 [main] WARN  log4j2.Test01 - warn  
  5. 13:24:03.942 [main] ERROR log4j2.Test01 - error  
  6. 13:24:03.942 [main] FATAL log4j2.Test01 - fatal  

3.2 log4j 2读取绝对路径的配置文件

log4j2.xml拷贝到E盘下,并将其更名为Test02.xml,而后将Test02.xml里的Root level设置为”debug”

测试代码以下

[java]  view plain  copy
  1. package log4j2;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.FileNotFoundException;  
  6.   
  7. import org.apache.logging.log4j.LogManager;  
  8. import org.apache.logging.log4j.Logger;  
  9. import org.apache.logging.log4j.core.config.ConfigurationFactory.ConfigurationSource;  
  10. import org.apache.logging.log4j.core.config.Configurator;  
  11.   
  12. public class Test02 {  
  13.     public static void main(String[] args) throws FileNotFoundException {  
  14.   
  15.         //绝对路径配置文件  
  16.         ConfigurationSource source = new ConfigurationSource();  
  17.         source.setLocation("E:\\Test02.xml");  
  18.         source.setFile(new File("E:\\Test02.xml"));  
  19.         source.setInputStream(new FileInputStream("E:\\Test02.xml"));  
  20.         Configurator.initialize(null, source);  
  21.           
  22.         Logger logger = LogManager.getLogger(Test02.class.getName());   
  23.         logger.trace("trace");  
  24.         logger.debug("debug");  
  25.         logger.info("info");  
  26.         logger.warn("warn");  
  27.         logger.error("error");  
  28.         logger.fatal("fatal");  
  29.     }  
  30.   
  31. }  

Output:

[html]  view plain  copy
  1. 14:54:46.102 [main] DEBUG log4j2.Test02 - debug  
  2. 14:54:46.105 [main] INFO  log4j2.Test02 - info  
  3. 14:54:46.105 [main] WARN  log4j2.Test02 - warn  
  4. 14:54:46.105 [main] ERROR log4j2.Test02 - error  
  5. 14:54:46.105 [main] FATAL log4j2.Test02 - fatal  

能够看到trace内容并无输出,说明读取配置文件成功

3.3 log4j 2读取相对路径的配置文件

获取运行时路径的方法

[java]  view plain  copy
  1. package log4j2;  
  2.   
  3. public class Test03 {  
  4.     public static void main(String[] args) {  
  5.         System.out.println("Working Directory = " +  
  6.                   System.getProperty("user.dir"));  
  7.     }  
  8.   
  9. }  

Output:

[plain]  view plain  copy
  1. Working Directory = E:\project\eclipse\Test  

在”E:\project\eclipse\Test\bin\log4j2”新建Test03文件夹。

而后将log4j2.xml拷贝到”E:\project\eclipse\Test\bin\log4j2\Test03”下,并将其更名为Test03.xml,而后将Test03.xml里的Root level设置为”info

测试代码以下:

[java]  view plain  copy
  1. package log4j2;  
  2.   
  3. import org.apache.logging.log4j.LogManager;  
  4. import org.apache.logging.log4j.Logger;  
  5. import org.apache.logging.log4j.core.config.XMLConfigurationFactory;  
  6.   
  7. public class Test03 {  
  8.     public static void main(String[] args) {  
  9.         System.out.println("Working Directory = " +  
  10.                   System.getProperty("user.dir"));  
  11.         //相对路径配置文件  
  12.         System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY, "log4j2/Test03/Test03.xml");  
  13.                   
  14.         Logger logger = LogManager.getLogger(Test03.class.getName());   
  15.         logger.trace("trace");  
  16.         logger.debug("debug");  
  17.         logger.info("info");  
  18.         logger.warn("warn");  
  19.         logger.error("error");  
  20.         logger.fatal("fatal");  
  21.     }  
  22.   
  23. }  

Output:

[plain]  view plain  copy
  1. Working Directory = E:\project\eclipse\Test  
  2. 15:11:09.870 [main] INFO  log4j2.Test01 - info  
  3. 15:11:09.872 [main] WARN  log4j2.Test01 - warn  
  4. 15:11:09.873 [main] ERROR log4j2.Test01 - error  
  5. 15:11:09.873 [main] FATAL log4j2.Test01 - fatal  

能够看到trace,debug内容并无输出,说明读取配置文件成功

下面的测试均采用log4j 2读取src下配置文件的方式

4. Appenders

Appender负责定义日志输出的目的地,它能够是控制台(ConsoleAppender)、文件(FileAppender)、以Email的形式发送出去(SMTPAppender)等

Log4j 2官网介绍了20Appenderhttp://logging.apache.org/log4j/2.x/manual/appenders.html

下面介绍3种经常使用的AppenderConsoleAppender、FileAppender、RollingFileAppender

4.1 ConsoleAppender

ConsoleAppender将输出写到System.err或System.out。上面测试例子中的Appender均为ConsoleAppender,输出写到了System.out。若是想将输出写到System.err,设置Console标签下的target"SYSTEM_ERR "便可

4.2 FileAppender

FileAppender将输出写到指定文件,在File标签下设置fileName便可。fileName能够是绝对路径的文件也能够是相对路径的文件

写到绝对路径文件

修改src下的log4j2.xml

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <Configuration status="WARN">  
  3.   <Appenders>  
  4.     <!--FileAppender-->  
  5.     <File name="File" fileName="E:\Test01.log">  
  6.       <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>  
  7.     </File>  
  8.   </Appenders>  
  9.   <Loggers>  
  10.     <Root level="trace">  
  11.       <AppenderRef ref="File"/>  
  12.     </Root>  
  13.   </Loggers>  
  14. </Configuration>  

运行Test01,log将写到E:\Test01.log

写到相对路径文件

修改src下的log4j2.xml

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <Configuration status="WARN">  
  3.   <Appenders>  
  4.     <!--FileAppender-->  
  5.     <File name="File" fileName="logs/Test01.log">  
  6.       <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>  
  7.     </File>  
  8.   </Appenders>  
  9.   <Loggers>  
  10.     <Root level="trace">  
  11.       <AppenderRef ref="File"/>  
  12.     </Root>  
  13.   </Loggers>  
  14. </Configuration>  

运行Test01,log将写到E:\project\eclipse\Test\logs\Test01.log

4.3 RollingFileAppender

RollingFileAppender跟FileAppender的基本用法同样。但RollingFileAppender能够设置log文件的size(单位:KB/MB/GB)上限、数量上限,当log文件超过设置的size上限,会自动被压缩。RollingFileAppender能够理解为滚动输出日志,若是log4j 2记录的日志达到上限,旧的日志将被删除,腾出的空间用于记录新的日志

修改src下的log4j2.xml

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <Configuration status="WARN">  
  3.   <Appenders>    
  4.     <!--RollingFile-->  
  5.     <RollingFile name="RollingFile" fileName="logs/Test.log"  
  6.                  filePattern="logs/$${date:yyyy-MM}/Test-%d{MM-dd-yyyy}-%i.log.gz">  
  7.       <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>  
  8.       <Policies>  
  9.         <TimeBasedTriggeringPolicy />  
  10.         <SizeBasedTriggeringPolicy size="1 KB"/>  
  11.       </Policies>  
  12.       <DefaultRolloverStrategy max="10"/>  
  13.     </RollingFile>  
  14.   </Appenders>  
  15.   <Loggers>  
  16.     <Root level="trace">  
  17.       <AppenderRef ref="RollingFile"/>  
  18.     </Root>  
  19.   </Loggers>  
  20. </Configuration>  

该配置设置日志写到Test.Log,若是Test.log的大小超过1KBlog4j 2会将Test.log制成压缩文件(压缩文件的命名格式是由filePattern设置的)。DefaultRolloverStrategy 标签的max设置压缩文件的上限(默认值为7 

Test01的输出循环50

[java]  view plain  copy
  1. package log4j2;  
  2.   
  3. import java.io.FileNotFoundException;  
  4. import java.io.InputStream;  
  5.   
  6. import org.apache.logging.log4j.LogManager;  
  7. import org.apache.logging.log4j.Logger;  
  8. import org.apache.logging.log4j.core.LoggerContext;  
  9. import org.apache.logging.log4j.core.config.Configuration;  
  10. import org.apache.logging.log4j.core.config.ConfigurationFactory.ConfigurationSource;  
  11. import org.apache.logging.log4j.core.config.XMLConfigurationFactory;  
  12.   
  13. public class Test01 {  
  14.     public static void main(String[] args) throws FileNotFoundException {  
  15.         Logger logger = LogManager.getLogger(Test01.class.getName());   
  16.         for (int i = 0; i < 50; i++) {  
  17.             logger.trace("trace");  
  18.             logger.debug("debug");  
  19.             logger.info("info");  
  20.             logger.warn("warn");  
  21.             logger.error("error");  
  22.             logger.fatal("fatal");  
  23.         }  
  24.           
  25.     }  
  26.   
  27. }  
运行Test01

能够在E:\project\eclipse\Test\logs\2014-02看到以下压缩文件


5. Filters

Filter能够过滤log事件,并控制log输出

log4j 2定义了10种 Filterhttp://logging.apache.org/log4j/2.x/manual/filters.html

下面介绍一下BurstFilter的用法

BurstFilter能够控制某一级别的log的并发状况

修改src下的log4j2.xml

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <Configuration status="warn" name="MyApp" packages="">  
  3.   <Appenders>  
  4.     <RollingFile name="RollingFile" fileName="logs/app.log"  
  5.                  filePattern="logs/app-%d{MM-dd-yyyy}.log.gz">  
  6.       <BurstFilter level="INFO" rate="16" maxBurst="100"/>  
  7.       <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>  
  8.       <Policies>  
  9.         <TimeBasedTriggeringPolicy />  
  10.         <SizeBasedTriggeringPolicy size="1 KB"/>  
  11.       </Policies>  
  12.       <DefaultRolloverStrategy max="10"/>  
  13.     </RollingFile>  
  14.   </Appenders>  
  15.   <Loggers>  
  16.     <Root level="trace">  
  17.       <AppenderRef ref="RollingFile"/>  
  18.     </Root>  
  19.   </Loggers>  
  20. </Configuration>  

<BurstFilter level="INFO" rate="16" maxBurst="100"/>标签解释

level:BurstFilter过滤的事件级别

rate:每秒容许的log事件的平均值

maxBurst:当BurstFilter过滤的事件超过rate值,排队的log事件上限。超过此上限的log,将被丢弃。默认状况下maxBurst = 10*rate

按以上配置,假定每一个log事件的执行时间较长,输出117log事件(INFO级别)到RollingFileAppenders,BurstFilter会过滤获得INFO级别的log事件,以后会发生:16log事件在执行,100个等待执行,1个被丢弃。

6. log4j 2指定某个类的log输出级别

log4j2.xml设置Test01的输出级别

修改src下的log4j2.xml

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <Configuration status="WARN">  
  3.   <Appenders>  
  4.     <Console name="Console" target="SYSTEM_OUT">  
  5.       <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>  
  6.     </Console>  
  7.   </Appenders>  
  8.   <Loggers>  
  9.     <Logger name="log4j2.Test01" level="trace">  
  10.         <AppenderRef ref="Console"/>  
  11.     </Logger>  
  12.     <Root level="error">  
  13.       <AppenderRef ref="Console"/>  
  14.     </Root>  
  15.   </Loggers>  
  16. </Configuration>  

修改Test01

[java]  view plain  copy
  1. package log4j2;  
  2.   
  3. import java.io.FileNotFoundException;  
  4. import java.io.InputStream;  
  5.   
  6. import org.apache.logging.log4j.LogManager;  
  7. import org.apache.logging.log4j.Logger;  
  8. import org.apache.logging.log4j.core.LoggerContext;  
  9. import org.apache.logging.log4j.core.config.Configuration;  
  10. import org.apache.logging.log4j.core.config.ConfigurationFactory.ConfigurationSource;  
  11. import org.apache.logging.log4j.core.config.XMLConfigurationFactory;  
  12.   
  13. public class Test01 {  
  14.     public static void main(String[] args) throws FileNotFoundException {  
  15.         Logger logger = LogManager.getLogger(Test01.class.getName());   
  16.         logger.trace("trace");  
  17.         logger.debug("debug");  
  18.         logger.info("info");  
  19.         logger.warn("warn");  
  20.         logger.error("error");  
  21.         logger.fatal("fatal");  
  22.                   
  23.     }  
  24.   
  25. }  

运行Test01

Output:

[plain]  view plain  copy
  1. 16:12:08.662 [main] TRACE log4j2.Test01 - trace  
  2. 16:12:08.662 [main] TRACE log4j2.Test01 - trace  
  3. 16:12:08.665 [main] DEBUG log4j2.Test01 - debug  
  4. 16:12:08.665 [main] DEBUG log4j2.Test01 - debug  
  5. 16:12:08.665 [main] INFO  log4j2.Test01 - info  
  6. 16:12:08.665 [main] INFO  log4j2.Test01 - info  
  7. 16:12:08.665 [main] WARN  log4j2.Test01 - warn  
  8. 16:12:08.665 [main] WARN  log4j2.Test01 - warn  
  9. 16:12:08.666 [main] ERROR log4j2.Test01 - error  
  10. 16:12:08.666 [main] ERROR log4j2.Test01 - error  
  11. 16:12:08.666 [main] FATAL log4j2.Test01 - fatal  
  12. 16:12:08.666 [main] FATAL log4j2.Test01 - fatal  

能够看到Test01里的日志输出了两次

原来log4j 2的配置文件都有一个root logger,root loggerlevel”error”,appenderconsole”。若是配置文件中没有设置Test01 logger,那么Test01将使用root logger;若是配置文件中设置了Test01 logger,则Test01 logger(子logger)的appender先输出,但Test01 logger的事件还会传到root logger(父logger)的appender,而后再次输出。

为了不重复输出,能够在Logger 标签下设置additivity"false",禁止子logger在父loggerappender里输出。修改后的log4j2.xml

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <Configuration status="WARN">  
  3.   <Appenders>  
  4.     <Console name="Console" target="SYSTEM_OUT">  
  5.       <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>  
  6.     </Console>  
  7.   </Appenders>  
  8.   <Loggers>  
  9.     <Logger name="log4j2.Test01" level="trace" additivity="false">  
  10.         <AppenderRef ref="Console"/>  
  11.     </Logger>  
  12.     <Root level="error">  
  13.       <AppenderRef ref="Console"/>  
  14.     </Root>  
  15.   </Loggers>  
  16. </Configuration>  

Output:

[plain]  view plain  copy
  1. 16:30:52.339 [main] TRACE log4j2.Test01 - trace  
  2. 16:30:52.342 [main] DEBUG log4j2.Test01 - debug  
  3. 16:30:52.342 [main] INFO  log4j2.Test01 - info  
  4. 16:30:52.342 [main] WARN  log4j2.Test01 - warn  
  5. 16:30:52.342 [main] ERROR log4j2.Test01 - error  
  6. 16:30:52.342 [main] FATAL log4j2.Test01 - fatal  

7. log4j 2能够定时检测配置文件的变化

经过设置monitorInterval属性,便可设置log4j 2自动检测配置文件的时间间隔(单位:秒),最小间隔为5秒。log4j 2检测到配置文件有变化,会从新配置本身。

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <Configuration monitorInterval="30">  
  3. </Configuration>  

8. Status

文中的配置文件的开头都有以下设置

[html]  view plain  copy
  1. <Configuration status="WARN">  

status究竟有什么用处呢?

log4j 2定义的status级别有8个:ALL,TRACE, DEBUG, INFO, WARN, ERROR ,FATAL,OFF

举例:若是设置INFO 那么INFO靠右全部的都会显示

其实status属性是帮助开发者找错用的,它能够检测log4j 2的配置文件是否有错,也能够检测到死循环的logger

9.Layouts

Appenders标签内的PatternLayout标签控制log事件的输出格式

log4j 2官网的Layouts介绍:http://logging.apache.org/log4j/2.x/manual/layouts.html


log4j2的按天分日志文件

[html]  view plain  copy
  1. <RollingFile name="error_appender" fileName="${LOG_HOME}/error.log" filePattern="${LOG_HOME}/error-%d{yyyy-MM-dd}.log">  
  2.     <PatternLayout pattern="%-d{yyyy-MM-dd HH:mm:ss} [%thread] %m%n"/>  
  3.     <Policies>  
  4.         <TimeBasedTriggeringPolicy modulate="true" interval="1"/>  
  5.     </Policies>  
  6. </RollingFile>  

按大小分

[html]  view plain  copy
  1. <RollingFile name="error_appender" fileName="${LOG_HOME}/error.log" filePattern="${LOG_HOME}/error-%d{yyyy-MM-dd}-%i.log.gz">  
  2.     <PatternLayout pattern="%-d{yyyy-MM-dd HH:mm:ss} [%thread] %m%n"/>  
  3.     <SizeBasedTriggeringPolicy size="100 MB" />  
  4. </RollingFile>  

按分钟分

[html]  view plain  copy
  1.     <RollingRandomAccessFile name="_1min_appender" fileName="${MINUTE_HOME}/minute" filePattern="${MINUTE_HOME}/minute-%d{yyyy-MM-dd-HH-mm}.log">  
  2.         <PatternLayout pattern="%m%n"/>  
  3.         <Policies>  
  4.     <TimeBasedTriggeringPolicy interval="1" modulate="true" />  
  5. </Policies>  
  6.     </RollingRandomAccessFile>  

关键点在于 filePattern后的日期格式,以及TimeBasedTriggeringPolicy的interval,日期格式精确到哪一位,interval也精确到哪个单位。

举例:${MINUTE_HOME}/minute-%d{yyyy-MM-dd-HH-mm}.log文件名最后是mm。那么若是interval是1就是每分钟类推

在log4J2.xml里配置的记录器

<Loggers>  
	<Logger name="HELLO" level="info" additivity="false">
      	<AppenderRef ref="Console"/>
		<AppenderRef ref="rollFile"/>
    </Logger>
    <Root level="ERROR">  
      <AppenderRef ref="Console"/>
      <AppenderRef ref="rollFile"/>  
    </Root>  
  </Loggers>

Logger里边的HELLO是记录器的名字。你能够在代码里获取

Logger logger = LogManager.getFormatterLogger("HELLO");
		logger.info("info");
root 是根记录器默认都用它