springspringboot配置logback日志(代码片段)

Kant101 Kant101     2022-12-21     111

关键词:

1. 概述

日志在一个业务系统重非常重要,包含有非常重要的数据,可以用于客户反馈问题的排查、线上问题的追踪,以及根据日志数据对业务情况进行有效的监控配置,及时发现线上问题。

常用的日志框架有好几种,但最常用的是 logback、log4j 等。本文主要讲解 logback 日志框架的配置,后面再介绍 log4j 日志框架的配置。

 

2. 案例与解析

定义日志文件 logback.xml

<configuration>
    <property name="LOG_PATTERN" value="%dyyyy-MM-dd HH:mm:ss %thread %-5level %logger36 -%msg%n"/>
    <property name="FILE_PATH" value="logs/logback.%dyyyy-MM-dd.%i.log"/>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!--按照上面配置的LOG_PATTERN来打印日志-->
            <pattern>$LOG_PATTERN</pattern>
        </encoder>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--按上面配置的 FILE_PATTERN 路径来存储日志-->
            <fileNamePattern>$FILE_PATH</fileNamePattern>
            <!--日志保存15天-->
            <maxHistory>15</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!--单个日志文件的最大,超过则新建日志文件存储-->
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>

        <encoder>
            <!--按照上面配置的 LOG_PATTERN 来打印日志-->
            <pattern>$LOG_PATTERN</pattern>
        </encoder>
    </appender>

    <!--定义日志输出级别-->
    <logger name="cn.edu.demo" level="WARN"/>
    <logger name="cn.edu.demo.controller" level="INFO"/>
    <logger name="cn.edu.demo.config" level="INFO"/>
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>
</configuration>

 

在 SpringBoot 项目的配置文件中配置

在 SoringBoot 的 application.properties (或者ymal格式的application.yml) 配置使用 logback

# logback
logging.config=classpath:logback.xml

 

配置项解析

property

定义了两个变量 LOG_PATTERNFILE_PATH,分别表示日志信息应该以什么格式输出,和日志文件输出的位置以及日志文件的命名规则;

1) LOG_PATTERN

"%dyyyy-MM-dd HH:mm:ss %thread %-5level %logger36 -%msg%n"
  • 定义了一个格式,命名为 “LOG_PATTERN”
  • %date 或 %d 表示日期;
  • %thread 表示线程名;
  • %-5level 表示级别从左显示5个字符宽度;
  • %logger36 表示 logger 名字最长36个字符;
  • %msg 表示日志信息;
  • %n 是换行符;

 

2) FILE_PATH

"logs/logback.%dyyyy-MM-dd.%i.log"
  • 定义了一个格式,命名为 “FILE_PATH”,为日志的文件的存储位置和格式,在下面的 appender 中引用这个日志文件格式;
  • 如上,产生的日志文件被存储在项目的根文件夹下的 logs 目录下;
  • %d 为日期,%i 为该日期下的第几个日志文件(因为业务系统有可能产生很多的日志导致日志文件过大,当我们配置文件大于某个值时就进行滚动,那么就是在同一个日期下产生多个日志文件,那我们就需要 %i 来命名各个日志文件);
  • 示例,系统在 2022-12-12 产生的日志为形如 “logback.2022-12-12.0.log”、“logback.2022-12-12.1.log”、“logback.2022-12-12.2.log”、… 的日志文件;

 

appender

每一个appender代表了一个输出,在每个appender中的class设置对应的类即可指定日志输出的环境。例如以上的配置文件中:

  • 如果我们要在控制台输出日志,那么我们就需要将 appender 的 class 属性指定为 ch.qos.logback.core.ConsoleAppender
  • 如果我们要讲日志输出到文件中,并且要求日志文件按要求回滚,那么我们就需要将 appender 的 class 属性指定为 ch.qos.logback.core.rolling.RollingFileAppender

 

root

root 用于定义根 logger 的日志级别。logback 中的 logger 采用的是一种 “继承” 的机制,所有 class 中默认的就是采用的这个 root 中定义的日志级别,如果在 logger 中对某个包小的 class 指定了另外的日志级别才会覆盖掉这个 root 的日志级别。

<root level="INFO">
    <appender-ref ref="CONSOLE"/>
    <appender-ref ref="FILE"/>
</root>

以上的配置 root 的日志级别为 INFO,并且引用了两个 appender,表示默认情况下这两个 appender 都生效,只要继承的 logger 没有指定其他的 appender,那么默认的就是使用这两个 appender。

<!--定义日志输出级别-->
<logger name="cn.edu.demo" level="WARN"/>
<logger name="cn.edu.demo.controller" level="INFO">
    <appender-ref ref="CONSOLE"/>
</logger>
<root level="INFO">
<!--        <appender-ref ref="CONSOLE"/>-->
    <appender-ref ref="FILE"/>
</root>

例如以上的配置中,root 只指定了 “FILE” 这一个 appender,在 cn.edu.demo.controller 包继承了 root 的 logger,又新增了 “CONSOLE” 的 logger,那么在 cn.edu.demo.controller 包下的日志就会输出到 CONSOLE 和 FILE 中,而 cn.edu.demo 包下其他 class 中的 logger 只会将日志输出到 FILE 中,不会在控制台输出。

 

logger

用于覆盖 root 中指定的日志的级别.

<logger name="cn.edu.demo" level="WARN"/>
<logger name="cn.edu.demo.controller" level="INFO"/>
<logger name="cn.edu.demo.config" level="INFO"/>

以上配置中,指定了 cn.edu.demo 包下的 class 都用 WARN 级别的日志; cn.edu.demo.controllercn.edu.demo.config 包下的 class 都采用 INFO 级别的日志。而其他的 class 则用 root 中定义的日志级别

 

