javaweb基础总结-log4j2配置

关系详解:https://www.cnblogs.com/Sinte-Beuve/p/5758971.html
关系详解:http://phl.iteye.com/blog/2021461
关系详解:https://www.cnblogs.com/chenhongliang/p/5312517.html
log4j.perpoties转换logback.xml:https://logback.qos.ch/translator/
log4j2 +slf4j :https://blog.csdn.net/u014532217/article/details/78238003
System.out.println(“logger impl:”+loging.getClass().getName()); 获取类名,找出冲突包

   slf4j —————————————————
    |          |         |
   impl(0开销) (适配层)   
    |          |         |
logback    < log4j  <  log4j2(性能优并发)

推荐使用 log4j2 + slf4j + 旧版本迁移

一、log4j2单独的配置与使用
log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>

<!--###################log4j2基础配置#####################-->
<!--status 设置为 TRACE < DEBUG < INFO < WARN < ERROR < FATAL 不会会输出设置值以下的信息-->
<!--monitorInterval 每隔300s读取下配置-->
<!--
<Configuration status="WARN" monitorInterval="300">
    <Appenders>
        &lt;!&ndash;Console 输出到控制台
        <Console name="Console" target="SYSTEM_OUT">
             配置参数详解
            %d{HH:mm:ss.SSS} 表示输出到毫秒的时间
            %t 输出当前线程名称
            %-5level 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0
            %logger 输出logger名称,因为Root Logger没有名称,所以没有输出
            %msg 日志文本
            %n 换行
            其他常用的占位符有:
                %F 输出所在的类文件名,如Client.java
                %L 输出行号
                %M 输出所在方法名
                %l  输出语句所在的行数, 包括类名、方法名、文件名、行数
            <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>
        additivity="false" Logger只会在自己的appender里输出 或者只输出到文件
        <Logger name="mylog" level="trace" additivity="true">
            <AppenderRef ref="Console" />
            <AppenderRef ref="MyFile" />
        </Logger>
        <Root level="error">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>&ndash;&gt;
-->

<!---->

<!--###################log4j2日志回滚配置#####################-->
<!--    fileName  指定当前日志文件的位置和文件名称
        filePattern  指定当发生Rolling时,文件的转移和重命名规则
        SizeBasedTriggeringPolicy  指定当文件体积大于size指定的值时,触发Rolling
        DefaultRolloverStrategy  指定最多保存的文件个数
-->
<Configuration status="WARN" monitorInterval="300">
    <properties>
        <property name="LOG_HOME">D:/logs</property>
        <property name="FILE_NAME">mylog</property>
    </properties>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </Console>
        <RollingRandomAccessFile name="MyFile"
                                 fileName="${LOG_HOME}/${FILE_NAME}.log"
                                 filePattern="${LOG_HOME}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd HH-mm}-%i.log">
            <PatternLayout
                    pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
            <Policies>
                <!--mm 最小时间度,1分钟-->
                <TimeBasedTriggeringPolicy interval="1" />
                <SizeBasedTriggeringPolicy size="10 MB" />
            </Policies>
            <DefaultRolloverStrategy max="20" />
        </RollingRandomAccessFile>
    </Appenders>

    <Loggers>
        <Logger name="com.template.web" level="trace" additivity="false">
            <AppenderRef ref="MyFile" />
        </Logger>
        <Root level="error">
            <AppenderRef ref="Console" />
        </Root>
    </Loggers>
</Configuration>


<!--###################log4j2日志回滚配置+不同日志级别文件#####################-->
<!--
DENY:返回 DENY,日志将立即被抛弃不再经过其他过滤器
NEUTRAL:有序列表的下个过滤器接着处理日志
ACCEPT:日志会被立即处理,不再经过剩余过滤器
ThresholdFilter
临界值过滤器,过滤掉低于指定临界值的日志。
LevelFilter
级别过滤器,根据日志级别进行过滤。
    level:过滤级别
  onMatch:配置符合过滤条件的操作
  onMismatch:配置不符合过滤条件的操作
EvaluatorFilter
求值过滤器,评估、鉴别日志是否符合指定条件,包含节点:
  evaluator:鉴别器,通过子标签 expression 配置求值条件
  onMatch:配置符合过滤条件的操作
  onMismatch:配置不符合过滤条件的操作
