zoukankan      html  css  js  c++  java
  • springboot整合log4j2日志详解

    1.创建springboot项目(这里不讲解)

    2.pom.xml中引入jar包相关依赖

    注:springboot默认是用logback的日志框架的,所以需要排除logback,不然会出现jar依赖冲突的报错

    <dependency>  
        <groupId>org.springframework.boot</groupId>  
        <artifactId>spring-boot-starter-web</artifactId>  
        <exclusions><!-- 去掉springboot默认配置 -->  
            <exclusion>  
                <groupId>org.springframework.boot</groupId>  
                <artifactId>spring-boot-starter-logging</artifactId>  
            </exclusion>  
        </exclusions>  
    </dependency> 
    
    <dependency> <!-- 引入log4j2依赖 -->  
        <groupId>org.springframework.boot</groupId>  
        <artifactId>spring-boot-starter-log4j2</artifactId>  
    </dependency>

    2.写配置文件

    (1)如果自定义了文件名,需要在application.yml中配置。

    logging:
      config: xxxx.xml
      level:
        cn.jay.repository: trace

    (2)默认情况下,系统会在classpath下查找配置文件:(按照以下顺序)

    1.classpath下名为 log4j-test.json 或者log4j-test.jsn文件
    2.classpath下名为 log4j2-test.xml
    3.classpath下名为 log4j.json 或者log4j.jsn文件
    4.classpath下名为 log4j2.xml

    注:此处我们常用的是log4j2.xml,详解如下

    <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
    <!--
        自定义命名格式:
        %d:发生时间,%d{yyyy-MM-dd HH:mm:ss,SSS},输出类似:2020-02-20 22:10:28,921
        %F:输出所在的类文件名
        %t:线程名称
        %p:日志级别
        %c:日志消息所在类名
        %m:消息内容
        %M:输出所在函数名
        %x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
        %l:执行的函数名(类名称:行号)com.core.LogHelper.aroundService(LogHelper.java:32)
        %n:换行
        %i:从1开始自增数字
        %-5level:输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0
        “${sys:user.home}”是HOME目录 如:C:Usersheave, 此处指定任意目录如:D:logs
    -->
    <!--设置log4j2自身log级别为warn,每间隔30秒数自动检测配置是否发生修改,并重新配置-->
    <configuration status="warn" monitorInterval="30">
        <Properties>
            <!-- 日志显示模板,显示内容的格式如下 -->
            <!-- [21:55:33:047] [INFO] - org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) - Initializing Spring embedded WebApplicationContext -->
            <Property name="log_pattern" value="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            <!-- 保存日志文件目录 -->
            <!--<Property name="file_path" value="${sys:user.home}/logs"/>-->
            <Property name="file_path" value="D:/logs"/>
            <!-- 日志文件的最大容量,超过该值就进行备份 -->
            <Property name="file_max_size" value="30MB"/>
            <!-- 备份的文件夹名称 如下为:2020-02 -->
            <Property name="backup_folder" value="$${date:yyyy-MM}"/>
            <!-- 备份文件的后缀,日志文件超过file_max_size会备份到filePattern指定的目录下 -->
            <Property name="backup_file_suffix" value="-%d{yyyy-MM-dd}-%i.log"/>
        </Properties>
    
        <!--定义appender-->
        <appenders>
    
            <!--控制台的输出配置-->
            <console name="Console" target="SYSTEM_OUT">
                <!-- 设置控制台只输出info及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
                <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
                <!--输出日志的格式-->
                <PatternLayout pattern="${log_pattern}"/>
            </console>
    
            <!-- 所有的日志信息会打印到此文件中,append=false每次启动程序会自动清空 -->
            <!-- <File name="all" fileName="${file_path}/all.log" append="true">
                <PatternLayout pattern="${log_pattern}"/>
            </File>-->
            <!--
            该RollingFile存储INFO级别的日志,
            默认存储到 fileName 文件中
            超过SizeBasedTriggeringPolicy的设定值,则存储到 filePattern 文件中
            -->
            <RollingFile name="RollingFileInfo" fileName="${file_path}/info.log"
                         filePattern="${file_path}/${backup_folder}/info${backup_file_suffix}">
                <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
                <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
                <!-- 写入日志文件的模板 -->
                <PatternLayout pattern="${log_pattern}"/>
                <Policies>
                    <TimeBasedTriggeringPolicy/>
                    <SizeBasedTriggeringPolicy size="${file_max_size}"/>
                </Policies>
                <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,超过该数量,会滚动删除前面的记录 -->
                <DefaultRolloverStrategy max="20"/>
            </RollingFile>
    
            <RollingFile name="RollingFileWarn" fileName="${file_path}/warn.log"
                         filePattern="${file_path}/${backup_folder}/warn${backup_file_suffix}">
                <ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/>
                <PatternLayout pattern="${log_pattern}"/>
                <Policies>
                    <TimeBasedTriggeringPolicy/>
                    <SizeBasedTriggeringPolicy size="${file_max_size}"/>
                </Policies>
            </RollingFile>
    
            <RollingFile name="RollingFileError" fileName="${file_path}/error.log"                   filePattern="${file_path}/${backup_folder}/error${backup_file_suffix}">
                <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
                <PatternLayout pattern="${log_pattern}"/>
                <Policies>
                    <TimeBasedTriggeringPolicy/>
                    <SizeBasedTriggeringPolicy size="${file_max_size}"/>
                </Policies>
            </RollingFile>
        </appenders>
    
        <!-- 只有定义了logger并使用appender-ref,appender才会生效 -->
        <loggers>
            <!--过滤掉spring和hibernate的一些无用的debug信息-->
            <logger name="org.springframework" level="ERROR"/>
            <logger name="org.mybatis" level="ERROR">
                <!-- 添加如下设置,控制台会再打印一次 -->
                <AppenderRef ref="Console"/>
            </logger>
            <root level="INFO">
                <appender-ref ref="Console"/>
                <appender-ref ref="RollingFileInfo"/>
                <appender-ref ref="RollingFileWarn"/>
                <appender-ref ref="RollingFileError"/>
            </root>
        </loggers>
    
    </configuration>

    目录结构如下:

    3.springboot启动类 LogApplication.java

    @SpringBootApplication
    public class LogApplication {
        private static Logger logger = LoggerFactory.getLogger(LogApplication.class);
        public static void main(String[] args) {
    
            logger.debug("log4j2 ——————————debug!————————————");
            logger.info("log4j2  ——————————info!————————————-");
            logger.error("log4j2 ——————————error!————————————");
            logger.warn("log4j2  ——————————warn!————————————-");
            SpringApplication.run(LogApplication.class, args);
            logger.info("springboot启动成功。。。。。。。。。。。。。。");
        }
    }

    4.controller测试类:

    @RestController
    public class DemoController {
        private static final Logger log = LoggerFactory.getLogger(DemoController.class);
    
        @RequestMapping("/test")
        public String demo() {
            log.info("log4j2-------/test接口调用成功-----------");
            return "log4j2";
        }
    }

    5.启动springboot,结果如下:

    浏览器输入:http://localhost:8001/test,如下

    ————————————————————————

    使用完毕

    <Property name="file_path" value="D:/logs"/>
  • 相关阅读:
    鼠标移动,背景变色
    datatable 删除行
    GridView新增一行,更新所有行實現
    让层垂直居中于浏览器窗口
    extjs学习笔记(转)
    Extjs中的panel
    JDK和JRE的区别(转)
    EXTJS中form添加按钮触发事件
    web.xml详解
    Oracle数据库中的诊断文件(转)
  • 原文地址:https://www.cnblogs.com/e-x-c-e-ption/p/12845857.html
Copyright © 2011-2022 走看看