Spring Boot 学习研究笔记(十八) 添加log4j2日志文件

简介: Spring Boot 学习研究笔记(十八) 添加log4j2日志文件

Spring Boot  添加log4j2日志文件

 

  对于一个线上程序或者服务而言,重要的是要有日志输出,这样才能方便运维。而日志的输出需要有一定的规划,如日志命名、日志大小,日志分割的文件个数等。在SpringBoot的框架下,会使用log4j2

 

Log4j其实可以理解为log for java,所以是java的日志框架,提供日志服务,而Log4j 2是Log4j的升级版本,性能比logback好。   日志级别优先级从低到高:ALL、DEBUG、 INFO、 WARN、 ERROR、FATAL、 OFF。一般官网建议就使用DEBUG、INFO、WARN和ERROR这四个,但是我们可以加一个ALL最低级别的来进行总日志的输出。日志的等级越高,打出的日志越少。

 

1、添加maven依赖

 

     <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion><!-- 去除默认配置 -->
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- 支持log4j2日志配置 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
            <version>1.5.6.RELEASE</version>
        </dependency>
        <!-- 支持识别yml配置 -->
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-yaml</artifactId>
        </dependency>

2、在resouces文件下配置文件

log4j2-spring-dev.xml :开发环境的日志输出配置,可自定义输出路径

log4j2-spring-release.xml:生产环境的日志输出配置,可自定义输出路径

 

 

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="INFO" monitorInterval="60">
    <Properties>
        <Property name="app.name"></Property>
        <Property name="log.home">D:/logs/</Property>
        <!-- <Property name="log.pattern">[%d] [%-5p] [%t] [%c{3.}] [%l] [_] [%m]%n</Property> -->
        <Property name="log.file.charset">UTF-8</Property>
        <Property name="log.file.pattern">
            [%d] [%-5p] [%t] [%c{3.}] %m%n
        </Property>
        <Property name="log.console.charset">UTF-8</Property>
        <Property name="log.console.pattern">
            %d %highlight{%-5p} %style{%pid}{magenta} --- [%15.15t] %style{%-37.37c{36}}{cyan} : %m%n%n
        </Property>
    </Properties>
    <!--先定义所有的appender -->
    <appenders>
        <!-- 这个会打印出所有的info及以上级别的信息,每次大小超过size,则这size大小的日志会自动存入按年月日建立的文件夹下面并进行压缩,作为存档 -->
        <RollingFile name="FILE_INFO" immediateFlush="false"
            fileName="${log.home}${app.name}/info_${app.name}.log"
            filePattern="${log.home}${app.name}/$${date:MM}/$${date:dd}/info_${app.name}_%d{yyyyMMdd}_%i.log.gz">
            <!-- 只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
            <Filters>
                <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL" />
                <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY" />
            </Filters>
            <PatternLayout pattern="${log.file.pattern}" charset="${log.file.charset}" />
            <Policies>
                <TimeBasedTriggeringPolicy />
                <!-- 日志文件归档大小 -->
                <SizeBasedTriggeringPolicy size="100 MB" />
            </Policies>
            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了99 -->
            <DefaultRolloverStrategy max="99" />
        </RollingFile>
        <RollingFile name="FILE_WARN" immediateFlush="false"
            fileName="${log.home}${app.name}/warn_${app.name}.log"
            filePattern="${log.home}${app.name}/$${date:MM}/$${date:dd}/warn_${app.name}_%d{yyyyMMdd}_%i.log.gz">
            <Filters>
                <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL" />
                <ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY" />
            </Filters>
            <PatternLayout pattern="${log.file.pattern}" charset="${log.file.charset}" />
            <Policies>
                <TimeBasedTriggeringPolicy />
                <SizeBasedTriggeringPolicy size="100 MB" />
            </Policies>
            <DefaultRolloverStrategy max="99" />
        </RollingFile>
        <RollingFile name="FILE_ERROR" immediateFlush="false"
            fileName="${log.home}${app.name}/error_${app.name}.log"
            filePattern="${log.home}${app.name}/$${date:MM}/$${date:dd}/error_${app.name}_%d{yyyyMMdd}_%i.log.gz">
            <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY" />
            <PatternLayout pattern="${log.file.pattern}" charset="${log.file.charset}" />
            <Policies>
                <TimeBasedTriggeringPolicy />
                <SizeBasedTriggeringPolicy size="100 MB" />
            </Policies>
            <DefaultRolloverStrategy max="99" />
        </RollingFile>
        <!-- 控制终端输出 -->
        <Console name="STDOUT" target="SYSTEM_OUT">
            <Filters>
                <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY" />
            </Filters>
            <PatternLayout pattern="${log.console.pattern}" charset="${log.console.charset}" />
        </Console>
    </appenders>
    <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->
    <loggers>
        <!-- 配置日志的根节点 -->
        <Root level="INFO">
            <appender-ref ref="FILE_ERROR" />
            <appender-ref ref="FILE_WARN" />
            <appender-ref ref="FILE_INFO" />
            <appender-ref ref="STDOUT" />
        </Root>
        <!-- 第三方日志系统 -->
        <logger name="org.springframework.web" level="WARN"/>
        <logger name="org.springboot.sample" level="WARN" />
    </loggers>