-->
<!--
<Configuration status="WARN" monitorInterval="300">
    <properties>
        <property name="LOG_HOME">D:/logs</property>
    </properties>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </Console>

        <RollingRandomAccessFile name="InfoFile"
                                 fileName="${LOG_HOME}/info.log"
                                 filePattern="${LOG_HOME}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
            <Filters>
                <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL" />
                <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
            </Filters>
            <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n" />
            <Policies>
                <TimeBasedTriggeringPolicy />
                <SizeBasedTriggeringPolicy size="10 MB" />
            </Policies>
            <DefaultRolloverStrategy max="20" />
        </RollingRandomAccessFile>

        <RollingRandomAccessFile name="ErrorFile"
                                 fileName="${LOG_HOME}/error.log"
                                 filePattern="${LOG_HOME}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
            <Filters>
                <ThresholdFilter level="fatal" onMatch="DENY" onMismatch="NEUTRAL" />
                <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY" />
            </Filters>
            <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n" />
            <Policies>
                <TimeBasedTriggeringPolicy />
                <SizeBasedTriggeringPolicy size="10 MB" />
            </Policies>
            <DefaultRolloverStrategy max="20" />
        </RollingRandomAccessFile>

        <RollingRandomAccessFile name="FatalFile"
                                 fileName="${LOG_HOME}/fatal.log"
                                 filePattern="${LOG_HOME}/$${date:yyyy-MM}/fatal-%d{yyyy-MM-dd}-%i.log">
            <Filters>
                <ThresholdFilter level="fatal" onMatch="ACCEPT" onMismatch="DENY" />
            </Filters>
            <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n" />
            <Policies>
                <TimeBasedTriggeringPolicy />
                <SizeBasedTriggeringPolicy size="10 MB" />
            </Policies>
            <DefaultRolloverStrategy max="20" />
        </RollingRandomAccessFile>
    </Appenders>

    <Loggers>
        <Root level="trace">
            <AppenderRef ref="Console" />
            <AppenderRef ref="InfoFile" />
            <AppenderRef ref="ErrorFile" />
            <AppenderRef ref="FatalFile" />
        </Root>
    </Loggers>
</Configuration>-->



<!--###################log4j2日志回滚配置+异步写日志#####################-->
<!--<Configuration status="WARN" monitorInterval="300">-->
    <!--<properties>-->
        <!--<property name="LOG_HOME">D:/logs</property>-->
        <!--<property name="FILE_NAME">mylog</property>-->
    <!--</properties>-->

    <!--<Appenders>-->
        <!--<Console name="Console" target="SYSTEM_OUT">-->
            <!--<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />-->
        <!--</Console>-->
        <!--<RollingRandomAccessFile name="MyFile"-->
                                 <!--fileName="${LOG_HOME}/${FILE_NAME}.log"-->
                                 <!--filePattern="${LOG_HOME}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd HH-mm}-%i.log">-->
            <!--<PatternLayout-->
                    <!--pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n" />-->
            <!--<Policies>-->
                <!--<TimeBasedTriggeringPolicy interval="1" />-->
                <!--<SizeBasedTriggeringPolicy size="10 MB" />-->
            <!--</Policies>-->
            <!--<DefaultRolloverStrategy max="20" />-->
        <!--</RollingRandomAccessFile>-->
        <!--<Async name="Async">-->
            <!--<AppenderRef ref="MyFile" />-->
        <!--</Async>-->
    <!--</Appenders>-->

    <!--<Loggers>-->
        <!--&lt;!&ndash;日志标志&ndash;&gt;-->
        <!--<Logger name="asynclog" level="info" additivity="false" >-->
            <!--<AppenderRef ref="Async" />-->
        <!--</Logger>-->
        <!--<Root level="error">-->
            <!--<AppenderRef ref="Console" />-->
        <!--</Root>-->
    <!--</Loggers>-->
<!--</Configuration>-->

test

public class Log4j2 {
    //private static Logger loging = LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);
    //private static final Logger loging = LogManager.getLogger("mylog");
    //private static final Logger loging = LogManager.getLogger("asynclog");
    private static final Logger loging = LogManager.getLogger(Log4j2.class);

    public static void main(String[] args) {
        for (int i = 0; i < 50000; i++) {
            loging.trace("trace level");
            loging.debug("debug level");
            loging.info("info level");
            loging.warn("warn level");
            loging.error("error level");
            loging.fatal("fatal level");
        }
        try {
            Thread.sleep(1000 * 61);
        } catch (InterruptedException e) {
        }
        loging.trace("trace level");
        loging.debug("debug level");
        loging.info("info level");
        loging.warn("warn level");
        loging.error("error level");
        loging.fatal("fatal level");
    }


}
    <!--log4j2 https://logging.apache.org/log4j/2.x/maven-artifacts.html#Using_Log4j_in_your_Apache_Maven_build-->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>${log4j2.version}</version>
        </dependency>

二、log4j2+slf4j的结合的配置与使用

猜你喜欢

转载自blog.csdn.net/luzhiweistudy/article/details/80604608