【Java】-NO.11.Java.1.Log4j.1.001-【Log4j Manual】-

1.0.0 Summary

Tittle:【Java】-NO.11.Java.1.Log4j.1.001-【Log4j2 Manual】-

Style:Java

Series:Log4j

Since:2017-04-24

End:2017-05-07

Total Hours:30+

Degree Of Diffculty:5

Degree Of Mastery:5

Practical Level:5

Desired Goal:5

Archieve Goal:3

Gerneral Evaluation:3

Writer:kingdelee

Related Links:

http://www.cnblogs.com/kingdelee/

http://blog.csdn.net/xfcone/article/details/45060747

http://www.codepub.cn/2016/12/18/Log4j2-to-achieve-different-levels-of-different-threads-log-output-to-a-different-file/

http://logging.apache.org/log4j/2.x/manual/configuration.html

1.1.1 Maven POM

<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.8.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.8.2</version>
        </dependency>

  

1.1.2 Test Code, "<Configuration status='' >", "<Root level=''>"

    public static void main(String[] args) {
        Logger logger = LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);
        logger.trace("trace level");
        logger.debug("debug level");
        logger.info("info level");
        logger.warn("warn level");
        logger.error("error level");
        logger.fatal("fatal level");
    }

then:  

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console. Set system property 'org.apache.logging.log4j.simplelog.StatusLogger.level' to TRACE to show Log4j2 internal initialization logging.
15:26:09.582 [main] ERROR  - error level
15:26:09.585 [main] FATAL  - fatal level

Add log4j2.xml to resources:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="TRACE">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </Console>
    </Appenders>
    <Loggers>
        <Root level="error">
            <AppenderRef ref="Console" />
        </Root>
    </Loggers>
</Configuration>

If Configuration status = ALL or TRACE, it will output info that contain "trace" "debug" "info" "warn" "error" "fatal":

2017-04-24 15:27:38,686 main DEBUG Initializing configuration XmlConfiguration[location=D:\ProjectStation\shopbase\target\classes\log4j2.xml]
2017-04-24 15:27:38,697 main DEBUG Installed script engines
2017-04-24 15:27:39,243 main DEBUG Oracle Nashorn Version: 1.8.0_121, Language: ECMAScript, Threading: Not Thread Safe, Compile: true, Names: {nashorn, Nashorn, js, JS, JavaScript, javascript, ECMAScript, ecmascript}
2017-04-24 15:27:39,243 main DEBUG PluginManager 'Core' found 112 plugins
2017-04-24 15:27:39,244 main DEBUG PluginManager 'Level' found 0 plugins
2017-04-24 15:27:39,252 main DEBUG PluginManager 'Lookup' found 13 plugins
2017-04-24 15:27:39,255 main DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout].
2017-04-24 15:27:39,271 main TRACE TypeConverterRegistry initializing.
2017-04-24 15:27:39,271 main DEBUG PluginManager 'TypeConverter' found 26 plugins
2017-04-24 15:27:39,290 main DEBUG PatternLayout$Builder(pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n", PatternSelector=null, Configuration(D:\ProjectStation\shopbase\target\classes\log4j2.xml), Replace=null, charset="null", alwaysWriteExceptions="null", disableAnsi="null", noConsoleNoAnsi="null", header="null", footer="null")
2017-04-24 15:27:39,290 main DEBUG PluginManager 'Converter' found 41 plugins
2017-04-24 15:27:39,292 main DEBUG Building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.ConsoleAppender].
2017-04-24 15:27:39,305 main DEBUG ConsoleAppender$Builder(target="SYSTEM_OUT", follow="null", direct="null", bufferedIo="null", bufferSize="null", immediateFlush="null", ignoreExceptions="null", PatternLayout(%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n), name="Console", Configuration(D:\ProjectStation\shopbase\target\classes\log4j2.xml), Filter=null)
2017-04-24 15:27:39,308 main DEBUG Jansi is not installed, cannot find org.fusesource.jansi.WindowsAnsiOutputStream
2017-04-24 15:27:39,309 main DEBUG Starting OutputStreamManager SYSTEM_OUT.false.false
2017-04-24 15:27:39,309 main DEBUG Building Plugin[name=appenders, class=org.apache.logging.log4j.core.config.AppendersPlugin].
2017-04-24 15:27:39,314 main DEBUG createAppenders(={Console})
2017-04-24 15:27:39,315 main DEBUG Building Plugin[name=AppenderRef, class=org.apache.logging.log4j.core.config.AppenderRef].
2017-04-24 15:27:39,324 main DEBUG createAppenderRef(ref="Console", level="null", Filter=null)
2017-04-24 15:27:39,325 main DEBUG Building Plugin[name=root, class=org.apache.logging.log4j.core.config.LoggerConfig$RootLogger].
2017-04-24 15:27:39,327 main DEBUG createLogger(additivity="null", level="ERROR", includeLocation="null", ={Console}, ={}, Configuration(D:\ProjectStation\shopbase\target\classes\log4j2.xml), Filter=null)
2017-04-24 15:27:39,334 main DEBUG Building Plugin[name=loggers, class=org.apache.logging.log4j.core.config.LoggersPlugin].
2017-04-24 15:27:39,336 main DEBUG createLoggers(={root})
2017-04-24 15:27:39,337 main DEBUG Configuration XmlConfiguration[location=D:\ProjectStation\shopbase\target\classes\log4j2.xml] initialized
2017-04-24 15:27:39,338 main DEBUG Starting configuration XmlConfiguration[location=D:\ProjectStation\shopbase\target\classes\log4j2.xml]
2017-04-24 15:27:39,339 main DEBUG Started configuration XmlConfiguration[location=D:\ProjectStation\shopbase\target\classes\log4j2.xml] OK.
2017-04-24 15:27:39,341 main TRACE Stopping org.apache.logging.log4j.core.config.DefaultConfiguration@497470ed...
2017-04-24 15:27:39,342 main TRACE DefaultConfiguration notified 1 ReliabilityStrategies that config will be stopped.
2017-04-24 15:27:39,342 main TRACE DefaultConfiguration stopping root LoggerConfig.
2017-04-24 15:27:39,343 main TRACE DefaultConfiguration notifying ReliabilityStrategies that appenders will be stopped.
2017-04-24 15:27:39,343 main TRACE DefaultConfiguration stopping remaining Appenders.
2017-04-24 15:27:39,344 main DEBUG Shutting down OutputStreamManager SYSTEM_OUT.false.false-1
2017-04-24 15:27:39,344 main DEBUG Shut down OutputStreamManager SYSTEM_OUT.false.false-1, all resources released: true
2017-04-24 15:27:39,345 main DEBUG Appender DefaultConsole-1 stopped with status true
2017-04-24 15:27:39,345 main TRACE DefaultConfiguration stopped 1 remaining Appenders.
2017-04-24 15:27:39,346 main TRACE DefaultConfiguration cleaning Appenders from 1 LoggerConfigs.
2017-04-24 15:27:39,346 main DEBUG Stopped org.apache.logging.log4j.core.config.DefaultConfiguration@497470ed OK
2017-04-24 15:27:39,432 main TRACE Reregistering MBeans after reconfigure. Selector=org.apache.logging.log4j.core.selector.ClassLoaderContextSelector@7334aada
2017-04-24 15:27:39,433 main TRACE Reregistering context (1/1): '18b4aac2' org.apache.logging.log4j.core.LoggerContext@1d9b7cce
2017-04-24 15:27:39,437 main TRACE Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=18b4aac2'
2017-04-24 15:27:39,437 main TRACE Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=18b4aac2,component=StatusLogger'
2017-04-24 15:27:39,438 main TRACE Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=18b4aac2,component=ContextSelector'
2017-04-24 15:27:39,440 main TRACE Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=18b4aac2,component=Loggers,name=*'
2017-04-24 15:27:39,441 main TRACE Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=18b4aac2,component=Appenders,name=*'
2017-04-24 15:27:39,442 main TRACE Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=18b4aac2,component=AsyncAppenders,name=*'
2017-04-24 15:27:39,442 main TRACE Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=18b4aac2,component=AsyncLoggerRingBuffer'
2017-04-24 15:27:39,443 main TRACE Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=18b4aac2,component=Loggers,name=*,subtype=RingBuffer'
2017-04-24 15:27:39,446 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2
2017-04-24 15:27:39,456 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=StatusLogger
2017-04-24 15:27:39,460 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=ContextSelector
2017-04-24 15:27:39,463 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=Loggers,name=
2017-04-24 15:27:39,466 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=Appenders,name=Console
2017-04-24 15:27:39,470 main TRACE Using default SystemClock for timestamps.
2017-04-24 15:27:39,471 main TRACE Using DummyNanoClock for nanosecond timestamps.
2017-04-24 15:27:39,472 main DEBUG Reconfiguration complete for context[name=18b4aac2] at URI D:\ProjectStation\shopbase\target\classes\log4j2.xml (org.apache.logging.log4j.core.LoggerContext@1d9b7cce) with optional ClassLoader: null
2017-04-24 15:27:39,472 main DEBUG Shutdown hook enabled. Registering a new one.
2017-04-24 15:27:39,474 main DEBUG LoggerContext[name=18b4aac2, org.apache.logging.log4j.core.LoggerContext@1d9b7cce] started OK.
15:27:39.491 [main] ERROR  - error level
15:27:39.496 [main] FATAL  - fatal level
2017-04-24 15:27:39,497 pool-1-thread-1 DEBUG Stopping LoggerContext[name=18b4aac2, org.apache.logging.log4j.core.LoggerContext@1d9b7cce]
2017-04-24 15:27:39,498 pool-1-thread-1 DEBUG Stopping LoggerContext[name=18b4aac2, org.apache.logging.log4j.core.LoggerContext@1d9b7cce]...
2017-04-24 15:27:39,499 pool-1-thread-1 TRACE Unregistering 1 MBeans: [org.apache.logging.log4j2:type=18b4aac2]
2017-04-24 15:27:39,500 pool-1-thread-1 TRACE Unregistering 1 MBeans: [org.apache.logging.log4j2:type=18b4aac2,component=StatusLogger]
2017-04-24 15:27:39,501 pool-1-thread-1 TRACE Unregistering 1 MBeans: [org.apache.logging.log4j2:type=18b4aac2,component=ContextSelector]
2017-04-24 15:27:39,502 pool-1-thread-1 TRACE Unregistering 1 MBeans: [org.apache.logging.log4j2:type=18b4aac2,component=Loggers,name=]
2017-04-24 15:27:39,503 pool-1-thread-1 TRACE Unregistering 1 MBeans: [org.apache.logging.log4j2:type=18b4aac2,component=Appenders,name=Console]
2017-04-24 15:27:39,503 pool-1-thread-1 TRACE Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=18b4aac2,component=AsyncAppenders,name=*'
2017-04-24 15:27:39,504 pool-1-thread-1 TRACE Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=18b4aac2,component=AsyncLoggerRingBuffer'
2017-04-24 15:27:39,505 pool-1-thread-1 TRACE Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=18b4aac2,component=Loggers,name=*,subtype=RingBuffer'
2017-04-24 15:27:39,510 pool-1-thread-1 TRACE Stopping XmlConfiguration[location=D:\ProjectStation\shopbase\target\classes\log4j2.xml]...
2017-04-24 15:27:39,512 pool-1-thread-1 TRACE XmlConfiguration notified 2 ReliabilityStrategies that config will be stopped.
2017-04-24 15:27:39,512 pool-1-thread-1 TRACE XmlConfiguration stopping 1 LoggerConfigs.
2017-04-24 15:27:39,513 pool-1-thread-1 TRACE XmlConfiguration stopping root LoggerConfig.
2017-04-24 15:27:39,513 pool-1-thread-1 TRACE XmlConfiguration notifying ReliabilityStrategies that appenders will be stopped.
2017-04-24 15:27:39,513 pool-1-thread-1 TRACE XmlConfiguration stopping remaining Appenders.
2017-04-24 15:27:39,514 pool-1-thread-1 DEBUG Shutting down OutputStreamManager SYSTEM_OUT.false.false
2017-04-24 15:27:39,514 pool-1-thread-1 DEBUG Shut down OutputStreamManager SYSTEM_OUT.false.false, all resources released: true
2017-04-24 15:27:39,515 pool-1-thread-1 DEBUG Appender Console stopped with status true
2017-04-24 15:27:39,515 pool-1-thread-1 TRACE XmlConfiguration stopped 1 remaining Appenders.
2017-04-24 15:27:39,515 pool-1-thread-1 TRACE XmlConfiguration cleaning Appenders from 2 LoggerConfigs.
2017-04-24 15:27:39,516 pool-1-thread-1 DEBUG Stopped XmlConfiguration[location=D:\ProjectStation\shopbase\target\classes\log4j2.xml] OK
2017-04-24 15:27:39,516 pool-1-thread-1 DEBUG Stopped LoggerContext[name=18b4aac2, org.apache.logging.log4j.core.LoggerContext@1d9b7cce] with status true

If Configuration status = debug, it will output info that contain "debug" "info" "warn" "error" "fatal" but "trace".

2017-04-24 22:57:35,482 main DEBUG Initializing configuration XmlConfiguration[location=D:\ProjectStation\shopbase\target\classes\log4j2.xml]
2017-04-24 22:57:35,496 main DEBUG Installed script engines
2017-04-24 22:57:36,068 main DEBUG Oracle Nashorn Version: 1.8.0_121, Language: ECMAScript, Threading: Not Thread Safe, Compile: true, Names: {nashorn, Nashorn, js, JS, JavaScript, javascript, ECMAScript, ecmascript}
2017-04-24 22:57:36,069 main DEBUG PluginManager 'Core' found 112 plugins
2017-04-24 22:57:36,069 main DEBUG PluginManager 'Level' found 0 plugins
2017-04-24 22:57:36,080 main DEBUG PluginManager 'Lookup' found 13 plugins
2017-04-24 22:57:36,083 main DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout].
2017-04-24 22:57:36,098 main DEBUG PluginManager 'TypeConverter' found 26 plugins
2017-04-24 22:57:36,125 main DEBUG PatternLayout$Builder(pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n", PatternSelector=null, Configuration(D:\ProjectStation\shopbase\target\classes\log4j2.xml), Replace=null, charset="null", alwaysWriteExceptions="null", disableAnsi="null", noConsoleNoAnsi="null", header="null", footer="null")
2017-04-24 22:57:36,126 main DEBUG PluginManager 'Converter' found 41 plugins
2017-04-24 22:57:36,128 main DEBUG Building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.ConsoleAppender].
2017-04-24 22:57:36,145 main DEBUG ConsoleAppender$Builder(target="SYSTEM_OUT", follow="null", direct="null", bufferedIo="null", bufferSize="null", immediateFlush="null", ignoreExceptions="null", PatternLayout(%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n), name="Console", Configuration(D:\ProjectStation\shopbase\target\classes\log4j2.xml), Filter=null)
2017-04-24 22:57:36,146 main DEBUG Jansi is not installed, cannot find org.fusesource.jansi.WindowsAnsiOutputStream
2017-04-24 22:57:36,147 main DEBUG Starting OutputStreamManager SYSTEM_OUT.false.false
2017-04-24 22:57:36,147 main DEBUG Building Plugin[name=appenders, class=org.apache.logging.log4j.core.config.AppendersPlugin].
2017-04-24 22:57:36,152 main DEBUG createAppenders(={Console})
2017-04-24 22:57:36,153 main DEBUG Building Plugin[name=AppenderRef, class=org.apache.logging.log4j.core.config.AppenderRef].
2017-04-24 22:57:36,168 main DEBUG createAppenderRef(ref="Console", level="null", Filter=null)
2017-04-24 22:57:36,169 main DEBUG Building Plugin[name=root, class=org.apache.logging.log4j.core.config.LoggerConfig$RootLogger].
2017-04-24 22:57:36,171 main DEBUG createLogger(additivity="null", level="FATAL", includeLocation="null", ={Console}, ={}, Configuration(D:\ProjectStation\shopbase\target\classes\log4j2.xml), Filter=null)
2017-04-24 22:57:36,177 main DEBUG Building Plugin[name=loggers, class=org.apache.logging.log4j.core.config.LoggersPlugin].
2017-04-24 22:57:36,180 main DEBUG createLoggers(={root})
2017-04-24 22:57:36,183 main DEBUG Configuration XmlConfiguration[location=D:\ProjectStation\shopbase\target\classes\log4j2.xml] initialized
2017-04-24 22:57:36,184 main DEBUG Starting configuration XmlConfiguration[location=D:\ProjectStation\shopbase\target\classes\log4j2.xml]
2017-04-24 22:57:36,185 main DEBUG Started configuration XmlConfiguration[location=D:\ProjectStation\shopbase\target\classes\log4j2.xml] OK.
2017-04-24 22:57:36,187 main DEBUG Shutting down OutputStreamManager SYSTEM_OUT.false.false-1
2017-04-24 22:57:36,188 main DEBUG Shut down OutputStreamManager SYSTEM_OUT.false.false-1, all resources released: true
2017-04-24 22:57:36,189 main DEBUG Appender DefaultConsole-1 stopped with status true
2017-04-24 22:57:36,189 main DEBUG Stopped org.apache.logging.log4j.core.config.DefaultConfiguration@497470ed OK
2017-04-24 22:57:36,278 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2
2017-04-24 22:57:36,282 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=StatusLogger
2017-04-24 22:57:36,287 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=ContextSelector
2017-04-24 22:57:36,294 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=Loggers,name=
2017-04-24 22:57:36,296 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=Appenders,name=Console
2017-04-24 22:57:36,301 main DEBUG Reconfiguration complete for context[name=18b4aac2] at URI D:\ProjectStation\shopbase\target\classes\log4j2.xml (org.apache.logging.log4j.core.LoggerContext@6356695f) with optional ClassLoader: null
2017-04-24 22:57:36,301 main DEBUG Shutdown hook enabled. Registering a new one.
2017-04-24 22:57:36,303 main DEBUG LoggerContext[name=18b4aac2, org.apache.logging.log4j.core.LoggerContext@6356695f] started OK.
22:57:36.312 [main] FATAL  - fatal level
2017-04-24 22:57:36,315 pool-1-thread-1 DEBUG Stopping LoggerContext[name=18b4aac2, org.apache.logging.log4j.core.LoggerContext@6356695f]
2017-04-24 22:57:36,315 pool-1-thread-1 DEBUG Stopping LoggerContext[name=18b4aac2, org.apache.logging.log4j.core.LoggerContext@6356695f]...
2017-04-24 22:57:36,319 pool-1-thread-1 DEBUG Shutting down OutputStreamManager SYSTEM_OUT.false.false
2017-04-24 22:57:36,320 pool-1-thread-1 DEBUG Shut down OutputStreamManager SYSTEM_OUT.false.false, all resources released: true
2017-04-24 22:57:36,320 pool-1-thread-1 DEBUG Appender Console stopped with status true
2017-04-24 22:57:36,321 pool-1-thread-1 DEBUG Stopped XmlConfiguration[location=D:\ProjectStation\shopbase\target\classes\log4j2.xml] OK
2017-04-24 22:57:36,323 pool-1-thread-1 DEBUG Stopped LoggerContext[name=18b4aac2, org.apache.logging.log4j.core.LoggerContext@6356695f] with status true