</configuration>

 

3、关联日志输出文件

#配置日志
logging.config=classpath:log4j2-spring-release.xml
#logging.config=classpath:log4j2-spring-dev.xml

 

4、输出日志测试运行

将在配置的日志输出目录,生成对应的配置文件

 

 

 

 

 

 


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
Java Spring
【编程笔记】在 Spring 项目中使用 RestTemplate 发送网络请求
【编程笔记】在 Spring 项目中使用 RestTemplate 发送网络请求
94 0
|
3月前
|
Java
SpringBoot 集成log4j2
SpringBoot 集成log4j2
SpringBoot 集成log4j2
|
2月前
|
XML Java 数据格式
【二十九】springboot整合logback实现日志管理
【二十九】springboot整合logback实现日志管理
61 1
|
4月前
|
Java Spring
【Spring Boot】logback和log4j日志异常处理
【1月更文挑战第25天】【Spring Boot】logback和log4j日志异常处理
|
3月前
|
JavaScript 前端开发 Java
springboot整合minio+vue实现大文件分片上传,断点续传(复制可用,包含minio工具类)
springboot整合minio+vue实现大文件分片上传,断点续传(复制可用,包含minio工具类)
469 0
|
3天前
|
Java Spring 容器
【Spring系列笔记】IOC与DI
IoC 和 DI 是面向对象编程中的两个相关概念,它们主要用于解决程序中的依赖管理和解耦问题。 控制反转是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入和依赖查找。
19 2
|
4天前
|
Java 数据安全/隐私保护 开发者
【SpringBoot】讲清楚日志文件&&lombok
【SpringBoot】讲清楚日志文件&&lombok
16 5
|
2月前
|
监控 Java 测试技术
日志框架到底是Logback 还是 Log4j2
日志框架到底是Logback 还是 Log4j2
20 0
|
2月前
|
SQL Java 数据库连接
springboot解析txt文件顺便加到数据库中(nohup文件)
springboot解析txt文件顺便加到数据库中(nohup文件)
113 1
|
2月前
|
存储 JavaScript 前端开发
Spring Boot + Vue: 实现文件导入导出功能
本文介绍了使用Spring Boot和Vue实现文件导入导出的步骤。在后端,Spring Boot通过`MultipartFile`接收上传文件,保存至服务器,并使用`ResponseEntity`提供文件下载。前端部分,Vue项目借助`axios`发送HTTP请求,实现文件选择、上传及下载功能。这种前后端分离的实现方式提高了应用的可维护性和可扩展性。
43 2