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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 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日志并进行多维度分析。
相关文章
|
7天前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
100 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
1月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
196 3
|
29天前
|
Python
log日志学习
【10月更文挑战第9天】 python处理log打印模块log的使用和介绍
28 0
|
1月前
|
数据可视化
Tensorboard可视化学习笔记(一):如何可视化通过网页查看log日志
关于如何使用TensorBoard进行数据可视化的教程,包括TensorBoard的安装、配置环境变量、将数据写入TensorBoard、启动TensorBoard以及如何通过网页查看日志文件。
172 0
|
Java Spring Maven
Spring(二十)之使用Log4j记录日志
日志记录,也是常用的,比如异常信息记录或者其他相关信息记录,良好的日志记录有助于当系统出现某些不是特别大的问题时,可及时通过日志信息,捕捉到异常,从而确定是那段代码的问题,避免影响其他的代码。 关于maven依赖可以复用:Spring(十六之MVC框架 这里我简单演示: 一、编写HelloWorld.
852 0
|
2月前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
1月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
150 2
|
3月前
|
缓存 Java Maven
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
|
4天前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
14 2
 SpringBoot入门(7)- 配置热部署devtools工具
|
1月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
52 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块