So, When from trace to debug, from debug to info....to fatal, you will see less and less info, because it depend on below log level

Log Level:

TRACE < DEBUG < INFO < WARN < ERROR < FATAL  

So the same as  <Root level="">

if the level is "info", you can't see  "trace" "debug" but "info" "warn" "error" "fatal":

23:04:29.346 [main] INFO   - info level
23:04:29.348 [main] WARN   - warn level
23:04:29.348 [main] ERROR  - error level
23:04:29.348 [main] FATAL  - fatal level

if the level is "error", you can't see  "trace", "debug", "info", "warn" but "error" "fatal": 

23:04:29.348 [main] ERROR  - error level
23:04:29.348 [main] FATAL  - fatal level
 

1.1.3 <Logger name = "">

java:

package com.lee.test.shop;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

/**
 * Created by kingdelee on 4/24/2017.
 */

public class Base {

    public static void main(String[] args) {
        // TRACE < DEBUG < INFO < WARN < ERROR < FATAL  
        Logger logger = LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);
        logger.trace("trace level");
        logger.debug("debug level");
        logger.info("info level");
        logger.warn("warn level");
        logger.error("error level");
        logger.fatal("fatal level");

        Logger logger2 = LogManager.getLogger(Base.class);
        logger2.trace("trace level");
        logger2.debug("debug level");
        logger2.info("info level");
        logger2.warn("warn level");
        logger2.error("error level");
        logger2.fatal("fatal level");

    }

}

log4j2.xml  

        <Logger name="com.lee.test.shop" level="error">
            <AppenderRef ref="Console"/>
        </Logger>

        <Root level="debug">
            <AppenderRef ref="Console"/>
        </Root>

console:  

23:21:25.021 [main] DEBUG  - debug level
23:21:25.025 [main] INFO   - info level
23:21:25.026 [main] WARN   - warn level
23:21:25.026 [main] ERROR  - error level
23:21:25.026 [main] FATAL  - fatal level

23:34:44.085 [main] ERROR com.lee.test.shop.Base - error level
23:34:44.085 [main] ERROR com.lee.test.shop.Base - error level
23:34:44.085 [main] FATAL com.lee.test.shop.Base - fatal level
23:34:44.085 [main] FATAL com.lee.test.shop.Base - fatal level

  

conclusion:  

1.

Logger logger = LogManager.getLogger(LogManager.ROOT_LOGGER_NAME)

and

<Root level="debug">

define 1-5 line output from "debug" to "fatal"
2.

Logger logger2 = LogManager.getLogger(Base.class)

and

<Logger name="com.lee.test.shop" level="fatal">

define 6-7 line output from "error" to "fatal", because "all Logger extends ROOT", so it output twice "error" and "fatal".


example
java:

 
        Logger logger = LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);
        logger.trace("trace1 level");
        logger.debug("debug1 level");
        logger.info("info1 level");
        logger.warn("warn1 level");
        logger.error("error1 level");
        logger.fatal("fatal1 level");

        Logger logger2 = LogManager.getLogger(Base.class);
        logger2.trace("trace2 level");
        logger2.debug("debug2 level");
        logger2.info("info2 level");
        logger2.warn("warn2 level");
        logger2.error("error2 level");
        logger2.fatal("fatal2 level");


        Logger logger3 = LogManager.getLogger("com.lee.test.shop");
        logger3.trace("trace3 level");
        logger3.debug("debug3 level");
        logger3.info("info3 level");
        logger3.warn("warn3 level");
        logger3.error("error3 level");
        logger3.fatal("fatal3 level");

  log4j2.xml:

        <Logger name="com.lee.test.shop.Base" level="warn">
            <AppenderRef ref="Console"/>
        </Logger>

        <Logger name="com.lee.test.shop" level="error">
            <AppenderRef ref="Console"/>
        </Logger>

        <Root level="debug">
            <AppenderRef ref="Console"/>
        </Root>

  console:

23:46:40.895 [main] DEBUG  - debug1 level
23:46:40.897 [main] INFO   - info1 level
23:46:40.897 [main] WARN   - warn1 level
23:46:40.897 [main] ERROR  - error1 level
23:46:40.897 [main] FATAL  - fatal1 level
23:46:40.898 [main] WARN  com.lee.test.shop.Base - warn2 level
23:46:40.898 [main] WARN  com.lee.test.shop.Base - warn2 level
23:46:40.898 [main] WARN  com.lee.test.shop.Base - warn2 level
23:46:40.898 [main] ERROR com.lee.test.shop.Base - error2 level
23:46:40.898 [main] ERROR com.lee.test.shop.Base - error2 level
23:46:40.898 [main] ERROR com.lee.test.shop.Base - error2 level
23:46:40.898 [main] FATAL com.lee.test.shop.Base - fatal2 level
23:46:40.898 [main] FATAL com.lee.test.shop.Base - fatal2 level
23:46:40.898 [main] FATAL com.lee.test.shop.Base - fatal2 level
23:46:40.900 [main] ERROR com.lee.test.shop - error3 level
23:46:40.900 [main] ERROR com.lee.test.shop - error3 level
23:46:40.900 [main] FATAL com.lee.test.shop - fatal3 level
23:46:40.900 [main] FATAL com.lee.test.shop - fatal3 level

 conclusion: 

"com.lee.test.shop.Base" extends "com.lee.test.shop" extends "ROOT", so it will output thrice "warn2"...

"com.lee.test.shop" extends "ROOT", so it will output twice "error3"

"ROOT" output once "debug"

 1.1.4 additivity="false"

 if you don't want "error3" output twice that make "com.lee.test.shop" doesn't extends "ROOT", add additivity = false;

<Logger name="com.lee.test.shop" level="error" additivity="false">
            <AppenderRef ref="Console"/>
        </Logger>

you will see error3 only output once:

00:04:03.659 [main] DEBUG  - debug1 level
00:04:03.662 [main] INFO   - info1 level
00:04:03.662 [main] WARN   - warn1 level
00:04:03.662 [main] ERROR  - error1 level
00:04:03.662 [main] FATAL  - fatal1 level
00:04:03.663 [main] WARN  com.lee.test.shop.Base - warn2 level
00:04:03.663 [main] WARN  com.lee.test.shop.Base - warn2 level
00:04:03.663 [main] ERROR com.lee.test.shop.Base - error2 level
00:04:03.663 [main] ERROR com.lee.test.shop.Base - error2 level
00:04:03.663 [main] FATAL com.lee.test.shop.Base - fatal2 level
00:04:03.663 [main] FATAL com.lee.test.shop.Base - fatal2 level
00:04:03.664 [main] ERROR com.lee.test.shop - error3 level
00:04:03.664 [main] FATAL com.lee.test.shop - fatal3 level

 1.1.4 diy a <Logger name = "sb">

add to java:

Logger logger4 = LogManager.getLogger("sb");
        logger4.trace("trace4 level");
        logger4.debug("debug4 level");
        logger4.info("info4 level");
        logger4.warn("warn4 level");
        logger4.error("error4 level");
        logger4.fatal("fatal4 level"); 

add to log4j2.xml:

<Logger name="sb" level="error" >
            <AppenderRef ref="Console"/>
        </Logger>

console: 

00:07:30.764 [main] DEBUG  - debug1 level
00:07:30.767 [main] INFO   - info1 level
00:07:30.767 [main] WARN   - warn1 level
00:07:30.767 [main] ERROR  - error1 level
00:07:30.767 [main] FATAL  - fatal1 level
00:07:30.767 [main] WARN  com.lee.test.shop.Base - warn2 level
00:07:30.767 [main] WARN  com.lee.test.shop.Base - warn2 level
00:07:30.767 [main] ERROR com.lee.test.shop.Base - error2 level
00:07:30.767 [main] ERROR com.lee.test.shop.Base - error2 level
00:07:30.768 [main] FATAL com.lee.test.shop.Base - fatal2 level
00:07:30.768 [main] FATAL com.lee.test.shop.Base - fatal2 level
00:07:30.769 [main] ERROR com.lee.test.shop - error3 level
00:07:30.769 [main] FATAL com.lee.test.shop - fatal3 level
00:07:30.769 [main] ERROR sb - error4 level
00:07:30.769 [main] ERROR sb - error4 level
00:07:30.769 [main] FATAL sb - fatal4 level
00:07:30.769 [main] FATAL sb - fatal4 level

conclusion:  

"diy name" extends "ROOT", independent of other logger.

1.1.5 monitorInterval

 This is very useful and important when the project deploy online, it will auto afresh read the log4j2.xml at intervals of xxxx secends, it will help you modify the level "debug" or "error" when you want to find something wrong online.

<Configuration status="WARN" monitorInterval="300">  

1.1.6 <Console ...> 

In <appenders>, general make output to Console

<ThresholdFilter>, control filter condition, onMatch accept, onMisMatch deny.

<PatternLayout>, output format.

example:

<appenders>

<Console name="Console" target="SYSTEM_OUT">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
            <!--这个都知道是输出日志的格式-->
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </Console>


</appenders>

<loggers>
        <!--建立一个默认的root的logger-->
        <root level="trace">
            <appender-ref ref="Console"/>
        </root>
    </loggers>

1.1.7 <File...>   

In <appenders>, general make output to File

<PatternLayout>, output format.

In <File>, <bufferedIO="true" bufferSize="512KB"> will make the log write in cache then write in File.

<!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用-->
        <File name="log" fileName="log/test.log" append="false" bufferedIO="true" bufferSize="512KB" >
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </File>

        <root level="trace">
            <appender-ref ref="log"/>
        </root>

  

 1.1.18  <RollingFile...>  

In <appenders>, general make output to File by Date and capacity.

<!--这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<RollingFile name="RollingFile" fileName="logs/app.log"
             filePattern="log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
    <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
    <SizeBasedTriggeringPolicy size="50MB"/>
</RollingFile>

<root level="trace">
       <appender-ref ref="RollingFile"/>
</root>

  

1.1.19 simple demo  

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="error">
    <!--先定义所有的appender-->
    <appenders>
        <!--这个输出控制台的配置-->
        <Console name="Console" target="SYSTEM_OUT">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <!--这个都知道是输出日志的格式-->
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </Console>
        <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用-->
        <File name="log" fileName="log/test.log" append="false">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </File>
        <!--这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
        <RollingFile name="RollingFile" fileName="logs/app.log"
                     filePattern="log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
            <SizeBasedTriggeringPolicy size="50MB"/>
        </RollingFile>
    </appenders>
    <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
    <loggers>
        <!--建立一个默认的root的logger-->
        <root level="trace">
            <appender-ref ref="log"/>
            <appender-ref ref="RollingFile"/>
            <appender-ref ref="Console"/>
        </root>
    </loggers>
</configuration>

1.1.20 <Properties>

Properties Like a static variable set. 

you can write the file output path visible like:

<Appenders>
    <File name="MyFile" fileName="target/test.log" append="false">
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </File>
</Appenders>

  

you can also use invisible varible by properties like:

<Properties>
        <Property name="filename">target/test.log</Property>
    </Properties>
<Appenders>
    <File name="MyFile" fileName="${filename}" append="false">
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </File>
</Appenders>

  

 1.1.21  Layout

 日志格式化(Layout)
%c 类全名
%d 时间
%f 类名
%l 位置
%m 信息
%n 换行
%p 级别
%r 耗时
%t 线程名

a:

%highlight{%d [%t] %-5level: %msg%n%throwable}

b:

%highlight{%d [%t] %-5level: %msg%n%throwable}{FATAL=white, ERROR=red, WARN=blue, INFO=black, DEBUG=green, TRACE=blue}

c:

%d [%t] %highlight{%-5level: %msg%n%throwable}

d:

%style{%d [%t]}{black} %highlight{%-5level: %msg%n%throwable}

e:

%highlight{%d [%t] %-5level: %msg%n%throwable}{STYLE=Logback}

f:

%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n

g:

%style{%d{ISO8601}}{black} %style{[%t]}{blue} %style{%-5level:}{yellow} %style{%msg%n%throwable}{green}

h:

%d %highlight{%p} %style{%logger}{bright,cyan} %C{1.} %msg%n

i:

%black{%d{ISO8601}} %blue{[%t]} %yellow{%-5level:} %green{%msg%n%throwable}

My Love 1:

%black{%d{yyyy-MM-dd HH:mm:ss,SSS}} %blue{[%t]} %style{%logger}{bright,cyan} %highlight{%-5level:}{FATAL=magenta, ERROR=red, WARN=blue, INFO=black, DEBUG=white, TRACE=blue} %green{%msg%n%throwable}

My Love 2:

%black{%d{DEFAULT}} %blue{[%t]} %style{%logger}{bright,cyan} %highlight{%-5level:}{FATAL=magenta, ERROR=red, WARN=blue, INFO=black, DEBUG=white, TRACE=blue} %style{%msg%n%throwable}{bright,green}

  

           

 1.1.22.1  Filter ThreasholdFilter

<ThresholdFilter> is flexible filter, it will make level between A and B.

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" >
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
            <Filters>
                <!--
                    trace > .... > fatal
                    when the root trace level go to warn level, onMatch deny means it will DENY those are less then warn 
                -->
                <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL" />
                <!--                    
                    when the root trace level go to trace level, onMatch ACCEPT means it will ACCEPT those are less then trace  
                -->
                <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
                <!-- so, they means   trace >= level > warn-->
                
            </Filters>
        </Console>
    </Appenders>

    <Loggers>
        <Root level="trace">
            <AppenderRef ref="Console" />
        </Root>
    </Loggers>
</Configuration>

 

output:

23:38:56.974 [main] TRACE com.lee.test.shop.Test - trace level
23:38:56.976 [main] DEBUG com.lee.test.shop.Test - debug level
23:38:56.977 [main] INFO  com.lee.test.shop.Test - info level

  1.1.22.2  Filter MarkerFilter

 Java:

package com.test.log.simple;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.MarkerManager;
import org.junit.Test;

public class Log {
    public static void trace(Object value) {
        Object[] caller = getCallerInfo();
        LogManager.getLogger((Class<?>) caller[0]).trace(MarkerManager.getMarker("trace_marker"), caller[1] + ": " + value);
    }


    public static void debug(Object value) {
        Object[] caller = getCallerInfo();
        LogManager.getLogger((Class<?>) caller[0]).debug(MarkerManager.getMarker("debug_marker"), caller[1] + ": " + value);
    }


    public static void info(Object value) {
        Object[] caller = getCallerInfo();
        LogManager.getLogger((Class<?>) caller[0]).info(MarkerManager.getMarker("info_marker"), caller[1] + ": " + value);
    }


    public static void warn(Object value) {
        Object[] caller = getCallerInfo();
        LogManager.getLogger((Class<?>) caller[0]).warn(MarkerManager.getMarker("warn_marker"), caller[1] + ": " + value);
    }


    public static void error(Object value) {
        Object[] caller = getCallerInfo();
        LogManager.getLogger((Class<?>) caller[0]).error(MarkerManager.getMarker("error_marker"), caller[1] + ":" + value);
    }


    public static void fatal(Object value) {
        Object[] caller = getCallerInfo();
        LogManager.getLogger((Class<?>) caller[0])
                .fatal(MarkerManager.getMarker("fatal_marker"),
                        caller[1] + ": " + value);
    }


    protected static Object[] getCallerInfo() {
        Object[] ret = new Object[2];
        try {
            StackTraceElement[] stack = new Throwable().getStackTrace();
            StackTraceElement ste = stack[2];
            ret[0] = Class.forName(ste.getClassName());
            ret[1] = ste.getMethodName();
        } catch (Exception localException) {
        }
        return ret;
    }

    @Test
    public void t1(){
        Log.trace("your trace info");
        Log.debug("your debug info");
        Log.info("your info info");
        Log.warn("your warn info");
        Log.error("your error info");
        Log.fatal("your fatal info");
    }
}

  

log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="info" name="XMLConfigTest" packages="com.test.log.simple">
   
    <Appenders>
        <Console name="trace_stdout" target="SYSTEM_OUT">
            <MarkerFilter marker="trace_marker" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout>
                <Pattern>%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n %m MDC%X%n</Pattern>
            </PatternLayout>
        </Console>

        <Console name="debug_stdout" target="SYSTEM_OUT">
            <MarkerFilter marker="debug_marker" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout>
                <Pattern>%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n %m MDC%X%n</Pattern>
            </PatternLayout>
        </Console>
        <Console name="info_stdout" target="SYSTEM_OUT">
            <MarkerFilter marker="info_marker" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout>
                <Pattern>%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n %m MDC%X%n</Pattern>
            </PatternLayout>
        </Console>
        <Console name="warn_stdout" target="SYSTEM_OUT">
            <MarkerFilter marker="warn_marker" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout>
                <Pattern>%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n %m MDC%X%n</Pattern>
            </PatternLayout>
        </Console>
        <Console name="error_stdout" target="SYSTEM_OUT">
            <MarkerFilter marker="error_marker" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout>
                <Pattern>%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n %m MDC%X%n</Pattern>
            </PatternLayout>
        </Console>
        <Console name="fatal_stdout" target="SYSTEM_OUT">
            <MarkerFilter marker="fatal_marker" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout>
                <Pattern>%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n %m MDC%X%n</Pattern>
            </PatternLayout>
        </Console>
    </Appenders>

    <Loggers>

        <Root level="info">
            <AppenderRef ref="trace_stdout" level="trace"/>
            <AppenderRef ref="debug_stdout" level="debug"/>
            <AppenderRef ref="info_stdout" level="info"/>
            <AppenderRef ref="warn_stdout" level="warn"/>
            <AppenderRef ref="error_stdout" level="error"/>
            <AppenderRef ref="fatal_stdout" level="fatal"/>
        </Root>
    </Loggers>