3. 测试

在代码中通过如下地方式获取 logger

private static final Logger logger = LoggerFactory.getLogger(MybatisRedisCache.class);

 

控制台输出的日志

 

文件输出的日志

 

参考文献

[1] https://blog.csdn.net/qq_56044050/article/details/123454820

springspringboot配置log4j2日志(代码片段)

1.概述官方参考文档:Log4jApacheLog4j2是对原先的Log4j项目的升级版本,参考了logback的一些优秀的设计,并且修复了一些问题,因此带来了一些重大的提升。异常处理,在logback中,Appender中的异常不会被应用... 查看详情

springspringboot配置log4j2日志(代码片段)

1.概述官方参考文档:Log4jApacheLog4j2是对原先的Log4j项目的升级版本,参考了logback的一些优秀的设计,并且修复了一些问题,因此带来了一些重大的提升。异常处理,在logback中,Appender中的异常不会被应用... 查看详情

springspringboot的配置文件application.yml

spring:datasource:#本地库url:jdbc:mysql://192.168.18.7:3306/shiptrackersmart?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull#正式库#url:jdbc:mysql://192.168.3.141:3306/shi 查看详情

springspringboot2.6.4配置跨域

网络上的springboot配置跨域的代码太远古了,使用了直接报错,直接给出解决代码:@ConfigurationpublicclassSpringMvcConfigimplementsWebMvcConfigurer/***允许跨域*@paramregistryregistry*/@OverridepublicvoidaddCor 查看详情

springspringboot2.6.4配置跨域(代码片段)

网络上的springboot配置跨域的代码太远古了,使用了直接报错,直接给出解决代码:@ConfigurationpublicclassSpringMvcConfigimplementsWebMvcConfigurer/***允许跨域*@paramregistryregistry*/@OverridepublicvoidaddCor 查看详情

jasypt集成springspringboot加密(代码片段)

简介1、应用场景针对properties和xml配置文件的敏感内容进行加密处理(比如数据库连接密码,通讯秘钥)2、jasypt是一个java实现的安全框架spring配置1、使用springmvc集成,可继承PropertyPlaceholderConfigurer子类publicclassMyPr... 查看详情

springspringboot和springcloud的小小区别

以下纯属个人理解,如有错可指出,勿喷QAQSpring:    需要写.xml配置文件或配置类,以注入需要的bean对象,如JDBC、事务管理器等等,且如果是web项目需自己配置tomcat,运行;没有启动类。使用事务既... 查看详情

springspringboot定时任务(代码片段)

经过测试,spring的定时任务需要以下配置:1.修改applicationContext.xmlxmlns部分增:xmlns:task="http://www.springframework.org/schema/task"xsi部分增加:http://www.springframework.org/schema/t 查看详情

springspringboot使用jpa集成elasticsearch7.0(代码片段)

背景springboot的datajpa是支持elasticsearch的。在springboot2.3之前,连接es的端口是9300,但实测下来各种版本之间对应关系很复杂,springboot2.3【注:具体哪个版本没有实测】之后可以配置rest接口方式连接es,理论上可以适配所有版本的e... 查看详情

springspringboot2.6.4整合swagger3.0.0填坑

【Spring】SpringBoot2.6.4整合Swagger3.0.0填坑仓库配置使用如下依赖<!--swagger-ui--><dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><vers 查看详情

springspringboot定时任务(代码片段)

经过测试,spring的定时任务需要以下配置:1.修改applicationContext.xmlxmlns部分增:xmlns:task="http://www.springframework.org/schema/task"xsi部分增加:http://www.springframework.org/schema/taskhttp://www.springframework.org/schema/task/spring... 查看详情

springspringboot是如何做到去xml的?

参考技术A使用configuration注解替换替换applicationContext.xml中的<beans>标签SpringBoot除了高度集成封装了Spring一系列框架之外,还封装了web容器.SpringBoot支持嵌入tomcatjettyundertow三种web容器,查看EmbeddedServletContainerAutoConfiguration类源码... 查看详情

logback配置(代码片段)

logback配置    Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logback-core,logback-classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个改良版本。此外logback-cla... 查看详情

logback常用配置详解(序)logback简介

logback常用配置详解(序)logback简介摘自:http://aub.iteye.com/blog/1101222 博客分类: Logjavaloglogback原创文章,转载请指明出处:http://aub.iteye.com/blog/1101222,尊重他人即尊重自己详细整理了logback常用配置,不是官网手册的翻译... 查看详情

logback配置错误

09:18:09,724|-INFOinch.qos.logback.classic.LoggerContext[default]-CouldNOTfindresource[logback-test.xml]09:18:09,724|-INFOinch.qos.logback.classic.LoggerContext[default]-CouldNOTfindresource[logback.g 查看详情

2017.7.27logback配置文件

参考来自: Java深入-logback的配置和使用 1模块组成logback分成三个模块:logback-core,logback-classic和logback-access。1logback-core:其他两个的基础模块。2logback-classic:log4j的改良版本。完整实现slf4j的api,因此可以很方便的换成其... 查看详情

使用多个配置文件配置 logback

】使用多个配置文件配置logback【英文标题】:Configurelogbackusingseveralprofiles【发布时间】:2016-06-0915:22:17【问题描述】:我正在尝试通过springboot下的配置文件拆分我的logback.xml,这是我的方法:logback-prod.xml<?xmlversion="1.0"encoding="... 查看详情

logback的配置和使用

1、logback介绍   Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logback-core,logback-classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个改良版本。此外logback-class... 查看详情