• log4j2-2.13.0版本安装


    一、log4j2介绍

    • 暂略

    二、log4j2安装

    • 测试工程结构

    pom.xml 添加log4j2所需jar包依赖

            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-api</artifactId>
                <version>2.13.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-core</artifactId>
                <version>2.13.0</version>
            </dependency>
    

    log4j2.xml 配置

    <?xml version="1.0" encoding="UTF-8"?>
    <!--
        status属性:查看log4j的装配过程,值为OFF表示关闭,值为debug等日志级别为查看日志创建过程(正常情况下只有debug和trace级别日志显示)
        monitorInterval : 配置文件更改后重新加载,不用重启应用,单位秒
    -->
    <configuration status="error">
        <!--全局属性声明,方便后面使用${属性名称} 进行引用-->
        <properties>
            <!-- /代表的是盘符根目录, 还有诸如 .代表当前当前项目路径 ,我们也可以使用@ 名称@从pom.xml中动态获取这些值 -->
            <property name="LOG_HOME">logs</property>
            <property name="DEBUG_FILE_NAME">debug</property>
            <property name="ERROR_FILE_NAME">error</property>
        </properties>
    
        <!--先定义所有的appender -->
        <appenders>
            <!--这个输出控制台的配置 -->
            <Console name="Console" target="SYSTEM_OUT">
                <!--
                控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)
                ThresholdFilter:指定追加器过滤日志的级别
                level:设定级别
                onmatch:匹配符合条件的日志输出
                onMismatch:拒绝不符合条件
            -->
    
                <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
                <!--    输出日志的格式 -->
                <PatternLayout pattern="[name] %d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
    
            </Console>
    
            <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,false适合临时测试用
            append为TRUE表示消息增加到指定文件中,false表示消息覆盖指定的文件内容,默认值是true -->
            <File name="log" fileName="${LOG_HOME}/log4j2.log" append="false">
                <PatternLayout pattern="[name] %d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
                <!--<PatternLayout pattern="[log4j2_test]  %-d{yyyy-MM-dd HH-mm-ss.SSS} [%-5p] %C:%L  %m%n"/>-->
    
            </File>
    
            <!--添加过滤器ThresholdFilter,可以有选择的输出某个级别以上的类别  onMatch="ACCEPT" onMismatch="DENY"意思是匹配就接受,否则直接拒绝  -->
            <File name="ERROR" fileName="${LOG_HOME}/error.log">
                <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
                <PatternLayout pattern="[name] %d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
            </File>
    
            <!--这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
            <RollingFile name="RollingFile" fileName="${LOG_HOME}/web.log"
                         filePattern="logs/$${date:yyyy-MM}/web-%d{MM-dd-yyyy}-%i.log.gz">
                <!--
                间隔时间备份策略
                modulate为true表示以0点为边界进行时间偏移计算,
                例:每隔4个小时进行日志封存,当前时间为3点,那么1个小时后进行一次日志封存(将之前的日志放置到filePattern指定的封存位置)
                interval:间隔时间(其单位有filePattern中-dd HH%d{yyyy-MM}的最小单位来决定,)
                -->
                <TimeBasedTriggeringPolicy modulate="true" interval="12"/>
                <PatternLayout pattern="[name] %d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
                <SizeBasedTriggeringPolicy size="5MB"/>
            </RollingFile>
            <!--&lt;!&ndash;-->
            <!--以大小为策略进行日志封存,%i用于记录封存文件的生成先后顺序(),.zip/.gz等指定压缩格式-->
            <!--immediateFlush:log4j2接收到日志事件时,是否立即将日志刷到磁盘。默认为true。-->
            <!--&ndash;&gt;-->
            <!--<RollingFile name="sizedRollFile" fileName="${LOG_HOME}/sizerollfile.log" immediateFlush="true"-->
            <!--filePattern="${LOG_HOME}/$${date:yyyy-MM-dd}/sizerollfile-%d{yyyy-MM-dd HH}-%i.log.zip">-->
            <!--<PatternLayout pattern="[log4j2-demo] %-d{yyyy-MM-dd HH:mm:ss.SSS} [%-5p] %c:%L %m%n"/>-->
            <!--&lt;!&ndash; 当有多个策略时,使用Policies 标签&ndash;&gt;-->
            <!--<Policies>-->
            <!--<TimeBasedTriggeringPolicy />-->
            <!--&lt;!&ndash;基于大小的触发策略,size指定大小&ndash;&gt;-->
            <!--<SizeBasedTriggeringPolicy size="10 kB"/>-->
            <!--</Policies>-->
            <!--<Filters>-->
            <!--<thresholdFilter level="debug" onmatch="ACCEPT" onMismatch="DENY"/>-->
            <!--</Filters>-->
            <!--&lt;!&ndash;-->
            <!--控制生成的封存文件数量的一种策略,max控制filePattern 中的%i ,不指定默认为7,-->
            <!--(就是你只能看见7个封存的文件,多余的你可以理解为覆盖掉了)-->
            <!--这虽然也是一种策略,但是放置在策略标签之外-->
            <!--&ndash;&gt;-->
            <!--<DefaultRolloverStrategy max="20" />-->
            <!--</RollingFile>-->
    
        </appenders>
        <!--定义logger,只有定义了logger并引入的appender,appender才会生效 -->
        <loggers>
            <root level="trace">
                <appender-ref ref="RollingFile"/>
                <appender-ref ref="Console"/>
                <appender-ref ref="ERROR"/>
                <appender-ref ref="log"/>
            </root>
        </loggers>
    </configuration>
    

    log4j2测试类

    
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    
    public class log4j2Test {
    
        private static final Logger logger= LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);
    
        public static void main(String[] args) {
            for(int i=0;i<3;i++){
                // 记录trace级别的信息
                logger.trace("log4j2 trace日志输出:This is trace message.");
                // 记录debug级别的信息
                logger.debug("log4j2 debug日志输出:This is debug message.");
                // 记录info级别的信息
                logger.info("log4j2 info日志输出:This is info message.");
                // 记录warn级别的信息
                logger.warn("log4j2 warn日志输出:This is warn message.");
                // 记录error级别的信息
                logger.error("log4j2 error日志输出:This is error message.");
                // 记录fatal级别的信息
                logger.fatal("log4j2 fatal日志输出:This is fatal message.");
            }
        }
    }
    
    • 测试类结果

  • 相关阅读:
    常见的java异常——java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path
    sqlyong到期后怎么办
    解决Jsp与Java后台之间url传值中文乱码问题
    jsp页面获取当前系统时间
    ajax异步发送时遇到的问题
    Shell 基本运算符
    tcp的半连接与完全连接队列(三)源码分析
    tcp的半连接与完全连接队列(二)
    TCP连接的ISN、连接建立超时及TCP的长短连接
    /proc/sys/net/ipv4/下各参数含义
  • 原文地址:https://www.cnblogs.com/shook/p/13278915.html
Copyright © 2020-2023  润新知