</Configuration>

 

so, the point is MarkerManager.getMarker() will get from MarkerFilter's marker, to be a signle Logger.

13:14:55.742 [main] INFO  com.test.log.simple.Log - t1: your info info
 t1: your info info MDC{}
13:14:55.746 [main] WARN  com.test.log.simple.Log - t1: your warn info
 t1: your warn info MDC{}
13:14:55.747 [main] ERROR com.test.log.simple.Log - t1:your error info
 t1:your error info MDC{}
13:14:55.747 [main] FATAL com.test.log.simple.Log - t1: your fatal info
 t1: your fatal info MDC{}

  

 1.1.23.1 AsyncAppender 


different thread output different file

log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="OFF">
    <Appenders>
        <Routing name="Routing">
            <Routes pattern="$${ctx:ROUTINGKEY}">
                <!-- This route is chosen if ThreadContext has value 'special' for key ROUTINGKEY. -->
                <Route key="special">
                    <RollingFile name="Rolling-${ctx:ROUTINGKEY}" fileName="logs/special-${ctx:ROUTINGKEY}.log"
                                 filePattern="./logs/${date:yyyy-MM}/${ctx:ROUTINGKEY}-special-%d{yyyy-MM-dd}-%i.log.gz">
                        <PatternLayout>
                            <Pattern>%d{ISO8601} [%t] %p %c{3} - %m%n</Pattern>
                        </PatternLayout>
                        <Policies>
                            <TimeBasedTriggeringPolicy interval="6" modulate="true"/>
                            <SizeBasedTriggeringPolicy size="10 MB"/>
                        </Policies>
                    </RollingFile>
                </Route>
                <!-- This route is chosen if ThreadContext has no value for key ROUTINGKEY. -->
                <Route key="$${ctx:ROUTINGKEY}">
                    <RollingFile name="Rolling-default" fileName="logs/default.log"
                                 filePattern="./logs/${date:yyyy-MM}/default-%d{yyyy-MM-dd}-%i.log.gz">
                        <PatternLayout>
                            <pattern>%d{ISO8601} [%t] %p %c{3} - %m%n</pattern>
                        </PatternLayout>
                        <Policies>
                            <TimeBasedTriggeringPolicy interval="6" modulate="true"/>
                            <SizeBasedTriggeringPolicy size="10 MB"/>
                        </Policies>
                    </RollingFile>
                </Route>
                <!-- This route is chosen if ThreadContext has a value for ROUTINGKEY
                     (other than the value 'special' which had its own route above).
                     The value dynamically determines the name of the log file. -->
                <Route>
                    <RollingFile name="Rolling-${ctx:ROUTINGKEY}" fileName="logs/other-${ctx:ROUTINGKEY}.log"
                                 filePattern="./logs/${date:yyyy-MM}/${ctx:ROUTINGKEY}-other-%d{yyyy-MM-dd}-%i.log.gz">
                        <PatternLayout>
                            <pattern>%d{ISO8601} [%t] %p %c{3} - %m%n</pattern>
                        </PatternLayout>
                        <Policies>
                            <TimeBasedTriggeringPolicy interval="6" modulate="true"/>
                            <SizeBasedTriggeringPolicy size="10 MB"/>
                        </Policies>
                    </RollingFile>
                </Route>
            </Routes>
        </Routing>
        <!--很直白,Console指定了结果输出到控制台-->
        <Console name="ConsolePrint" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy.MM.dd HH:mm:ss z} %t %-5level %class{36} %L %M - %msg%xEx%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <!-- 级别顺序(低到高):TRACE < DEBUG < INFO < WARN < ERROR < FATAL -->
        <Root level="DEBUG" includeLocation="true">
            <!--AppenderRef中的ref值必须是在前面定义的appenders-->
            <AppenderRef ref="Routing"/>
            <AppenderRef ref="ConsolePrint"/>
        </Root>
    </Loggers>
</Configuration>

 java:

package com.test.log.simple;

import lombok.extern.log4j.Log4j2;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.ThreadContext;

@Log4j2
public class TestLog {


    public static void main(String[] args) {

        Logger log = LogManager.getLogger(LogTest.class);

        new Thread(() -> {
            ThreadContext.put("ROUTINGKEY", Thread.currentThread().getName());
            log.info("info");
            log.debug("debug");
            log.error("error");
            ThreadContext.remove("ROUTINGKEY");
        }).start();

        new Thread(() -> {
            ThreadContext.put("ROUTINGKEY", Thread.currentThread().getName());
            log.info("info");
            log.debug("debug");
            log.error("error");
            ThreadContext.remove("ROUTINGKEY");
        }).start();

        new Thread(() -> {
            ThreadContext.put("tttttttttttt1", Thread.currentThread().getName());
            log.info("info");
            log.debug("debug");
            log.error("error");
            ThreadContext.remove("tttttttttttt1");
        }).start();

        new Thread(() -> {
            log.info("info");
            log.debug("debug");
            log.error("error");
        }).start();

    }
}

other-Thread-1.log:

2017-05-07T00:12:52,744 [Thread-1] INFO log.simple.LogTest - info
2017-05-07T00:12:52,772 [Thread-1] DEBUG log.simple.LogTest - debug
2017-05-07T00:12:52,781 [Thread-1] ERROR log.simple.LogTest - error

other-Thread-2.log:  

2017-05-07T00:12:52,744 [Thread-2] INFO log.simple.LogTest - info
2017-05-07T00:12:52,782 [Thread-2] DEBUG log.simple.LogTest - debug
2017-05-07T00:12:52,784 [Thread-2] ERROR log.simple.LogTest - error

console:

2017.05.07 00:12:52 CST Thread-1 INFO  com.test.log.simple.TestLog 18 lambda$main$0 - info
2017.05.07 00:12:52 CST Thread-4 INFO  com.test.log.simple.TestLog 41 lambda$main$3 - info
2017.05.07 00:12:52 CST Thread-3 INFO  com.test.log.simple.TestLog 34 lambda$main$2 - info
2017.05.07 00:12:52 CST Thread-1 DEBUG com.test.log.simple.TestLog 19 lambda$main$0 - debug
2017.05.07 00:12:52 CST Thread-3 DEBUG com.test.log.simple.TestLog 35 lambda$main$2 - debug
2017.05.07 00:12:52 CST Thread-4 DEBUG com.test.log.simple.TestLog 42 lambda$main$3 - debug
2017.05.07 00:12:52 CST Thread-1 ERROR com.test.log.simple.TestLog 20 lambda$main$0 - error
2017.05.07 00:12:52 CST Thread-4 ERROR com.test.log.simple.TestLog 43 lambda$main$3 - error
2017.05.07 00:12:52 CST Thread-3 ERROR com.test.log.simple.TestLog 36 lambda$main$2 - error
2017.05.07 00:12:52 CST Thread-2 INFO  com.test.log.simple.TestLog 26 lambda$main$1 - info
2017.05.07 00:12:52 CST Thread-2 DEBUG com.test.log.simple.TestLog 27 lambda$main$1 - debug
2017.05.07 00:12:52 CST Thread-2 ERROR com.test.log.simple.TestLog 28 lambda$main$1 - error
dependencies {
    compile 'org.projectlombok:lombok:1.16.10'
    compile 'org.apache.logging.log4j:log4j-core:2.6'
    compile 'org.apache.logging.log4j:log4j-api:2.6'
}

  

1.1.23.2 AsyncAppender  strLookup

log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="OFF">
    <Appenders>
        <Routing name="Routing">
            <Routes pattern="$${thread:threadName}">
                <Route>
                    <RollingFile name="logFile-${thread:threadName}"
                                 fileName="logs/concurrent-${thread:threadName}.log"
                                 filePattern="logs/concurrent-${thread:threadName}-%d{MM-dd-yyyy}-%i.log">
                        <PatternLayout pattern="%d %-5p [%t] %C{2} - %m%n"/>
                        <Policies>
                            <SizeBasedTriggeringPolicy size="50 MB"/>
                        </Policies>
                        <DefaultRolloverStrategy max="100"/>
                    </RollingFile>
                </Route>
            </Routes>
        </Routing>
        <Async name="async" bufferSize="1000" includeLocation="true">
            <AppenderRef ref="Routing"/>
        </Async>
        <!--很直白,Console指定了结果输出到控制台-->
        <Console name="ConsolePrint" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy.MM.dd HH:mm:ss z} %t %-5level %class{36} %L %M - %msg%xEx%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="info" includeLocation="true">
            <AppenderRef ref="async"/>
            <AppenderRef ref="ConsolePrint"/>
        </Root>
    </Loggers>
</Configuration>

java:

package com.test.log.simple;

import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.lookup.StrLookup;

@Plugin(name = "thread", category = StrLookup.CATEGORY)
public class ThreadLookup implements StrLookup {
    @Override
    public String lookup(String key) {
        return Thread.currentThread().getName();
    }

    @Override
    public String lookup(LogEvent event, String key) {
        return event.getThreadName() == null ? Thread.currentThread().getName()
                : event.getThreadName();
    }

}
package com.test.log.simple;

import lombok.extern.log4j.Log4j2;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.ThreadContext;

@Log4j2
public class TestLog2 {


    public static void main(String[] args) {

        Logger log = LogManager.getLogger(LogTest.class);

        new Thread(() -> {
            log.info("info");
            log.debug("debug");
            log.error("error");
        }).start();

        new Thread(() -> {
            log.info("info");
            log.debug("debug");
            log.error("error");
        }).start();

        new Thread(() -> {
            log.info("info");
            log.debug("debug");
            log.error("error");
        }).start();

        new Thread(() -> {
            log.info("info");
            log.debug("debug");
            log.error("error");
        }).start();

    }
}

concurrent-Thread-1.log:

2017-05-07 00:19:42,649 INFO  [Thread-1] simple.TestLog2 - info
2017-05-07 00:19:42,656 ERROR [Thread-1] simple.TestLog2 - error

concurrent-Thread-2.log:

2017-05-07 00:19:42,649 INFO  [Thread-2] simple.TestLog2 - info
2017-05-07 00:19:42,656 ERROR [Thread-2] simple.TestLog2 - error

concurrent-Thread-3.log:  

2017-05-07 00:19:42,649 INFO  [Thread-3] simple.TestLog2 - info
2017-05-07 00:19:42,656 ERROR [Thread-3] simple.TestLog2 - error  

concurrent-Thread-4.log:  

2017-05-07 00:19:42,649 INFO  [Thread-4] simple.TestLog2 - info
2017-05-07 00:19:42,656 ERROR [Thread-4] simple.TestLog2 - error

1.1.23.3 AsyncAppender  make all appender to asyncAppender


1.add log4j2.component.properties to src/main/resources

2.

dependencies {
    compile 'org.projectlombok:lombok:1.16.10'
    compile 'org.apache.logging.log4j:log4j-core:2.6'
    compile 'org.apache.logging.log4j:log4j-api:2.6'
    compile 'com.lmax:disruptor:3.3.6'
}

  

1.1.23.4 AsyncAppender   different level to different file

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="OFF">
    <Properties>
        <Property name="logFilePath">logs</Property>
        <Property name="logFileName">testLog</Property>
    </Properties>
    <Appenders>
        <!--很直白,Console指定了结果输出到控制台-->
        <Console name="ConsolePrint" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy.MM.dd HH:mm:ss z} %t %-5level %class{36} %L %M - %msg%xEx%n"/>
        </Console>
        <!--<File>输出结果到指定文件</File>-->
        <!--<RollingFile>同样输出结果到指定文件,但是使用buffer,速度会快点</RollingFile>-->
        <!--filePattern:表示当日志到达指定的大小或者时间,产生新日志时,旧日志的命名路径。-->
        <!--PatternLayout:和log4j一样,指定输出日志的格式,append表示是否追加内容,值默认为true-->
        <RollingFile name="RollingFileDebug" fileName="${logFilePath}/${logFileName}-debug.log"
                     filePattern="${logFilePath}/$${date:yyyy-MM}/${logFileName}-%d{yyyy-MM-dd}_%i.log.gz">
            <PatternLayout pattern="%d{yyyy.MM.dd HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
            <!--注意,如果有多个ThresholdFilter,那么Filters标签是必须的-->
            <Filters>
                <!--首先需要过滤不符合的日志级别,把不需要的首先DENY掉,然后在ACCEPT需要的日志级别,次序不能颠倒-->
                <!--INFO及以上级别拒绝输出-->
                <ThresholdFilter level="INFO" onMatch="DENY" onMismatch="NEUTRAL"/>
                <!--只输出DEBUG级别信息-->
                <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            <Policies>
                <!--时间策略,每隔24小时产生新的日志文件-->
                <TimeBasedTriggeringPolicy/>
                <!--大小策略,每到30M时产生新的日志文件-->
                <SizeBasedTriggeringPolicy size="30MB"/>
            </Policies>
        </RollingFile>

        <RollingFile name="RollingFileInfo" fileName="${logFilePath}/${logFileName}-info.log"
                     filePattern="${logFilePath}/$${date:yyyy-MM}/${logFileName}-%d{yyyy-MM-dd}_%i.log.gz">
            <Filters>
                <!--onMatch:Action to take when the filter matches. The default value is NEUTRAL-->
                <!--onMismatch:    Action to take when the filter does not match. The default value is DENY-->
                <!--级别在ERROR之上的都拒绝输出-->
                <!--在组合过滤器中,接受使用NEUTRAL(中立),被第一个过滤器接受的日志信息,会继续用后面的过滤器进行过滤,只有符合所有过滤器条件的日志信息,才会被最终写入日志文件-->
                <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            <PatternLayout pattern="%d{yyyy.MM.dd HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="30MB"/>
            </Policies>
        </RollingFile>

        <RollingFile name="RollingFileError" fileName="${logFilePath}/${logFileName}-error.log"
                     filePattern="${logFilePath}/$${date:yyyy-MM}/${logFileName}-%d{yyyy-MM-dd}_%i.log.gz">
            <Filters>
                <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            <PatternLayout pattern="%d{yyyy.MM.dd HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="30MB"/>
            </Policies>
        </RollingFile>
    </Appenders>
    <Loggers>
        <!--logger用于定义log的level以及所采用的appender,如果无需自定义,可以使用root解决,root标签是log的默认输出形式-->
        <!-- 级别顺序(低到高):TRACE < DEBUG < INFO < WARN < ERROR < FATAL -->
        <Root level="DEBUG" includeLocation="true">
            <!-- 只要是级别比ERROR高的,包括ERROR就输出到控制台 -->
            <!--appender-ref中的值必须是在前面定义的appenders-->
            <Appender-ref level="ERROR" ref="ConsolePrint"/>
            <Appender-ref ref="RollingFileDebug"/>
            <Appender-ref ref="RollingFileInfo"/>
            <Appender-ref ref="RollingFileError"/>
        </Root>
    </Loggers>
</Configuration>

testLog-error.log:

2017.05.07 00:26:23 CST ERROR com.test.log.simple.TestLog2 25 lambda$main$1 - error
2017.05.07 00:26:23 CST ERROR com.test.log.simple.TestLog2 31 lambda$main$2 - error
2017.05.07 00:26:23 CST ERROR com.test.log.simple.TestLog2 19 lambda$main$0 - error
2017.05.07 00:26:23 CST ERROR com.test.log.simple.TestLog2 37 lambda$main$3 - error

  

testLog-debug.log:

2017.05.07 00:26:23 CST DEBUG com.test.log.simple.TestLog2 24 lambda$main$1 - debug
2017.05.07 00:26:23 CST DEBUG com.test.log.simple.TestLog2 18 lambda$main$0 - debug
2017.05.07 00:26:23 CST DEBUG com.test.log.simple.TestLog2 30 lambda$main$2 - debug
2017.05.07 00:26:23 CST DEBUG com.test.log.simple.TestLog2 36 lambda$main$3 - debug

  

testLog-info.log: 

2017.05.07 00:26:23 CST INFO  com.test.log.simple.TestLog2 29 lambda$main$2 - info
2017.05.07 00:26:23 CST INFO  com.test.log.simple.TestLog2 35 lambda$main$3 - info
2017.05.07 00:26:23 CST INFO  com.test.log.simple.TestLog2 23 lambda$main$1 - info
2017.05.07 00:26:23 CST INFO  com.test.log.simple.TestLog2 17 lambda$main$0 - info

1.1.23.4 AsyncAppender  different thread different level

log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!--status的含义为是否记录log4j2本身的event信息,默认是OFF-->
<Configuration status="OFF">
    <Properties>
        <!--自定义一些常量,之后使用${变量名}引用-->
        <Property name="logFilePath">logs</Property>
        <Property name="logFileName">testLog</Property>
    </Properties>
    <Appenders>
        <!--很直白,Console指定了结果输出到控制台-->
        <Console name="ConsolePrint" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy.MM.dd HH:mm:ss z} %t %-5level %class{36} %L %M - %msg%xEx%n"/>
        </Console>
        <!--<File>输出结果到指定文件</File>-->
        <!--<RollingFile>同样输出结果到指定文件,但是使用buffer,速度会快点</RollingFile>-->
        <!--filePattern:表示当日志到达指定的大小或者时间,产生新日志时,旧日志的命名路径。-->
        <!--PatternLayout:和log4j一样,指定输出日志的格式,append表示是否追加内容,值默认为true-->
        <Routing name="RollingFileDebug_${thread:threadName}">
            <Routes pattern="$${thread:threadName}">
                <Route>
                    <RollingFile name="RollingFileDebug_${thread:threadName}"
                                 fileName="${logFilePath}/${logFileName}_${thread:threadName}_debug.log"
                                 filePattern="${logFilePath}/$${date:yyyy-MM}/${logFileName}-%d{yyyy-MM-dd}-${thread:threadName}-debug_%i.log.gz">
                        <PatternLayout pattern="%d{yyyy.MM.dd HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
                        <!--注意,如果有多个ThresholdFilter,那么Filters标签是必须的-->
                        <Filters>
                            <!--首先需要过滤不符合的日志级别,把不需要的首先DENY掉,然后在ACCEPT需要的日志级别,次序不能颠倒-->
                            <!--INFO及以上级别拒绝输出-->
                            <ThresholdFilter level="INFO" onMatch="DENY" onMismatch="NEUTRAL"/>
                            <!--只输出DEBUG级别信息-->
                            <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
                        </Filters>
                        <Policies>
                            <!--时间策略,每隔24小时产生新的日志文件-->
                            <TimeBasedTriggeringPolicy/>
                            <!--大小策略,每到30M时产生新的日志文件-->
                            <SizeBasedTriggeringPolicy size="30MB"/>
                        </Policies>
                    </RollingFile>
                </Route>
            </Routes>
        </Routing>

        <Routing name="RollingFileInfo_${thread:threadName}">
            <Routes pattern="$${thread:threadName}">
                <Route>
                    <RollingFile name="RollingFileInfo_${thread:threadName}"
                                 fileName="${logFilePath}/${logFileName}_${thread:threadName}_info.log"
                                 filePattern="${logFilePath}/$${date:yyyy-MM}/${logFileName}-%d{yyyy-MM-dd}-${thread:threadName}-info_%i.log.gz">
                        <Filters>
                            <!--onMatch: Action to take when the filter matches. The default value is NEUTRAL-->
                            <!--onMismatch:    Action to take when the filter does not match. The default value is DENY-->
                            <!--级别在ERROR之上的都拒绝输出-->
                            <!--在组合过滤器中,接受使用NEUTRAL(中立),被第一个过滤器接受的日志信息,会继续用后面的过滤器进行过滤,只有符合所有过滤器条件的日志信息,才会被最终写入日志文件-->
                            <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/>
                            <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
                        </Filters>
                        <PatternLayout pattern="%d{yyyy.MM.dd HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
                        <Policies>
                            <TimeBasedTriggeringPolicy/>
                            <SizeBasedTriggeringPolicy size="30MB"/>
                        </Policies>
                    </RollingFile>
                </Route>
            </Routes>
        </Routing>

        <Routing name="RollingFileError_${thread:threadName}">
            <Routes pattern="$${thread:threadName}">
                <Route>
                    <RollingFile name="RollingFileError_${thread:threadName}"
                                 fileName="${logFilePath}/${logFileName}_${thread:threadName}_error.log"
                                 filePattern="${logFilePath}/$${date:yyyy-MM}/${logFileName}-%d{yyyy-MM-dd}-${thread:threadName}-error_%i.log.gz">
                        <Filters>
                            <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
                        </Filters>
                        <PatternLayout pattern="%d{yyyy.MM.dd HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
                        <Policies>
                            <TimeBasedTriggeringPolicy/>
                            <SizeBasedTriggeringPolicy size="30MB"/>
                        </Policies>
                    </RollingFile>
                </Route>
            </Routes>
        </Routing>
        <!--bufferSize整数,指定可以排队的events最大数量,如果使用BlockingQueue,这个数字必须是2的幂次-->
        <!--includeLocation默认值是FALSE,如果指定为TRUE,会降低性能,但是推荐设置为TRUE,否则不打印位置行信息-->
        <Async name="async" bufferSize="262144" includeLocation="true">
            <AppenderRef ref="RollingFileDebug_${thread:threadName}"/>
            <AppenderRef ref="RollingFileInfo_${thread:threadName}"/>
            <AppenderRef ref="RollingFileError_${thread:threadName}"/>
            <!-- 只要是级别比ERROR高的,包括ERROR就输出到控制台 -->
            <AppenderRef ref="ConsolePrint" level="ERROR"/>
        </Async>
    </Appenders>
    <Loggers>
        <!--Logger用于定义log的level以及所采用的appender,如果无需自定义,可以使用root解决,root标签是log的默认输出形式-->
        <!-- 级别顺序(低到高):TRACE < DEBUG < INFO < WARN < ERROR < FATAL -->
        <Root level="DEBUG" includeLocation="true">
            <!--AppenderRef中的ref值必须是在前面定义的appenders-->
            <AppenderRef ref="async"/>
        </Root>
    </Loggers>
</Configuration>  

1.1.23.5 AsyncAppender  make all logger Asynchronous

  

static {
    System.setProperty("Log4jContextSelector", "org.apache.logging.log4j.core.async.AsyncLoggerContextSelector");
}

  

1.1.23.6 mix use Synchronous and Asynchronous Loggers

if use <AsyncRoot> or <AsyncLogger>, don't set Log4jContextSelector.

<?xml version="1.0" encoding="UTF-8"?>
<!-- No need to set system property "Log4jContextSelector" to any value
     when using <asyncLogger> or <asyncRoot>. -->
<Configuration status="WARN">
  <Appenders>
    <!-- Async Loggers will auto-flush in batches, so switch off immediateFlush. -->
    <RandomAccessFile name="RandomAccessFile" fileName="asyncWithLocation.log"
              immediateFlush="false" append="false">
      <PatternLayout>
        <Pattern>%d %p %class{1.} [%t] %location %m %ex%n</Pattern>
      </PatternLayout>
    </RandomAccessFile>
  </Appenders>
  <Loggers>
    <!-- pattern layout actually uses location, so we need to include it -->
    <AsyncLogger name="com.foo.Bar" level="trace" includeLocation="true">
      <AppenderRef ref="RandomAccessFile"/>
    </AsyncLogger>
    <Root level="info" includeLocation="true">
      <AppenderRef ref="RandomAccessFile"/>
    </Root>
  </Loggers>
</Configuration>

 2.1.0 How to make log output to Console and File

Java:

Logger logger = LogManager.getLogger(Test.class);
        logger.trace("trace level");
        logger.debug("debug level");
        logger.info("info level");
        logger.warn("warn level");
        logger.error("error level");
        logger.fatal("fatal level");

log4j2.xml

<Configuration status="WARN" monitorInterval="300">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </Console>
        <File name="MyFile" fileName="D:/logs/app.log">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </File>
    </Appenders>
    <Loggers>
        <Logger name="com.lee.test" level="trace" additivity="true">
            <AppenderRef ref="MyFile" />
        </Logger>
        <Root level="error">
            <AppenderRef ref="Console" />
        </Root>
    </Loggers>
</Configuration>

explanation:

Test.class is in "com.lee.test", so it will be excute by Logger "com.lee.test", and additivity is true, so extends Root, Root will excute it again.

Logger ref "MyFile" output File, Root ref "Console" output Console.

 2.1.1 How to output different level to different file

log4j.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="trace" name="baseLogger" monitorInterval="30" packages="com.test">

    <Properties>

        <property name="PatternLayout_Console">%black{%d{DEFAULT}} %blue{[%t]} %style{%logger}{bright,cyan} %highlight{%-5level:}{FATAL=magenta, ERROR=red, WARN=blue, INFO=black, DEBUG=white, TRACE=blue} %style{%msg%n%throwable}{bright,green}</property>
        <property name="PatternLayout_File">%d{DEFAULT} %-5level %class{36} %L %M - %msg%xEx%n</property>

        <property name="fileName_test">logs/test.log</property>

        <property name="fileName_all">logs/all.log</property>
        <property name="fileName_trace">logs/trace.log</property>
        <property name="fileName_debug">logs/debug.log</property>
        <property name="fileName_info">logs/info.log</property>
        <property name="fileName_warn">logs/warn.log</property>
        <property name="fileName_error">logs/warn.log</property>
        <property name="fileName_fatal">logs/fatal.log</property>

        <property name="filePattern_all">logs/$${date:yyyy-MM}/all-%d{MM-dd-yyyy}-%i.log.gz</property>
        <property name="filePattern_trace">logs/$${date:yyyy-MM}/trace-%d{MM-dd-yyyy}-%i.log.gz</property>
        <property name="filePattern_debug">logs/$${date:yyyy-MM}/debug-%d{MM-dd-yyyy}-%i.log.gz</property>
        <property name="filePattern_info">logs/$${date:yyyy-MM}/info-%d{MM-dd-yyyy}-%i.log.gz</property>
        <property name="filePattern_warn">logs/$${date:yyyy-MM}/warn-%d{MM-dd-yyyy}-%i.log.gz</property>
        <property name="filePattern_error">logs/$${date:yyyy-MM}/error-%d{MM-dd-yyyy}-%i.log.gz</property>
        <property name="filePattern_fatal">logs/$${date:yyyy-MM}/fatal-%d{MM-dd-yyyy}-%i.log.gz</property>

        <property name="SizeBasedTriggeringPolicy_size">50MB</property>
        <property name="DefaultRolloverStrategy_max">20</property>

    </Properties>

    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <!--<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>-->
            <PatternLayout pattern="${PatternLayout_Console}"/>
        </Console>

        <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用-->
        <File name="TestFile" fileName="${fileName_test}" append="false">
            <PatternLayout pattern="${PatternLayout_File}"/>
        </File>

        <!-- 这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
        <RollingFile name="AllFile" fileName="${fileName_all}" filePattern="${filePattern_all}">
            <PatternLayout pattern="${PatternLayout_File}"/>
            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
            <DefaultRolloverStrategy max="${DefaultRolloverStrategy_max}"/>
            <Policies>
                <!--这个配置需要和filePattern结合使用,注意filePattern中配置的文件重命名规则是${FILE_NAME}-%d{yyyy-MM-dd HH-mm}-%i,最小的时间粒度是mm,即分钟,TimeBasedTriggeringPolicy指定的size是1,结合起来就是每1分钟生成一个新文件。如果改成%d{yyyy-MM-dd HH},最小粒度为小时,则每一个小时生成一个文件-->
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="${SizeBasedTriggeringPolicy_size}"/>
            </Policies>
        </RollingFile>

        <!-- 这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
        <RollingFile name="TraceFile" fileName="${fileName_trace}" filePattern="${filePattern_trace}">
            <PatternLayout pattern="${PatternLayout_File}"/>
            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
            <DefaultRolloverStrategy max="${DefaultRolloverStrategy_max}"/>
            <Policies>
                <!--这个配置需要和filePattern结合使用,注意filePattern中配置的文件重命名规则是${FILE_NAME}-%d{yyyy-MM-dd HH-mm}-%i,最小的时间粒度是mm,即分钟,TimeBasedTriggeringPolicy指定的size是1,结合起来就是每1分钟生成一个新文件。如果改成%d{yyyy-MM-dd HH},最小粒度为小时,则每一个小时生成一个文件-->
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="${SizeBasedTriggeringPolicy_size}"/>
            </Policies>
            <Filters>
                <ThresholdFilter level="debug" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </RollingFile>

        <RollingFile name="DebugFile" fileName="${fileName_debug}" filePattern="${filePattern_debug}">
            <PatternLayout pattern="${PatternLayout_File}"/>
            <DefaultRolloverStrategy max="${DefaultRolloverStrategy_max}"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="${SizeBasedTriggeringPolicy_size}"/>
            </Policies>
            <Filters>
                <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </RollingFile>

        <RollingFile name="InfoFile" fileName="${fileName_info}" filePattern="${filePattern_info}">
            <PatternLayout pattern="${PatternLayout_File}"/>
            <DefaultRolloverStrategy max="${DefaultRolloverStrategy_max}"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="${SizeBasedTriggeringPolicy_size}"/>
            </Policies>
            <Filters>
                <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </RollingFile>

        <RollingFile name="WarnFile" fileName="${fileName_warn}" filePattern="${filePattern_warn}">
            <PatternLayout pattern="${PatternLayout_File}"/>
            <DefaultRolloverStrategy max="${DefaultRolloverStrategy_max}"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="${SizeBasedTriggeringPolicy_size}"/>
            </Policies>
            <Filters>
                <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </RollingFile>

        <RollingFile name="ErrorFile" fileName="${fileName_error}" filePattern="${filePattern_error}">
            <PatternLayout pattern="${PatternLayout_File}"/>
            <DefaultRolloverStrategy max="${DefaultRolloverStrategy_max}"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="${SizeBasedTriggeringPolicy_size}"/>
            </Policies>
            <Filters>
                <ThresholdFilter level="fatal" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </RollingFile>

        <RollingFile name="FatalFile" fileName="${fileName_fatal}" filePattern="${filePattern_fatal}">
            <PatternLayout pattern="${PatternLayout_File}"/>
            <DefaultRolloverStrategy max="${DefaultRolloverStrategy_max}"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="${SizeBasedTriggeringPolicy_size}"/>
            </Policies>
            <Filters>
                <ThresholdFilter level="fatal" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </RollingFile>


    </Appenders>

    <Loggers>

        <Logger  name="com.test"  additivity="false" level="ALL">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="TestFile"/>
            <AppenderRef ref="AllFile"/>
            <AppenderRef ref="TraceFile"/>
            <AppenderRef ref="DebugFile"/>
            <AppenderRef ref="WarnFile"/>
            <AppenderRef ref="InfoFile"/>
            <AppenderRef ref="WarnFile"/>
            <AppenderRef ref="ErrorFile"/>
            <AppenderRef ref="FatalFile"/>
        </Logger>

        <Root>

        </Root>

    </Loggers>

</Configuration>

  

 Console:

C:\WorkStation\Java\jdk1.8.0_121\bin\java -ea -Didea.test.cyclic.buffer.size=1048576 -javaagent:D:\WorkStation\JetBrains\IntelliJIDEA2017.1\lib\idea_rt.jar=62583:D:\WorkStation\JetBrains\IntelliJIDEA2017.1\bin -Dfile.encoding=UTF-8 -classpath D:\WorkStation\JetBrains\IntelliJIDEA2017.1\lib\idea_rt.jar;D:\WorkStation\JetBrains\IntelliJIDEA2017.1\plugins\junit\lib\junit-rt.jar;C:\WorkStation\Java\jdk1.8.0_121\jre\lib\charsets.jar;C:\WorkStation\Java\jdk1.8.0_121\jre\lib\deploy.jar;C:\WorkStation\Java\jdk1.8.0_121\jre\lib\ext\access-bridge-64.jar;C:\WorkStation\Java\jdk1.8.0_121\jre\lib\ext\cldrdata.jar;C:\WorkStation\Java\jdk1.8.0_121\jre\lib\ext\dnsns.jar;C:\WorkStation\Java\jdk1.8.0_121\jre\lib\ext\jaccess.jar;C:\WorkStation\Java\jdk1.8.0_121\jre\lib\ext\jfxrt.jar;C:\WorkStation\Java\jdk1.8.0_121\jre\lib\ext\localedata.jar;C:\WorkStation\Java\jdk1.8.0_121\jre\lib\ext\nashorn.jar;C:\WorkStation\Java\jdk1.8.0_121\jre\lib\ext\sunec.jar;C:\WorkStation\Java\jdk1.8.0_121\jre\lib\ext\sunjce_provider.jar;C:\WorkStation\Java\jdk1.8.0_121\jre\lib\ext\sunmscapi.jar;C:\WorkStation\Java\jdk1.8.0_121\jre\lib\ext\sunpkcs11.jar;C:\WorkStation\Java\jdk1.8.0_121\jre\lib\ext\zipfs.jar;C:\WorkStation\Java\jdk1.8.0_121\jre\lib\javaws.jar;C:\WorkStation\Java\jdk1.8.0_121\jre\lib\jce.jar;C:\WorkStation\Java\jdk1.8.0_121\jre\lib\jfr.jar;C:\WorkStation\Java\jdk1.8.0_121\jre\lib\jfxswt.jar;C:\WorkStation\Java\jdk1.8.0_121\jre\lib\jsse.jar;C:\WorkStation\Java\jdk1.8.0_121\jre\lib\management-agent.jar;C:\WorkStation\Java\jdk1.8.0_121\jre\lib\plugin.jar;C:\WorkStation\Java\jdk1.8.0_121\jre\lib\resources.jar;C:\WorkStation\Java\jdk1.8.0_121\jre\lib\rt.jar;D:\ProjectStation\shopbase\target\classes;D:\WorkStation\repo\org\apache\logging\log4j\log4j-core\2.8.2\log4j-core-2.8.2.jar;D:\WorkStation\repo\org\apache\logging\log4j\log4j-core\2.8.2\log4j-core-2.8.2-tests.jar;D:\WorkStation\repo\org\apache\logging\log4j\log4j-api\2.8.2\log4j-api-2.8.2.jar;D:\WorkStation\repo\org\projectlombok\lombok\1.16.16\lombok-1.16.16.jar;D:\WorkStation\repo\com\lmax\disruptor\3.3.6\disruptor-3.3.6.jar;D:\WorkStation\repo\junit\junit\4.12\junit-4.12.jar;D:\WorkStation\repo\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;D:\WorkStation\repo\org\springframework\spring-context\4.3.8.RELEASE\spring-context-4.3.8.RELEASE.jar;D:\WorkStation\repo\org\springframework\spring-aop\4.3.8.RELEASE\spring-aop-4.3.8.RELEASE.jar;D:\WorkStation\repo\org\springframework\spring-beans\4.3.8.RELEASE\spring-beans-4.3.8.RELEASE.jar;D:\WorkStation\repo\org\springframework\spring-expression\4.3.8.RELEASE\spring-expression-4.3.8.RELEASE.jar;D:\WorkStation\repo\org\springframework\spring-core\4.3.8.RELEASE\spring-core-4.3.8.RELEASE.jar;D:\WorkStation\repo\commons-logging\commons-logging\1.2\commons-logging-1.2.jar;D:\WorkStation\repo\com\fasterxml\jackson\core\jackson-databind\2.8.8.1\jackson-databind-2.8.8.1.jar;D:\WorkStation\repo\com\fasterxml\jackson\core\jackson-annotations\2.8.0\jackson-annotations-2.8.0.jar;D:\WorkStation\repo\com\fasterxml\jackson\core\jackson-core\2.8.8\jackson-core-2.8.8.jar com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 com.test.log.simple.LogTest,t1
2017-05-06 23:28:31,414 main DEBUG Initializing configuration XmlConfiguration[location=D:\ProjectStation\shopbase\target\classes\log4j2.xml]
2017-05-06 23:28:31,423 main DEBUG Installed script engines
2017-05-06 23:28:31,939 main DEBUG Oracle Nashorn Version: 1.8.0_121, Language: ECMAScript, Threading: Not Thread Safe, Compile: true, Names: {nashorn, Nashorn, js, JS, JavaScript, javascript, ECMAScript, ecmascript}
2017-05-06 23:28:31,957 main DEBUG Took 0.015120 seconds to load 1 plugins from package com.test
2017-05-06 23:28:31,958 main DEBUG PluginManager 'Core' found 122 plugins
2017-05-06 23:28:31,959 main DEBUG PluginManager 'Level' found 1 plugins
2017-05-06 23:28:31,983 main DEBUG Building Plugin[name=property, class=org.apache.logging.log4j.core.config.Property].
2017-05-06 23:28:32,009 main TRACE TypeConverterRegistry initializing.
2017-05-06 23:28:32,010 main DEBUG PluginManager 'TypeConverter' found 26 plugins
2017-05-06 23:28:32,033 main DEBUG createProperty(name="PatternLayout_Console", value="%black{%d{DEFAULT}} %blue{[%t]} %style{%logger}{bright,cyan} %highlight{%-5level:}{FATAL=magenta, ERROR=red, WARN=blue, INFO=black, DEBUG=white, TRACE=blue} %style{%msg%n%throwable}{bright,green}")
2017-05-06 23:28:32,034 main DEBUG Building Plugin[name=property, class=org.apache.logging.log4j.core.config.Property].
2017-05-06 23:28:32,035 main DEBUG createProperty(name="PatternLayout_File", value="%d{DEFAULT} %-5level %class{36} %L %M - %msg%xEx%n")
2017-05-06 23:28:32,035 main DEBUG Building Plugin[name=property, class=org.apache.logging.log4j.core.config.Property].
2017-05-06 23:28:32,036 main DEBUG createProperty(name="fileName_test", value="logs/test.log")
2017-05-06 23:28:32,037 main DEBUG Building Plugin[name=property, class=org.apache.logging.log4j.core.config.Property].
2017-05-06 23:28:32,042 main DEBUG createProperty(name="fileName_all", value="logs/all.log")
2017-05-06 23:28:32,042 main DEBUG Building Plugin[name=property, class=org.apache.logging.log4j.core.config.Property].
2017-05-06 23:28:32,044 main DEBUG createProperty(name="fileName_trace", value="logs/trace.log")
2017-05-06 23:28:32,044 main DEBUG Building Plugin[name=property, class=org.apache.logging.log4j.core.config.Property].
2017-05-06 23:28:32,045 main DEBUG createProperty(name="fileName_debug", value="logs/debug.log")
2017-05-06 23:28:32,046 main DEBUG Building Plugin[name=property, class=org.apache.logging.log4j.core.config.Property].
2017-05-06 23:28:32,047 main DEBUG createProperty(name="fileName_info", value="logs/info.log")
2017-05-06 23:28:32,047 main DEBUG Building Plugin[name=property, class=org.apache.logging.log4j.core.config.Property].
2017-05-06 23:28:32,049 main DEBUG createProperty(name="fileName_warn", value="logs/warn.log")
2017-05-06 23:28:32,049 main DEBUG Building Plugin[name=property, class=org.apache.logging.log4j.core.config.Property].
2017-05-06 23:28:32,050 main DEBUG createProperty(name="fileName_error", value="logs/warn.log")
2017-05-06 23:28:32,051 main DEBUG Building Plugin[name=property, class=org.apache.logging.log4j.core.config.Property].
2017-05-06 23:28:32,052 main DEBUG createProperty(name="fileName_fatal", value="logs/fatal.log")
2017-05-06 23:28:32,053 main DEBUG Building Plugin[name=property, class=org.apache.logging.log4j.core.config.Property].
2017-05-06 23:28:32,055 main DEBUG createProperty(name="filePattern_all", value="logs/${date:yyyy-MM}/all-%d{MM-dd-yyyy}-%i.log.gz")
2017-05-06 23:28:32,056 main DEBUG Building Plugin[name=property, class=org.apache.logging.log4j.core.config.Property].
2017-05-06 23:28:32,057 main DEBUG createProperty(name="filePattern_trace", value="logs/${date:yyyy-MM}/trace-%d{MM-dd-yyyy}-%i.log.gz")
2017-05-06 23:28:32,057 main DEBUG Building Plugin[name=property, class=org.apache.logging.log4j.core.config.Property].
2017-05-06 23:28:32,058 main DEBUG createProperty(name="filePattern_debug", value="logs/${date:yyyy-MM}/debug-%d{MM-dd-yyyy}-%i.log.gz")
2017-05-06 23:28:32,058 main DEBUG Building Plugin[name=property, class=org.apache.logging.log4j.core.config.Property].
2017-05-06 23:28:32,059 main DEBUG createProperty(name="filePattern_info", value="logs/${date:yyyy-MM}/info-%d{MM-dd-yyyy}-%i.log.gz")
2017-05-06 23:28:32,059 main DEBUG Building Plugin[name=property, class=org.apache.logging.log4j.core.config.Property].
2017-05-06 23:28:32,060 main DEBUG createProperty(name="filePattern_warn", value="logs/${date:yyyy-MM}/warn-%d{MM-dd-yyyy}-%i.log.gz")
2017-05-06 23:28:32,060 main DEBUG Building Plugin[name=property, class=org.apache.logging.log4j.core.config.Property].
2017-05-06 23:28:32,065 main DEBUG createProperty(name="filePattern_error", value="logs/${date:yyyy-MM}/error-%d{MM-dd-yyyy}-%i.log.gz")
2017-05-06 23:28:32,066 main DEBUG Building Plugin[name=property, class=org.apache.logging.log4j.core.config.Property].
2017-05-06 23:28:32,068 main DEBUG createProperty(name="filePattern_fatal", value="logs/${date:yyyy-MM}/fatal-%d{MM-dd-yyyy}-%i.log.gz")
2017-05-06 23:28:32,068 main DEBUG Building Plugin[name=property, class=org.apache.logging.log4j.core.config.Property].
2017-05-06 23:28:32,070 main DEBUG createProperty(name="SizeBasedTriggeringPolicy_size", value="50MB")
2017-05-06 23:28:32,071 main DEBUG Building Plugin[name=property, class=org.apache.logging.log4j.core.config.Property].
2017-05-06 23:28:32,072 main DEBUG createProperty(name="DefaultRolloverStrategy_max", value="20")
2017-05-06 23:28:32,073 main DEBUG Building Plugin[name=properties, class=org.apache.logging.log4j.core.config.PropertiesPlugin].
2017-05-06 23:28:32,091 main DEBUG configureSubstitutor(={PatternLayout_Console=%black{%d{DEFAULT}} %blue{[%t]} %style{%logger}{bright,cyan} %highlight{%-5level:}{FATAL=magenta, ERROR=red, WARN=blue, INFO=black, DEBUG=white, TRACE=blue} %style{%msg%n%throwable}{bright,green}, PatternLayout_File=%d{DEFAULT} %-5level %class{36} %L %M - %msg%xEx%n, fileName_test=logs/test.log, fileName_all=logs/all.log, fileName_trace=logs/trace.log, fileName_debug=logs/debug.log, fileName_info=logs/info.log, fileName_warn=logs/warn.log, fileName_error=logs/warn.log, fileName_fatal=logs/fatal.log, filePattern_all=logs/${date:yyyy-MM}/all-%d{MM-dd-yyyy}-%i.log.gz, filePattern_trace=logs/${date:yyyy-MM}/trace-%d{MM-dd-yyyy}-%i.log.gz, filePattern_debug=logs/${date:yyyy-MM}/debug-%d{MM-dd-yyyy}-%i.log.gz, filePattern_info=logs/${date:yyyy-MM}/info-%d{MM-dd-yyyy}-%i.log.gz, filePattern_warn=logs/${date:yyyy-MM}/warn-%d{MM-dd-yyyy}-%i.log.gz, filePattern_error=logs/${date:yyyy-MM}/error-%d{MM-dd-yyyy}-%i.log.gz, filePattern_fatal=logs/${date:yyyy-MM}/fatal-%d{MM-dd-yyyy}-%i.log.gz, SizeBasedTriggeringPolicy_size=50MB, DefaultRolloverStrategy_max=20}, Configuration(baseLogger))
2017-05-06 23:28:32,093 main DEBUG PluginManager 'Lookup' found 14 plugins
2017-05-06 23:28:32,096 main DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout].
2017-05-06 23:28:32,108 main DEBUG PatternLayout$Builder(pattern="%black{%d{DEFAULT}} %blue{[%t]} %style{%logger}{bright,cyan} %highlight{%-5level:}{FATAL=magenta, ERROR=red, WARN=blue, INFO=black, DEBUG=white, TRACE=blue} %style{%msg%n%throwable}{bright,green}", PatternSelector=null, Configuration(baseLogger), Replace=null, charset="null", alwaysWriteExceptions="null", disableAnsi="null", noConsoleNoAnsi="null", header="null", footer="null")
2017-05-06 23:28:32,110 main DEBUG PluginManager 'Converter' found 41 plugins
2017-05-06 23:28:32,145 main DEBUG Building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.ConsoleAppender].
2017-05-06 23:28:32,170 main DEBUG ConsoleAppender$Builder(target="SYSTEM_OUT", follow="null", direct="null", bufferedIo="null", bufferSize="null", immediateFlush="null", ignoreExceptions="null", PatternLayout(%black{%d{DEFAULT}} %blue{[%t]} %style{%logger}{bright,cyan} %highlight{%-5level:}{FATAL=magenta, ERROR=red, WARN=blue, INFO=black, DEBUG=white, TRACE=blue} %style{%msg%n%throwable}{bright,green}), name="Console", Configuration(baseLogger), Filter=null)
2017-05-06 23:28:32,171 main DEBUG Jansi is not installed, cannot find org.fusesource.jansi.WindowsAnsiOutputStream
2017-05-06 23:28:32,173 main DEBUG Starting OutputStreamManager SYSTEM_OUT.false.false
2017-05-06 23:28:32,174 main DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout].
2017-05-06 23:28:32,179 main DEBUG PatternLayout$Builder(pattern="%d{DEFAULT} %-5level %class{36} %L %M - %msg%xEx%n", PatternSelector=null, Configuration(baseLogger), Replace=null, charset="null", alwaysWriteExceptions="null", disableAnsi="null", noConsoleNoAnsi="null", header="null", footer="null")
2017-05-06 23:28:32,184 main DEBUG Building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.FileAppender].
2017-05-06 23:28:32,202 main DEBUG FileAppender$Builder(fileName="logs/test.log", append="false", locking="null", advertise="null", advertiseUri="null", createOnDemand="null", bufferedIo="null", bufferSize="null", immediateFlush="null", ignoreExceptions="null", PatternLayout(%d{DEFAULT} %-5level %class{36} %L %M - %msg%xEx%n), name="TestFile", Configuration(baseLogger), Filter=null)
2017-05-06 23:28:32,210 main DEBUG Starting FileManager logs/test.log
2017-05-06 23:28:32,211 main DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout].
2017-05-06 23:28:32,212 main DEBUG PatternLayout$Builder(pattern="%d{DEFAULT} %-5level %class{36} %L %M - %msg%xEx%n", PatternSelector=null, Configuration(baseLogger), Replace=null, charset="null", alwaysWriteExceptions="null", disableAnsi="null", noConsoleNoAnsi="null", header="null", footer="null")
2017-05-06 23:28:32,215 main DEBUG Building Plugin[name=DefaultRolloverStrategy, class=org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy].
2017-05-06 23:28:32,223 main DEBUG createStrategy(max="20", min="null", fileIndex="null", compressionLevel="null", ={}, stopCustomActionsOnError="true", Configuration(baseLogger))
2017-05-06 23:28:32,226 main DEBUG Building Plugin[name=TimeBasedTriggeringPolicy, class=org.apache.logging.log4j.core.appender.rolling.TimeBasedTriggeringPolicy].
2017-05-06 23:28:32,228 main DEBUG createPolicy(interval="null", modulate="null")
2017-05-06 23:28:32,228 main DEBUG Building Plugin[name=SizeBasedTriggeringPolicy, class=org.apache.logging.log4j.core.appender.rolling.SizeBasedTriggeringPolicy].
2017-05-06 23:28:32,230 main DEBUG createPolicy(size="50MB")
2017-05-06 23:28:32,233 main DEBUG Building Plugin[name=Policies, class=org.apache.logging.log4j.core.appender.rolling.CompositeTriggeringPolicy].
2017-05-06 23:28:32,235 main DEBUG createPolicy(={TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=52428800)})
2017-05-06 23:28:32,235 main DEBUG Building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.RollingFileAppender].
2017-05-06 23:28:32,248 main DEBUG RollingFileAppender$Builder(fileName="logs/all.log", filePattern="logs/2017-05/all-%d{MM-dd-yyyy}-%i.log.gz", append="null", locking="null", Policies(CompositeTriggeringPolicy(policies=[TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=52428800)])), DefaultRolloverStrategy(DefaultRolloverStrategy(min=1, max=20, useMax=true)), advertise="null", advertiseUri="null", createOnDemand="null", bufferedIo="null", bufferSize="null", immediateFlush="null", ignoreExceptions="null", PatternLayout(%d{DEFAULT} %-5level %class{36} %L %M - %msg%xEx%n), name="AllFile", Configuration(baseLogger), Filter=null)
2017-05-06 23:28:32,255 main TRACE New file 'logs/all.log' created = false
2017-05-06 23:28:32,257 main DEBUG Starting RollingFileManager logs/all.log
2017-05-06 23:28:32,264 main DEBUG PluginManager 'FileConverter' found 2 plugins
2017-05-06 23:28:32,269 main DEBUG Setting prev file time to 2017-05-06T23:27:42.839+0800
2017-05-06 23:28:32,274 main DEBUG Initializing triggering policy CompositeTriggeringPolicy(policies=[TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=52428800)])
2017-05-06 23:28:32,277 main TRACE PatternProcessor.getNextTime returning 2017/05/07-00:00:00.000, nextFileTime=2017/05/06-00:00:00.000, prevFileTime=1970/01/01-08:00:00.000, current=2017/05/06-23:28:32.276, freq=DAILY
2017-05-06 23:28:32,278 main TRACE PatternProcessor.getNextTime returning 2017/05/07-00:00:00.000, nextFileTime=2017/05/06-00:00:00.000, prevFileTime=2017/05/06-00:00:00.000, current=2017/05/06-23:28:32.278, freq=DAILY
2017-05-06 23:28:32,279 main DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout].
2017-05-06 23:28:32,280 main DEBUG PatternLayout$Builder(pattern="%d{DEFAULT} %-5level %class{36} %L %M - %msg%xEx%n", PatternSelector=null, Configuration(baseLogger), Replace=null, charset="null", alwaysWriteExceptions="null", disableAnsi="null", noConsoleNoAnsi="null", header="null", footer="null")
2017-05-06 23:28:32,281 main DEBUG Building Plugin[name=DefaultRolloverStrategy, class=org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy].
2017-05-06 23:28:32,284 main DEBUG createStrategy(max="20", min="null", fileIndex="null", compressionLevel="null", ={}, stopCustomActionsOnError="true", Configuration(baseLogger))
2017-05-06 23:28:32,284 main DEBUG Building Plugin[name=TimeBasedTriggeringPolicy, class=org.apache.logging.log4j.core.appender.rolling.TimeBasedTriggeringPolicy].
2017-05-06 23:28:32,286 main DEBUG createPolicy(interval="null", modulate="null")
2017-05-06 23:28:32,286 main DEBUG Building Plugin[name=SizeBasedTriggeringPolicy, class=org.apache.logging.log4j.core.appender.rolling.SizeBasedTriggeringPolicy].
2017-05-06 23:28:32,288 main DEBUG createPolicy(size="50MB")
2017-05-06 23:28:32,293 main DEBUG Building Plugin[name=Policies, class=org.apache.logging.log4j.core.appender.rolling.CompositeTriggeringPolicy].
2017-05-06 23:28:32,295 main DEBUG createPolicy(={TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=52428800)})
2017-05-06 23:28:32,296 main DEBUG Building Plugin[name=filter, class=org.apache.logging.log4j.core.filter.ThresholdFilter].
2017-05-06 23:28:32,304 main DEBUG createFilter(level="DEBUG", onMatch="DENY", onMismatch="NEUTRAL")
2017-05-06 23:28:32,305 main DEBUG Building Plugin[name=filter, class=org.apache.logging.log4j.core.filter.ThresholdFilter].
2017-05-06 23:28:32,307 main DEBUG createFilter(level="TRACE", onMatch="ACCEPT", onMismatch="DENY")
2017-05-06 23:28:32,308 main DEBUG Building Plugin[name=filters, class=org.apache.logging.log4j.core.filter.CompositeFilter].
2017-05-06 23:28:32,315 main DEBUG createFilters(={DEBUG, TRACE})
2017-05-06 23:28:32,315 main DEBUG Building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.RollingFileAppender].
2017-05-06 23:28:32,318 main DEBUG RollingFileAppender$Builder(fileName="logs/trace.log", filePattern="logs/2017-05/trace-%d{MM-dd-yyyy}-%i.log.gz", append="null", locking="null", Policies(CompositeTriggeringPolicy(policies=[TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=52428800)])), DefaultRolloverStrategy(DefaultRolloverStrategy(min=1, max=20, useMax=true)), advertise="null", advertiseUri="null", createOnDemand="null", bufferedIo="null", bufferSize="null", immediateFlush="null", ignoreExceptions="null", PatternLayout(%d{DEFAULT} %-5level %class{36} %L %M - %msg%xEx%n), name="TraceFile", Configuration(baseLogger), Filters({DEBUG, TRACE}))
2017-05-06 23:28:32,319 main TRACE New file 'logs/trace.log' created = false
2017-05-06 23:28:32,321 main DEBUG Starting RollingFileManager logs/trace.log
2017-05-06 23:28:32,322 main DEBUG PluginManager 'FileConverter' found 2 plugins
2017-05-06 23:28:32,323 main DEBUG Setting prev file time to 2017-05-06T23:27:42.844+0800
2017-05-06 23:28:32,323 main DEBUG Initializing triggering policy CompositeTriggeringPolicy(policies=[TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=52428800)])
2017-05-06 23:28:32,325 main TRACE PatternProcessor.getNextTime returning 2017/05/07-00:00:00.000, nextFileTime=2017/05/06-00:00:00.000, prevFileTime=1970/01/01-08:00:00.000, current=2017/05/06-23:28:32.324, freq=DAILY
2017-05-06 23:28:32,326 main TRACE PatternProcessor.getNextTime returning 2017/05/07-00:00:00.000, nextFileTime=2017/05/06-00:00:00.000, prevFileTime=2017/05/06-00:00:00.000, current=2017/05/06-23:28:32.326, freq=DAILY
2017-05-06 23:28:32,326 main DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout].
2017-05-06 23:28:32,328 main DEBUG PatternLayout$Builder(pattern="%d{DEFAULT} %-5level %class{36} %L %M - %msg%xEx%n", PatternSelector=null, Configuration(baseLogger), Replace=null, charset="null", alwaysWriteExceptions="null", disableAnsi="null", noConsoleNoAnsi="null", header="null", footer="null")
2017-05-06 23:28:32,329 main DEBUG Building Plugin[name=DefaultRolloverStrategy, class=org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy].
2017-05-06 23:28:32,330 main DEBUG createStrategy(max="20", min="null", fileIndex="null", compressionLevel="null", ={}, stopCustomActionsOnError="true", Configuration(baseLogger))
2017-05-06 23:28:32,331 main DEBUG Building Plugin[name=TimeBasedTriggeringPolicy, class=org.apache.logging.log4j.core.appender.rolling.TimeBasedTriggeringPolicy].
2017-05-06 23:28:32,331 main DEBUG createPolicy(interval="null", modulate="null")
2017-05-06 23:28:32,331 main DEBUG Building Plugin[name=SizeBasedTriggeringPolicy, class=org.apache.logging.log4j.core.appender.rolling.SizeBasedTriggeringPolicy].
2017-05-06 23:28:32,332 main DEBUG createPolicy(size="50MB")
2017-05-06 23:28:32,333 main DEBUG Building Plugin[name=Policies, class=org.apache.logging.log4j.core.appender.rolling.CompositeTriggeringPolicy].
2017-05-06 23:28:32,333 main DEBUG createPolicy(={TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=52428800)})
2017-05-06 23:28:32,334 main DEBUG Building Plugin[name=filter, class=org.apache.logging.log4j.core.filter.ThresholdFilter].
2017-05-06 23:28:32,335 main DEBUG createFilter(level="INFO", onMatch="DENY", onMismatch="NEUTRAL")
2017-05-06 23:28:32,335 main DEBUG Building Plugin[name=filter, class=org.apache.logging.log4j.core.filter.ThresholdFilter].
2017-05-06 23:28:32,336 main DEBUG createFilter(level="DEBUG", onMatch="ACCEPT", onMismatch="DENY")
2017-05-06 23:28:32,336 main DEBUG Building Plugin[name=filters, class=org.apache.logging.log4j.core.filter.CompositeFilter].
2017-05-06 23:28:32,337 main DEBUG createFilters(={INFO, DEBUG})
2017-05-06 23:28:32,337 main DEBUG Building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.RollingFileAppender].
2017-05-06 23:28:32,338 main DEBUG RollingFileAppender$Builder(fileName="logs/debug.log", filePattern="logs/2017-05/debug-%d{MM-dd-yyyy}-%i.log.gz", append="null", locking="null", Policies(CompositeTriggeringPolicy(policies=[TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=52428800)])), DefaultRolloverStrategy(DefaultRolloverStrategy(min=1, max=20, useMax=true)), advertise="null", advertiseUri="null", createOnDemand="null", bufferedIo="null", bufferSize="null", immediateFlush="null", ignoreExceptions="null", PatternLayout(%d{DEFAULT} %-5level %class{36} %L %M - %msg%xEx%n), name="DebugFile", Configuration(baseLogger), Filters({INFO, DEBUG}))
2017-05-06 23:28:32,339 main TRACE New file 'logs/debug.log' created = false
2017-05-06 23:28:32,340 main DEBUG Starting RollingFileManager logs/debug.log
2017-05-06 23:28:32,340 main DEBUG PluginManager 'FileConverter' found 2 plugins
2017-05-06 23:28:32,341 main DEBUG Setting prev file time to 2017-05-06T23:27:42.848+0800
2017-05-06 23:28:32,341 main DEBUG Initializing triggering policy CompositeTriggeringPolicy(policies=[TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=52428800)])
2017-05-06 23:28:32,342 main TRACE PatternProcessor.getNextTime returning 2017/05/07-00:00:00.000, nextFileTime=2017/05/06-00:00:00.000, prevFileTime=1970/01/01-08:00:00.000, current=2017/05/06-23:28:32.342, freq=DAILY
2017-05-06 23:28:32,343 main TRACE PatternProcessor.getNextTime returning 2017/05/07-00:00:00.000, nextFileTime=2017/05/06-00:00:00.000, prevFileTime=2017/05/06-00:00:00.000, current=2017/05/06-23:28:32.343, freq=DAILY
2017-05-06 23:28:32,343 main DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout].
2017-05-06 23:28:32,344 main DEBUG PatternLayout$Builder(pattern="%d{DEFAULT} %-5level %class{36} %L %M - %msg%xEx%n", PatternSelector=null, Configuration(baseLogger), Replace=null, charset="null", alwaysWriteExceptions="null", disableAnsi="null", noConsoleNoAnsi="null", header="null", footer="null")
2017-05-06 23:28:32,344 main DEBUG Building Plugin[name=DefaultRolloverStrategy, class=org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy].
2017-05-06 23:28:32,346 main DEBUG createStrategy(max="20", min="null", fileIndex="null", compressionLevel="null", ={}, stopCustomActionsOnError="true", Configuration(baseLogger))
2017-05-06 23:28:32,347 main DEBUG Building Plugin[name=TimeBasedTriggeringPolicy, class=org.apache.logging.log4j.core.appender.rolling.TimeBasedTriggeringPolicy].
2017-05-06 23:28:32,347 main DEBUG createPolicy(interval="null", modulate="null")
2017-05-06 23:28:32,348 main DEBUG Building Plugin[name=SizeBasedTriggeringPolicy, class=org.apache.logging.log4j.core.appender.rolling.SizeBasedTriggeringPolicy].
2017-05-06 23:28:32,348 main DEBUG createPolicy(size="50MB")
2017-05-06 23:28:32,348 main DEBUG Building Plugin[name=Policies, class=org.apache.logging.log4j.core.appender.rolling.CompositeTriggeringPolicy].
2017-05-06 23:28:32,349 main DEBUG createPolicy(={TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=52428800)})
2017-05-06 23:28:32,349 main DEBUG Building Plugin[name=filter, class=org.apache.logging.log4j.core.filter.ThresholdFilter].
2017-05-06 23:28:32,350 main DEBUG createFilter(level="WARN", onMatch="DENY", onMismatch="NEUTRAL")
2017-05-06 23:28:32,350 main DEBUG Building Plugin[name=filter, class=org.apache.logging.log4j.core.filter.ThresholdFilter].
2017-05-06 23:28:32,351 main DEBUG createFilter(level="INFO", onMatch="ACCEPT", onMismatch="DENY")
2017-05-06 23:28:32,352 main DEBUG Building Plugin[name=filters, class=org.apache.logging.log4j.core.filter.CompositeFilter].
2017-05-06 23:28:32,352 main DEBUG createFilters(={WARN, INFO})
2017-05-06 23:28:32,352 main DEBUG Building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.RollingFileAppender].
2017-05-06 23:28:32,354 main DEBUG RollingFileAppender$Builder(fileName="logs/info.log", filePattern="logs/2017-05/info-%d{MM-dd-yyyy}-%i.log.gz", append="null", locking="null", Policies(CompositeTriggeringPolicy(policies=[TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=52428800)])), DefaultRolloverStrategy(DefaultRolloverStrategy(min=1, max=20, useMax=true)), advertise="null", advertiseUri="null", createOnDemand="null", bufferedIo="null", bufferSize="null", immediateFlush="null", ignoreExceptions="null", PatternLayout(%d{DEFAULT} %-5level %class{36} %L %M - %msg%xEx%n), name="InfoFile", Configuration(baseLogger), Filters({WARN, INFO}))
2017-05-06 23:28:32,355 main TRACE New file 'logs/info.log' created = false
2017-05-06 23:28:32,356 main DEBUG Starting RollingFileManager logs/info.log
2017-05-06 23:28:32,356 main DEBUG PluginManager 'FileConverter' found 2 plugins
2017-05-06 23:28:32,357 main DEBUG Setting prev file time to 2017-05-06T23:27:42.846+0800
2017-05-06 23:28:32,357 main DEBUG Initializing triggering policy CompositeTriggeringPolicy(policies=[TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=52428800)])
2017-05-06 23:28:32,358 main TRACE PatternProcessor.getNextTime returning 2017/05/07-00:00:00.000, nextFileTime=2017/05/06-00:00:00.000, prevFileTime=1970/01/01-08:00:00.000, current=2017/05/06-23:28:32.358, freq=DAILY
2017-05-06 23:28:32,360 main TRACE PatternProcessor.getNextTime returning 2017/05/07-00:00:00.000, nextFileTime=2017/05/06-00:00:00.000, prevFileTime=2017/05/06-00:00:00.000, current=2017/05/06-23:28:32.359, freq=DAILY
2017-05-06 23:28:32,360 main DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout].
2017-05-06 23:28:32,362 main DEBUG PatternLayout$Builder(pattern="%d{DEFAULT} %-5level %class{36} %L %M - %msg%xEx%n", PatternSelector=null, Configuration(baseLogger), Replace=null, charset="null", alwaysWriteExceptions="null", disableAnsi="null", noConsoleNoAnsi="null", header="null", footer="null")
2017-05-06 23:28:32,363 main DEBUG Building Plugin[name=DefaultRolloverStrategy, class=org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy].
2017-05-06 23:28:32,364 main DEBUG createStrategy(max="20", min="null", fileIndex="null", compressionLevel="null", ={}, stopCustomActionsOnError="true", Configuration(baseLogger))
2017-05-06 23:28:32,364 main DEBUG Building Plugin[name=TimeBasedTriggeringPolicy, class=org.apache.logging.log4j.core.appender.rolling.TimeBasedTriggeringPolicy].
2017-05-06 23:28:32,365 main DEBUG createPolicy(interval="null", modulate="null")
2017-05-06 23:28:32,365 main DEBUG Building Plugin[name=SizeBasedTriggeringPolicy, class=org.apache.logging.log4j.core.appender.rolling.SizeBasedTriggeringPolicy].
2017-05-06 23:28:32,365 main DEBUG createPolicy(size="50MB")
2017-05-06 23:28:32,366 main DEBUG Building Plugin[name=Policies, class=org.apache.logging.log4j.core.appender.rolling.CompositeTriggeringPolicy].
2017-05-06 23:28:32,366 main DEBUG createPolicy(={TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=52428800)})
2017-05-06 23:28:32,366 main DEBUG Building Plugin[name=filter, class=org.apache.logging.log4j.core.filter.ThresholdFilter].
2017-05-06 23:28:32,367 main DEBUG createFilter(level="ERROR", onMatch="DENY", onMismatch="NEUTRAL")
2017-05-06 23:28:32,368 main DEBUG Building Plugin[name=filter, class=org.apache.logging.log4j.core.filter.ThresholdFilter].
2017-05-06 23:28:32,368 main DEBUG createFilter(level="WARN", onMatch="ACCEPT", onMismatch="DENY")
2017-05-06 23:28:32,369 main DEBUG Building Plugin[name=filters, class=org.apache.logging.log4j.core.filter.CompositeFilter].
2017-05-06 23:28:32,369 main DEBUG createFilters(={ERROR, WARN})
2017-05-06 23:28:32,369 main DEBUG Building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.RollingFileAppender].
2017-05-06 23:28:32,370 main DEBUG RollingFileAppender$Builder(fileName="logs/warn.log", filePattern="logs/2017-05/warn-%d{MM-dd-yyyy}-%i.log.gz", append="null", locking="null", Policies(CompositeTriggeringPolicy(policies=[TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=52428800)])), DefaultRolloverStrategy(DefaultRolloverStrategy(min=1, max=20, useMax=true)), advertise="null", advertiseUri="null", createOnDemand="null", bufferedIo="null", bufferSize="null", immediateFlush="null", ignoreExceptions="null", PatternLayout(%d{DEFAULT} %-5level %class{36} %L %M - %msg%xEx%n), name="WarnFile", Configuration(baseLogger), Filters({ERROR, WARN}))
2017-05-06 23:28:32,371 main TRACE New file 'logs/warn.log' created = false
2017-05-06 23:28:32,372 main DEBUG Starting RollingFileManager logs/warn.log
2017-05-06 23:28:32,372 main DEBUG PluginManager 'FileConverter' found 2 plugins
2017-05-06 23:28:32,373 main DEBUG Setting prev file time to 2017-05-06T23:27:42.854+0800
2017-05-06 23:28:32,373 main DEBUG Initializing triggering policy CompositeTriggeringPolicy(policies=[TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=52428800)])
2017-05-06 23:28:32,374 main TRACE PatternProcessor.getNextTime returning 2017/05/07-00:00:00.000, nextFileTime=2017/05/06-00:00:00.000, prevFileTime=1970/01/01-08:00:00.000, current=2017/05/06-23:28:32.374, freq=DAILY
2017-05-06 23:28:32,375 main TRACE PatternProcessor.getNextTime returning 2017/05/07-00:00:00.000, nextFileTime=2017/05/06-00:00:00.000, prevFileTime=2017/05/06-00:00:00.000, current=2017/05/06-23:28:32.374, freq=DAILY
2017-05-06 23:28:32,376 main DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout].
2017-05-06 23:28:32,377 main DEBUG PatternLayout$Builder(pattern="%d{DEFAULT} %-5level %class{36} %L %M - %msg%xEx%n", PatternSelector=null, Configuration(baseLogger), Replace=null, charset="null", alwaysWriteExceptions="null", disableAnsi="null", noConsoleNoAnsi="null", header="null", footer="null")
2017-05-06 23:28:32,379 main DEBUG Building Plugin[name=DefaultRolloverStrategy, class=org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy].
2017-05-06 23:28:32,380 main DEBUG createStrategy(max="20", min="null", fileIndex="null", compressionLevel="null", ={}, stopCustomActionsOnError="true", Configuration(baseLogger))
2017-05-06 23:28:32,380 main DEBUG Building Plugin[name=TimeBasedTriggeringPolicy, class=org.apache.logging.log4j.core.appender.rolling.TimeBasedTriggeringPolicy].
2017-05-06 23:28:32,381 main DEBUG createPolicy(interval="null", modulate="null")
2017-05-06 23:28:32,381 main DEBUG Building Plugin[name=SizeBasedTriggeringPolicy, class=org.apache.logging.log4j.core.appender.rolling.SizeBasedTriggeringPolicy].
2017-05-06 23:28:32,381 main DEBUG createPolicy(size="50MB")
2017-05-06 23:28:32,382 main DEBUG Building Plugin[name=Policies, class=org.apache.logging.log4j.core.appender.rolling.CompositeTriggeringPolicy].
2017-05-06 23:28:32,382 main DEBUG createPolicy(={TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=52428800)})
2017-05-06 23:28:32,383 main DEBUG Building Plugin[name=filter, class=org.apache.logging.log4j.core.filter.ThresholdFilter].
2017-05-06 23:28:32,383 main DEBUG createFilter(level="FATAL", onMatch="DENY", onMismatch="NEUTRAL")
2017-05-06 23:28:32,383 main DEBUG Building Plugin[name=filter, class=org.apache.logging.log4j.core.filter.ThresholdFilter].
2017-05-06 23:28:32,384 main DEBUG createFilter(level="ERROR", onMatch="ACCEPT", onMismatch="DENY")
2017-05-06 23:28:32,384 main DEBUG Building Plugin[name=filters, class=org.apache.logging.log4j.core.filter.CompositeFilter].
2017-05-06 23:28:32,385 main DEBUG createFilters(={FATAL, ERROR})
2017-05-06 23:28:32,385 main DEBUG Building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.RollingFileAppender].
2017-05-06 23:28:32,386 main DEBUG RollingFileAppender$Builder(fileName="logs/warn.log", filePattern="logs/2017-05/error-%d{MM-dd-yyyy}-%i.log.gz", append="null", locking="null", Policies(CompositeTriggeringPolicy(policies=[TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=52428800)])), DefaultRolloverStrategy(DefaultRolloverStrategy(min=1, max=20, useMax=true)), advertise="null", advertiseUri="null", createOnDemand="null", bufferedIo="null", bufferSize="null", immediateFlush="null", ignoreExceptions="null", PatternLayout(%d{DEFAULT} %-5level %class{36} %L %M - %msg%xEx%n), name="ErrorFile", Configuration(baseLogger), Filters({FATAL, ERROR}))
2017-05-06 23:28:32,387 main TRACE PatternProcessor.getNextTime returning 2017/05/07-00:00:00.000, nextFileTime=2017/05/06-00:00:00.000, prevFileTime=2017/05/06-00:00:00.000, current=2017/05/06-23:28:32.387, freq=DAILY
2017-05-06 23:28:32,388 main TRACE PatternProcessor.getNextTime returning 2017/05/07-00:00:00.000, nextFileTime=2017/05/06-00:00:00.000, prevFileTime=2017/05/06-00:00:00.000, current=2017/05/06-23:28:32.388, freq=DAILY
2017-05-06 23:28:32,388 main DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout].
2017-05-06 23:28:32,389 main DEBUG PatternLayout$Builder(pattern="%d{DEFAULT} %-5level %class{36} %L %M - %msg%xEx%n", PatternSelector=null, Configuration(baseLogger), Replace=null, charset="null", alwaysWriteExceptions="null", disableAnsi="null", noConsoleNoAnsi="null", header="null", footer="null")
2017-05-06 23:28:32,391 main DEBUG Building Plugin[name=DefaultRolloverStrategy, class=org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy].
2017-05-06 23:28:32,393 main DEBUG createStrategy(max="20", min="null", fileIndex="null", compressionLevel="null", ={}, stopCustomActionsOnError="true", Configuration(baseLogger))
2017-05-06 23:28:32,394 main DEBUG Building Plugin[name=TimeBasedTriggeringPolicy, class=org.apache.logging.log4j.core.appender.rolling.TimeBasedTriggeringPolicy].
2017-05-06 23:28:32,394 main DEBUG createPolicy(interval="null", modulate="null")
2017-05-06 23:28:32,395 main DEBUG Building Plugin[name=SizeBasedTriggeringPolicy, class=org.apache.logging.log4j.core.appender.rolling.SizeBasedTriggeringPolicy].
2017-05-06 23:28:32,395 main DEBUG createPolicy(size="50MB")
2017-05-06 23:28:32,396 main DEBUG Building Plugin[name=Policies, class=org.apache.logging.log4j.core.appender.rolling.CompositeTriggeringPolicy].
2017-05-06 23:28:32,396 main DEBUG createPolicy(={TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=52428800)})
2017-05-06 23:28:32,396 main DEBUG Building Plugin[name=filter, class=org.apache.logging.log4j.core.filter.ThresholdFilter].
2017-05-06 23:28:32,397 main DEBUG createFilter(level="FATAL", onMatch="ACCEPT", onMismatch="DENY")
2017-05-06 23:28:32,397 main DEBUG Building Plugin[name=filters, class=org.apache.logging.log4j.core.filter.CompositeFilter].
2017-05-06 23:28:32,398 main DEBUG createFilters(={FATAL})
2017-05-06 23:28:32,398 main DEBUG Building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.RollingFileAppender].
2017-05-06 23:28:32,400 main DEBUG RollingFileAppender$Builder(fileName="logs/fatal.log", filePattern="logs/2017-05/fatal-%d{MM-dd-yyyy}-%i.log.gz", append="null", locking="null", Policies(CompositeTriggeringPolicy(policies=[TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=52428800)])), DefaultRolloverStrategy(DefaultRolloverStrategy(min=1, max=20, useMax=true)), advertise="null", advertiseUri="null", createOnDemand="null", bufferedIo="null", bufferSize="null", immediateFlush="null", ignoreExceptions="null", PatternLayout(%d{DEFAULT} %-5level %class{36} %L %M - %msg%xEx%n), name="FatalFile", Configuration(baseLogger), Filters({FATAL}))
2017-05-06 23:28:32,401 main TRACE New file 'logs/fatal.log' created = false
2017-05-06 23:28:32,402 main DEBUG Starting RollingFileManager logs/fatal.log
2017-05-06 23:28:32,403 main DEBUG PluginManager 'FileConverter' found 2 plugins
2017-05-06 23:28:32,404 main DEBUG Setting prev file time to 2017-05-06T23:27:42.852+0800
2017-05-06 23:28:32,404 main DEBUG Initializing triggering policy CompositeTriggeringPolicy(policies=[TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=false), SizeBasedTriggeringPolicy(size=52428800)])
2017-05-06 23:28:32,405 main TRACE PatternProcessor.getNextTime returning 2017/05/07-00:00:00.000, nextFileTime=2017/05/06-00:00:00.000, prevFileTime=1970/01/01-08:00:00.000, current=2017/05/06-23:28:32.405, freq=DAILY
2017-05-06 23:28:32,406 main TRACE PatternProcessor.getNextTime returning 2017/05/07-00:00:00.000, nextFileTime=2017/05/06-00:00:00.000, prevFileTime=2017/05/06-00:00:00.000, current=2017/05/06-23:28:32.406, freq=DAILY
2017-05-06 23:28:32,406 main DEBUG Building Plugin[name=appenders, class=org.apache.logging.log4j.core.config.AppendersPlugin].
2017-05-06 23:28:32,407 main DEBUG createAppenders(={Console, TestFile, AllFile, TraceFile, DebugFile, InfoFile, WarnFile, ErrorFile, FatalFile})
2017-05-06 23:28:32,408 main DEBUG Building Plugin[name=AppenderRef, class=org.apache.logging.log4j.core.config.AppenderRef].
2017-05-06 23:28:32,409 main DEBUG createAppenderRef(ref="Console", level="null", Filter=null)
2017-05-06 23:28:32,409 main DEBUG Building Plugin[name=AppenderRef, class=org.apache.logging.log4j.core.config.AppenderRef].
2017-05-06 23:28:32,410 main DEBUG createAppenderRef(ref="TestFile", level="null", Filter=null)
2017-05-06 23:28:32,411 main DEBUG Building Plugin[name=AppenderRef, class=org.apache.logging.log4j.core.config.AppenderRef].
2017-05-06 23:28:32,412 main DEBUG createAppenderRef(ref="AllFile", level="null", Filter=null)
2017-05-06 23:28:32,412 main DEBUG Building Plugin[name=AppenderRef, class=org.apache.logging.log4j.core.config.AppenderRef].
2017-05-06 23:28:32,413 main DEBUG createAppenderRef(ref="TraceFile", level="null", Filter=null)
2017-05-06 23:28:32,413 main DEBUG Building Plugin[name=AppenderRef, class=org.apache.logging.log4j.core.config.AppenderRef].
2017-05-06 23:28:32,414 main DEBUG createAppenderRef(ref="DebugFile", level="null", Filter=null)
2017-05-06 23:28:32,414 main DEBUG Building Plugin[name=AppenderRef, class=org.apache.logging.log4j.core.config.AppenderRef].
2017-05-06 23:28:32,414 main DEBUG createAppenderRef(ref="WarnFile", level="null", Filter=null)
2017-05-06 23:28:32,414 main DEBUG Building Plugin[name=AppenderRef, class=org.apache.logging.log4j.core.config.AppenderRef].
2017-05-06 23:28:32,415 main DEBUG createAppenderRef(ref="InfoFile", level="null", Filter=null)
2017-05-06 23:28:32,415 main DEBUG Building Plugin[name=AppenderRef, class=org.apache.logging.log4j.core.config.AppenderRef].
2017-05-06 23:28:32,416 main DEBUG createAppenderRef(ref="WarnFile", level="null", Filter=null)
2017-05-06 23:28:32,416 main DEBUG Building Plugin[name=AppenderRef, class=org.apache.logging.log4j.core.config.AppenderRef].
2017-05-06 23:28:32,417 main DEBUG createAppenderRef(ref="ErrorFile", level="null", Filter=null)
2017-05-06 23:28:32,417 main DEBUG Building Plugin[name=AppenderRef, class=org.apache.logging.log4j.core.config.AppenderRef].
2017-05-06 23:28:32,418 main DEBUG createAppenderRef(ref="FatalFile", level="null", Filter=null)
2017-05-06 23:28:32,419 main DEBUG Building Plugin[name=logger, class=org.apache.logging.log4j.core.config.LoggerConfig].
2017-05-06 23:28:32,421 main DEBUG createLogger(additivity="false", level="ALL", name="com.test", includeLocation="null", ={Console, TestFile, AllFile, TraceFile, DebugFile, WarnFile, InfoFile, WarnFile, ErrorFile, FatalFile}, ={}, Configuration(baseLogger), Filter=null)
2017-05-06 23:28:32,427 main DEBUG Building Plugin[name=root, class=org.apache.logging.log4j.core.config.LoggerConfig$RootLogger].
2017-05-06 23:28:32,429 main DEBUG createLogger(additivity="null", level="null", includeLocation="null", ={}, ={}, Configuration(baseLogger), Filter=null)
2017-05-06 23:28:32,431 main DEBUG Building Plugin[name=loggers, class=org.apache.logging.log4j.core.config.LoggersPlugin].
2017-05-06 23:28:32,433 main DEBUG createLoggers(={com.test, root})
2017-05-06 23:28:32,435 main DEBUG Configuration XmlConfiguration[location=D:\ProjectStation\shopbase\target\classes\log4j2.xml] initialized
2017-05-06 23:28:32,436 main DEBUG Starting configuration XmlConfiguration[location=D:\ProjectStation\shopbase\target\classes\log4j2.xml]
2017-05-06 23:28:32,440 main DEBUG Log4j2 ConfigurationScheduler starting 1 threads
2017-05-06 23:28:32,445 main DEBUG Started configuration XmlConfiguration[location=D:\ProjectStation\shopbase\target\classes\log4j2.xml] OK.
2017-05-06 23:28:32,447 main TRACE Stopping org.apache.logging.log4j.core.config.DefaultConfiguration@282ba1e...
2017-05-06 23:28:32,447 main TRACE DefaultConfiguration notified 1 ReliabilityStrategies that config will be stopped.
2017-05-06 23:28:32,448 main TRACE DefaultConfiguration stopping root LoggerConfig.
2017-05-06 23:28:32,448 main TRACE DefaultConfiguration notifying ReliabilityStrategies that appenders will be stopped.
2017-05-06 23:28:32,448 main TRACE DefaultConfiguration stopping remaining Appenders.
2017-05-06 23:28:32,449 main DEBUG Shutting down OutputStreamManager SYSTEM_OUT.false.false-1
2017-05-06 23:28:32,449 main DEBUG Shut down OutputStreamManager SYSTEM_OUT.false.false-1, all resources released: true
2017-05-06 23:28:32,450 main DEBUG Appender DefaultConsole-1 stopped with status true
2017-05-06 23:28:32,450 main TRACE DefaultConfiguration stopped 1 remaining Appenders.
2017-05-06 23:28:32,451 main TRACE DefaultConfiguration cleaning Appenders from 1 LoggerConfigs.
2017-05-06 23:28:32,451 main DEBUG Stopped org.apache.logging.log4j.core.config.DefaultConfiguration@282ba1e OK
2017-05-06 23:28:32,609 main TRACE Reregistering MBeans after reconfigure. Selector=org.apache.logging.log4j.core.selector.ClassLoaderContextSelector@1fb700ee
2017-05-06 23:28:32,609 main TRACE Reregistering context (1/1): '18b4aac2' org.apache.logging.log4j.core.LoggerContext@4f67eb2a
2017-05-06 23:28:32,610 main TRACE Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=18b4aac2'
2017-05-06 23:28:32,611 main TRACE Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=18b4aac2,component=StatusLogger'
2017-05-06 23:28:32,612 main TRACE Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=18b4aac2,component=ContextSelector'
2017-05-06 23:28:32,613 main TRACE Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=18b4aac2,component=Loggers,name=*'
2017-05-06 23:28:32,617 main TRACE Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=18b4aac2,component=Appenders,name=*'
2017-05-06 23:28:32,618 main TRACE Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=18b4aac2,component=AsyncAppenders,name=*'
2017-05-06 23:28:32,618 main TRACE Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=18b4aac2,component=AsyncLoggerRingBuffer'
2017-05-06 23:28:32,619 main TRACE Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=18b4aac2,component=Loggers,name=*,subtype=RingBuffer'
2017-05-06 23:28:32,623 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2
2017-05-06 23:28:32,630 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=StatusLogger
2017-05-06 23:28:32,632 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=ContextSelector
2017-05-06 23:28:32,635 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=Loggers,name=
2017-05-06 23:28:32,637 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=Loggers,name=com.test
2017-05-06 23:28:32,639 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=Appenders,name=ErrorFile
2017-05-06 23:28:32,641 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=Appenders,name=FatalFile
2017-05-06 23:28:32,642 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=Appenders,name=DebugFile
2017-05-06 23:28:32,642 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=Appenders,name=InfoFile
2017-05-06 23:28:32,643 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=Appenders,name=TraceFile
2017-05-06 23:28:32,644 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=Appenders,name=TestFile
2017-05-06 23:28:32,645 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=Appenders,name=Console
2017-05-06 23:28:32,645 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=Appenders,name=WarnFile
2017-05-06 23:28:32,648 main DEBUG Registering MBean org.apache.logging.log4j2:type=18b4aac2,component=Appenders,name=AllFile
2017-05-06 23:28:32,653 main TRACE Using default SystemClock for timestamps.
2017-05-06 23:28:32,654 main TRACE Using DummyNanoClock for nanosecond timestamps.
2017-05-06 23:28:32,655 main DEBUG Reconfiguration complete for context[name=18b4aac2] at URI D:\ProjectStation\shopbase\target\classes\log4j2.xml (org.apache.logging.log4j.core.LoggerContext@4f67eb2a) with optional ClassLoader: null
2017-05-06 23:28:32,655 main DEBUG Shutdown hook enabled. Registering a new one.
2017-05-06 23:28:32,660 main DEBUG LoggerContext[name=18b4aac2, org.apache.logging.log4j.core.LoggerContext@4f67eb2a] started OK.
2017-05-06 23:28:32,671 [main] com.test.log.simple.LogTest TRACE: trace level
2017-05-06 23:28:32,677 [main] com.test.log.simple.LogTest DEBUG: debug level
2017-05-06 23:28:32,679 [main] com.test.log.simple.LogTest INFO : info level
2017-05-06 23:28:32,680 [main] com.test.log.simple.LogTest WARN : warn level
2017-05-06 23:28:32,682 [main] com.test.log.simple.LogTest ERROR: error level
2017-05-06 23:28:32,683 [main] com.test.log.simple.LogTest FATAL: fatal level
2017-05-06 23:28:32,692 pool-1-thread-1 DEBUG Stopping LoggerContext[name=18b4aac2, org.apache.logging.log4j.core.LoggerContext@4f67eb2a]
2017-05-06 23:28:32,693 pool-1-thread-1 DEBUG Stopping LoggerContext[name=18b4aac2, org.apache.logging.log4j.core.LoggerContext@4f67eb2a]...
2017-05-06 23:28:32,693 pool-1-thread-1 TRACE Unregistering 1 MBeans: [org.apache.logging.log4j2:type=18b4aac2]
2017-05-06 23:28:32,694 pool-1-thread-1 TRACE Unregistering 1 MBeans: [org.apache.logging.log4j2:type=18b4aac2,component=StatusLogger]
2017-05-06 23:28:32,695 pool-1-thread-1 TRACE Unregistering 1 MBeans: [org.apache.logging.log4j2:type=18b4aac2,component=ContextSelector]
2017-05-06 23:28:32,697 pool-1-thread-1 TRACE Unregistering 2 MBeans: [org.apache.logging.log4j2:type=18b4aac2,component=Loggers,name=com.test, org.apache.logging.log4j2:type=18b4aac2,component=Loggers,name=]
2017-05-06 23:28:32,698 pool-1-thread-1 TRACE Unregistering 9 MBeans: [org.apache.logging.log4j2:type=18b4aac2,component=Appenders,name=DebugFile, org.apache.logging.log4j2:type=18b4aac2,component=Appenders,name=WarnFile, org.apache.logging.log4j2:type=18b4aac2,component=Appenders,name=InfoFile, org.apache.logging.log4j2:type=18b4aac2,component=Appenders,name=ErrorFile, org.apache.logging.log4j2:type=18b4aac2,component=Appenders,name=TraceFile, org.apache.logging.log4j2:type=18b4aac2,component=Appenders,name=AllFile, org.apache.logging.log4j2:type=18b4aac2,component=Appenders,name=TestFile, org.apache.logging.log4j2:type=18b4aac2,component=Appenders,name=Console, org.apache.logging.log4j2:type=18b4aac2,component=Appenders,name=FatalFile]
2017-05-06 23:28:32,699 pool-1-thread-1 TRACE Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=18b4aac2,component=AsyncAppenders,name=*'
2017-05-06 23:28:32,700 pool-1-thread-1 TRACE Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=18b4aac2,component=AsyncLoggerRingBuffer'
2017-05-06 23:28:32,701 pool-1-thread-1 TRACE Unregistering but no MBeans found matching 'org.apache.logging.log4j2:type=18b4aac2,component=Loggers,name=*,subtype=RingBuffer'
2017-05-06 23:28:32,701 pool-1-thread-1 TRACE Stopping XmlConfiguration[location=D:\ProjectStation\shopbase\target\classes\log4j2.xml]...
2017-05-06 23:28:32,702 pool-1-thread-1 TRACE XmlConfiguration notified 3 ReliabilityStrategies that config will be stopped.
2017-05-06 23:28:32,703 pool-1-thread-1 TRACE XmlConfiguration stopping 2 LoggerConfigs.
2017-05-06 23:28:32,703 pool-1-thread-1 TRACE XmlConfiguration stopping root LoggerConfig.
2017-05-06 23:28:32,703 pool-1-thread-1 TRACE XmlConfiguration notifying ReliabilityStrategies that appenders will be stopped.
2017-05-06 23:28:32,703 pool-1-thread-1 TRACE XmlConfiguration stopping remaining Appenders.
2017-05-06 23:28:32,704 pool-1-thread-1 DEBUG Shutting down RollingFileManager logs/all.log
2017-05-06 23:28:32,704 pool-1-thread-1 DEBUG Shutting down RollingFileManager {}logs/all.log
2017-05-06 23:28:32,709 pool-1-thread-1 DEBUG All asynchronous threads have terminated
2017-05-06 23:28:32,710 pool-1-thread-1 DEBUG RollingFileManager shutdown completed with status true
2017-05-06 23:28:32,712 pool-1-thread-1 DEBUG Shut down RollingFileManager logs/all.log, all resources released: true
2017-05-06 23:28:32,713 pool-1-thread-1 DEBUG Appender AllFile stopped with status true
2017-05-06 23:28:32,713 pool-1-thread-1 DEBUG Appender WarnFile stopped with status true
2017-05-06 23:28:32,713 pool-1-thread-1 DEBUG Shutting down OutputStreamManager SYSTEM_OUT.false.false
2017-05-06 23:28:32,713 pool-1-thread-1 DEBUG Shut down OutputStreamManager SYSTEM_OUT.false.false, all resources released: true
2017-05-06 23:28:32,716 pool-1-thread-1 DEBUG Appender Console stopped with status true
2017-05-06 23:28:32,717 pool-1-thread-1 DEBUG Shutting down FileManager logs/test.log
2017-05-06 23:28:32,719 pool-1-thread-1 DEBUG Shut down FileManager logs/test.log, all resources released: true
2017-05-06 23:28:32,719 pool-1-thread-1 DEBUG Appender TestFile stopped with status true
2017-05-06 23:28:32,720 pool-1-thread-1 DEBUG Shutting down RollingFileManager logs/trace.log
2017-05-06 23:28:32,721 pool-1-thread-1 DEBUG Shutting down RollingFileManager {}logs/trace.log
2017-05-06 23:28:32,722 pool-1-thread-1 DEBUG All asynchronous threads have terminated
2017-05-06 23:28:32,723 pool-1-thread-1 DEBUG RollingFileManager shutdown completed with status true
2017-05-06 23:28:32,723 pool-1-thread-1 DEBUG Shut down RollingFileManager logs/trace.log, all resources released: true
2017-05-06 23:28:32,724 pool-1-thread-1 DEBUG Appender TraceFile stopped with status true
2017-05-06 23:28:32,724 pool-1-thread-1 DEBUG Shutting down RollingFileManager logs/info.log
2017-05-06 23:28:32,725 pool-1-thread-1 DEBUG Shutting down RollingFileManager {}logs/info.log
2017-05-06 23:28:32,726 pool-1-thread-1 DEBUG All asynchronous threads have terminated
2017-05-06 23:28:32,726 pool-1-thread-1 DEBUG RollingFileManager shutdown completed with status true
2017-05-06 23:28:32,726 pool-1-thread-1 DEBUG Shut down RollingFileManager logs/info.log, all resources released: true
2017-05-06 23:28:32,727 pool-1-thread-1 DEBUG Appender InfoFile stopped with status true
2017-05-06 23:28:32,727 pool-1-thread-1 DEBUG Shutting down RollingFileManager logs/debug.log
2017-05-06 23:28:32,727 pool-1-thread-1 DEBUG Shutting down RollingFileManager {}logs/debug.log
2017-05-06 23:28:32,728 pool-1-thread-1 DEBUG All asynchronous threads have terminated
2017-05-06 23:28:32,728 pool-1-thread-1 DEBUG RollingFileManager shutdown completed with status true
2017-05-06 23:28:32,729 pool-1-thread-1 DEBUG Shut down RollingFileManager logs/debug.log, all resources released: true
2017-05-06 23:28:32,729 pool-1-thread-1 DEBUG Appender DebugFile stopped with status true
2017-05-06 23:28:32,729 pool-1-thread-1 DEBUG Shutting down RollingFileManager logs/fatal.log
2017-05-06 23:28:32,729 pool-1-thread-1 DEBUG Shutting down RollingFileManager {}logs/fatal.log
2017-05-06 23:28:32,730 pool-1-thread-1 DEBUG All asynchronous threads have terminated
2017-05-06 23:28:32,730 pool-1-thread-1 DEBUG RollingFileManager shutdown completed with status true
2017-05-06 23:28:32,731 pool-1-thread-1 DEBUG Shut down RollingFileManager logs/fatal.log, all resources released: true
2017-05-06 23:28:32,731 pool-1-thread-1 DEBUG Appender FatalFile stopped with status true
2017-05-06 23:28:32,731 pool-1-thread-1 DEBUG Shutting down RollingFileManager logs/warn.log
2017-05-06 23:28:32,731 pool-1-thread-1 DEBUG Shutting down RollingFileManager {}logs/warn.log
2017-05-06 23:28:32,732 pool-1-thread-1 DEBUG All asynchronous threads have terminated
2017-05-06 23:28:32,733 pool-1-thread-1 DEBUG RollingFileManager shutdown completed with status true
2017-05-06 23:28:32,733 pool-1-thread-1 DEBUG Shut down RollingFileManager logs/warn.log, all resources released: true
2017-05-06 23:28:32,733 pool-1-thread-1 DEBUG Appender ErrorFile stopped with status true
2017-05-06 23:28:32,733 pool-1-thread-1 TRACE XmlConfiguration stopped 9 remaining Appenders.
2017-05-06 23:28:32,733 pool-1-thread-1 TRACE XmlConfiguration cleaning Appenders from 3 LoggerConfigs.
2017-05-06 23:28:32,734 pool-1-thread-1 DEBUG Log4j2 ConfigurationScheduler shutting down threads in java.util.concurrent.ScheduledThreadPoolExecutor@6576e269[Running, pool size = 1, active threads = 0, queued tasks = 1, completed tasks = 0]
2017-05-06 23:28:32,734 pool-1-thread-1 DEBUG Stopped XmlConfiguration[location=D:\ProjectStation\shopbase\target\classes\log4j2.xml] OK
2017-05-06 23:28:32,735 pool-1-thread-1 DEBUG Stopped LoggerContext[name=18b4aac2, org.apache.logging.log4j.core.LoggerContext@4f67eb2a] with status true

Process finished with exit code 0

 

all.log:

2017-05-06 23:33:53,762 TRACE com.test.log.simple.LogTest 32 t1 - trace level
2017-05-06 23:33:53,769 DEBUG com.test.log.simple.LogTest 33 t1 - debug level
2017-05-06 23:33:53,771 INFO  com.test.log.simple.LogTest 34 t1 - info level
2017-05-06 23:33:53,772 WARN  com.test.log.simple.LogTest 35 t1 - warn level
2017-05-06 23:33:53,774 ERROR com.test.log.simple.LogTest 36 t1 - error level
2017-05-06 23:33:53,775 FATAL com.test.log.simple.LogTest 37 t1 - fatal level

trace.log:

2017-05-06 23:33:53,762 TRACE com.test.log.simple.LogTest 32 t1 - trace level

debug.log:

2017-05-06 23:33:53,769 DEBUG com.test.log.simple.LogTest 33 t1 - debug level

info.log:

2017-05-06 23:33:53,771 INFO  com.test.log.simple.LogTest 34 t1 - info level

warn.log:

2017-05-06 23:33:53,772 WARN  com.test.log.simple.LogTest 35 t1 - warn level
2017-05-06 23:33:53,774 ERROR com.test.log.simple.LogTest 36 t1 - error level

fatal.log:

2017-05-06 23:33:53,775 FATAL com.test.log.simple.LogTest 37 t1 - fatal level

test.log:

2017-05-06 23:33:53,762 TRACE com.test.log.simple.LogTest 32 t1 - trace level
2017-05-06 23:33:53,769 DEBUG com.test.log.simple.LogTest 33 t1 - debug level
2017-05-06 23:33:53,771 INFO  com.test.log.simple.LogTest 34 t1 - info level
2017-05-06 23:33:53,772 WARN  com.test.log.simple.LogTest 35 t1 - warn level
2017-05-06 23:33:53,774 ERROR com.test.log.simple.LogTest 36 t1 - error level
2017-05-06 23:33:53,775 FATAL com.test.log.simple.LogTest 37 t1 - fatal level

  

2.1.2 How to use  Sync and Async in all

log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="trace" name="baseLogger" monitorInterval="30" packages="com.test">

    <Properties>

        <property name="PatternLayout_Console">%black{%d{DEFAULT}} %blue{[%t]} %style{%logger}{bright,cyan} %highlight{%-5level:}{FATAL=magenta, ERROR=red, WARN=blue, INFO=black, DEBUG=white, TRACE=blue} %style{%msg%n%throwable}{bright,green}</property>
        <property name="PatternLayout_File">%d{DEFAULT} %-5level %class{36} %L %M - %msg%xEx%n</property>

        <property name="logFilePath">logs</property>
        <property name="logFileName">log</property>
        
        <property name="fileName_test">logs/test.log</property>
        <property name="fileName_all">logs/all.log</property>
        <property name="fileName_trace">logs/trace.log</property>
        <property name="fileName_debug">logs/debug.log</property>
        <property name="fileName_info">logs/info.log</property>
        <property name="fileName_warn">logs/warn.log</property>
        <property name="fileName_error">logs/warn.log</property>
        <property name="fileName_fatal">logs/fatal.log</property>

        <property name="filePattern_all">logs/$${date:yyyy-MM}/all-%d{MM-dd-yyyy}-%i.log.gz</property>
        <property name="filePattern_trace">logs/$${date:yyyy-MM}/trace-%d{MM-dd-yyyy}-%i.log.gz</property>
        <property name="filePattern_debug">logs/$${date:yyyy-MM}/debug-%d{MM-dd-yyyy}-%i.log.gz</property>
        <property name="filePattern_info">logs/$${date:yyyy-MM}/info-%d{MM-dd-yyyy}-%i.log.gz</property>
        <property name="filePattern_warn">logs/$${date:yyyy-MM}/warn-%d{MM-dd-yyyy}-%i.log.gz</property>
        <property name="filePattern_error">logs/$${date:yyyy-MM}/error-%d{MM-dd-yyyy}-%i.log.gz</property>
        <property name="filePattern_fatal">logs/$${date:yyyy-MM}/fatal-%d{MM-dd-yyyy}-%i.log.gz</property>

        <property name="SizeBasedTriggeringPolicy_size">50MB</property>
        <property name="DefaultRolloverStrategy_max">20</property>

    </Properties>

    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <!--<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>-->
            <PatternLayout pattern="${PatternLayout_Console}"/>
        </Console>

        <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用-->
        <File name="TestFile" fileName="${fileName_test}" append="false">
            <PatternLayout pattern="${PatternLayout_File}"/>
        </File>

        <!-- 这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
        <RollingFile name="AllFile" fileName="${fileName_all}" filePattern="${filePattern_all}">
            <PatternLayout pattern="${PatternLayout_File}"/>
            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
            <DefaultRolloverStrategy max="${DefaultRolloverStrategy_max}"/>
            <Policies>
                <!--这个配置需要和filePattern结合使用,注意filePattern中配置的文件重命名规则是${FILE_NAME}-%d{yyyy-MM-dd HH-mm}-%i,最小的时间粒度是mm,即分钟,TimeBasedTriggeringPolicy指定的size是1,结合起来就是每1分钟生成一个新文件。如果改成%d{yyyy-MM-dd HH},最小粒度为小时,则每一个小时生成一个文件-->
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="${SizeBasedTriggeringPolicy_size}"/>
            </Policies>
        </RollingFile>

        <!-- 这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
        <RollingFile name="TraceFile" fileName="${fileName_trace}" filePattern="${filePattern_trace}">
            <PatternLayout pattern="${PatternLayout_File}"/>
            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
            <DefaultRolloverStrategy max="${DefaultRolloverStrategy_max}"/>
            <Policies>
                <!--这个配置需要和filePattern结合使用,注意filePattern中配置的文件重命名规则是${FILE_NAME}-%d{yyyy-MM-dd HH-mm}-%i,最小的时间粒度是mm,即分钟,TimeBasedTriggeringPolicy指定的size是1,结合起来就是每1分钟生成一个新文件。如果改成%d{yyyy-MM-dd HH},最小粒度为小时,则每一个小时生成一个文件-->
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="${SizeBasedTriggeringPolicy_size}"/>
            </Policies>
            <Filters>
                <ThresholdFilter level="debug" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </RollingFile>

        <RollingFile name="DebugFile" fileName="${fileName_debug}" filePattern="${filePattern_debug}">
            <PatternLayout pattern="${PatternLayout_File}"/>
            <DefaultRolloverStrategy max="${DefaultRolloverStrategy_max}"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="${SizeBasedTriggeringPolicy_size}"/>
            </Policies>
            <Filters>
                <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </RollingFile>

        <RollingFile name="InfoFile" fileName="${fileName_info}" filePattern="${filePattern_info}">
            <PatternLayout pattern="${PatternLayout_File}"/>
            <DefaultRolloverStrategy max="${DefaultRolloverStrategy_max}"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="${SizeBasedTriggeringPolicy_size}"/>
            </Policies>
            <Filters>
                <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </RollingFile>

        <RollingFile name="WarnFile" fileName="${fileName_warn}" filePattern="${filePattern_warn}">
            <PatternLayout pattern="${PatternLayout_File}"/>
            <DefaultRolloverStrategy max="${DefaultRolloverStrategy_max}"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="${SizeBasedTriggeringPolicy_size}"/>
            </Policies>
            <Filters>
                <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </RollingFile>

        <RollingFile name="ErrorFile" fileName="${fileName_error}" filePattern="${filePattern_error}">
            <PatternLayout pattern="${PatternLayout_File}"/>
            <DefaultRolloverStrategy max="${DefaultRolloverStrategy_max}"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="${SizeBasedTriggeringPolicy_size}"/>
            </Policies>
            <Filters>
                <ThresholdFilter level="fatal" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </RollingFile>

        <RollingFile name="FatalFile" fileName="${fileName_fatal}" filePattern="${filePattern_fatal}">
            <PatternLayout pattern="${PatternLayout_File}"/>
            <DefaultRolloverStrategy max="${DefaultRolloverStrategy_max}"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="${SizeBasedTriggeringPolicy_size}"/>
            </Policies>
            <Filters>
                <ThresholdFilter level="fatal" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
        </RollingFile>

        <Routing name="RollingFileDebug_${thread:threadName}">
            <Routes pattern="$${thread:threadName}">
                <Route>
                    <RollingFile name="RollingFileDebug_${thread:threadName}"
                                 fileName="${logFilePath}/${logFileName}_${thread:threadName}_debug.log"
                                 filePattern="${logFilePath}/$${date:yyyy-MM}/${logFileName}-%d{yyyy-MM-dd}-${thread:threadName}-debug_%i.log.gz">
                        <PatternLayout pattern="%d{yyyy.MM.dd HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
                        <!--注意,如果有多个ThresholdFilter,那么Filters标签是必须的-->
                        <Filters>
                            <!--首先需要过滤不符合的日志级别,把不需要的首先DENY掉,然后在ACCEPT需要的日志级别,次序不能颠倒-->
                            <!--INFO及以上级别拒绝输出-->
                            <ThresholdFilter level="INFO" onMatch="DENY" onMismatch="NEUTRAL"/>
                            <!--只输出DEBUG级别信息-->
                            <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
                        </Filters>
                        <Policies>
                            <!--时间策略,每隔24小时产生新的日志文件-->
                            <TimeBasedTriggeringPolicy/>
                            <!--大小策略,每到30M时产生新的日志文件-->
                            <SizeBasedTriggeringPolicy size="30MB"/>
                        </Policies>
                    </RollingFile>
                </Route>
            </Routes>
        </Routing>

        <Routing name="RollingFileInfo_${thread:threadName}">
            <Routes pattern="$${thread:threadName}">
                <Route>
                    <RollingFile name="RollingFileInfo_${thread:threadName}"
                                 fileName="${logFilePath}/${logFileName}_${thread:threadName}_info.log"
                                 filePattern="${logFilePath}/$${date:yyyy-MM}/${logFileName}-%d{yyyy-MM-dd}-${thread:threadName}-info_%i.log.gz">
                        <Filters>
                            <!--onMatch: Action to take when the filter matches. The default value is NEUTRAL-->
                            <!--onMismatch:    Action to take when the filter does not match. The default value is DENY-->
                            <!--级别在ERROR之上的都拒绝输出-->
                            <!--在组合过滤器中,接受使用NEUTRAL(中立),被第一个过滤器接受的日志信息,会继续用后面的过滤器进行过滤,只有符合所有过滤器条件的日志信息,才会被最终写入日志文件-->
                            <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/>
                            <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
                        </Filters>
                        <PatternLayout pattern="%d{yyyy.MM.dd HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
                        <Policies>
                            <TimeBasedTriggeringPolicy/>
                            <SizeBasedTriggeringPolicy size="30MB"/>
                        </Policies>
                    </RollingFile>
                </Route>
            </Routes>
        </Routing>

        <Routing name="RollingFileError_${thread:threadName}">
            <Routes pattern="$${thread:threadName}">
                <Route>
                    <RollingFile name="RollingFileError_${thread:threadName}"
                                 fileName="${logFilePath}/${logFileName}_${thread:threadName}_error.log"
                                 filePattern="${logFilePath}/$${date:yyyy-MM}/${logFileName}-%d{yyyy-MM-dd}-${thread:threadName}-error_%i.log.gz">
                        <Filters>
                            <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
                        </Filters>
                        <PatternLayout pattern="%d{yyyy.MM.dd HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
                        <Policies>
                            <TimeBasedTriggeringPolicy/>
                            <SizeBasedTriggeringPolicy size="30MB"/>
                        </Policies>
                    </RollingFile>
                </Route>
            </Routes>
        </Routing>

        <!--bufferSize整数,指定可以排队的events最大数量,如果使用BlockingQueue,这个数字必须是2的幂次-->
        <!--includeLocation默认值是FALSE,如果指定为TRUE,会降低性能,但是推荐设置为TRUE,否则不打印位置行信息-->
        <Async name="async" bufferSize="262144" includeLocation="true">
            <AppenderRef ref="RollingFileDebug_${thread:threadName}"/>
            <AppenderRef ref="RollingFileInfo_${thread:threadName}"/>
            <AppenderRef ref="RollingFileError_${thread:threadName}"/>
            <!-- 只要是级别比ERROR高的,包括ERROR就输出到控制台 -->
            <AppenderRef ref="Console" />
        </Async>

    </Appenders>

    <Loggers>

        <Logger  name="com.test"  additivity="false" level="ALL">
            <!--<AppenderRef ref="Console"/>-->
            <AppenderRef ref="TestFile"/>
            <AppenderRef ref="AllFile"/>
            <AppenderRef ref="TraceFile"/>
            <AppenderRef ref="DebugFile"/>
            <AppenderRef ref="WarnFile"/>
            <AppenderRef ref="InfoFile"/>
            <AppenderRef ref="WarnFile"/>
            <AppenderRef ref="ErrorFile"/>
            <AppenderRef ref="FatalFile"/>
            <AppenderRef ref="async"/>
        </Logger>

        <Root>

        </Root>

    </Loggers>

</Configuration>

java:

package com.test.log.simple;

import lombok.extern.log4j.Log4j2;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

@Log4j2
public class TestLog2 {


    public static void main(String[] args) {

        Logger logger = LogManager.getLogger(TestLog2.class);

        logger.trace("trace level--------11111");
        logger.debug("debug level--------11111");
        logger.info("info level--------11111");
        logger.warn("warn level--------11111");
        logger.error("error level--------11111");
        logger.fatal("fatal level--------11111");

        new Thread(() -> {
            logger.trace("trace level--------22222");
            logger.debug("debug level--------22222");
            logger.info("info level--------22222");
            logger.warn("warn level--------22222");
            logger.error("error level--------22222");
            logger.fatal("fatal level--------22222");
        }).start();

        new Thread(() -> {
            logger.trace("trace level--------33333");
            logger.debug("debug level--------33333");
            logger.info("info level--------33333");
            logger.warn("warn level--------33333");
            logger.error("error level--------33333");
            logger.fatal("fatal level--------33333");
        }).start();



    }
}

  output:

  

  

  

  

  

 

  

VM Arguments:

If use VM Arguments, add this:

-Dlog4j.configurationFile="......\log4j2.xml"

  

猜你喜欢

转载自www.cnblogs.com/kingdelee/p/6758584.html
今日推荐