SpringBoot整合Logback日志框架配置全解析

这篇具有很好参考价值的文章主要介绍了SpringBoot整合Logback日志框架配置全解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Logback日志框架介绍

SpringBoot使用 Commons Logging 进行所有内部日志的记录,但默认配置也提供了对常用日志的支持,如 Java Util Logging,Log4J2,和Logback. 每种logger都可以通过配置使用控制台或文件输出日志内容。

Logback是log4j框架的作者开发的新一代日志框架,它效率更高、能够适应诸多的运行环境,同时天然支持SLF4J。

二、SpringBoot与Logback

假设你使用starter启动创建SpringBoot应用,则默认已经导入了spring-boot-starter-logging的依赖,相继也就导入了logback所需要的依赖。

springboot logback配置详解,java,spring boot,logback,后端

1、默认日志格式

于是,当我们启动SpringBoot应用时,控制台将会显示INFO级别的日志输出。

springboot logback配置详解,java,spring boot,logback,后端

可以看到,输出内容如下:

  • 日期和时间,精确到毫秒级别。

  • 日志级别:INFO,【日志级别默认从高到低:ERROR,WARN,INFO,DEBUG,TRACE】。

  • 进程ID

  • 分隔符:来标识实际日志消息的开始。

  • 线程名:用方括号括起来(在控制台输出时可能被截断)。

  • 日志记录器名称:这通常是源类名称(通常缩写)。

  • 日志信息

logback是没有FATAL级别的,它对应的就是ERROR。

2、控制台输出

默认的日志配置就是将日志信息显示到控制台,默认情况下,将会显示INFO级别以上的日志信息。你还可以通过使用--debug标志启动debug模式。

$ java -jar myapp.jar --debug

使用IDEA操作可以编辑Program arguments:--debug。

在application.properties中配置debug=true同样也可以将日志级别调整到DEBUG。

3、文件输出

默认情况下,SpringBoot的日志只会输出到控制台,如果你还想输出到文件中,你需要配置logging.file.namelogging.file.path两个属性。

下面这个表格展示如何组合使用logging.*来达到理想的效果:

logging.file.name logging.file.path Example Description
(none) (none) 只会输出到控制台
指定文件 (none) my.log 写入指定的日志文件在当前项目目录下
(none) 指定目录 log 在当前项目下的log目录,写入spring.log文件

日志文件达到10 MB时会触发滚动策略【切分】,默认情况下会记录INFO以上级别的信息。 可以使用logging.file.max-size属性更改大小限制。 除非已设置logging.file.max-history属性,否则默认情况下将保留最近7天的轮转日志文件。 可以使用logging.file.total-size-cap限制日志归档文件的总大小。 当日志归档的总大小超过该阈值时,将删除备份。 要在应用程序启动时强制清除日志存档,请使用logging.file.clean-history-on-start属性。

4、日志级别

可以使用logging.level设置所有受支持的日志记录器的级别。

logging.level.root=warn
logging.level.org.springframework.web=debug
logging.level.org.hibernate=error

5、日志组

使用logging.group能够将相关的logger组合在一起统一管理日志级别等配置。使用方法如下:

假设定义了group为tomcat:

logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat

一旦这样定义之后,就可以仅仅通过一行配置,完成相关三个logger的级别配置:

logging.level.tomcat=TRACE

SpringBoot预定义了两个开箱即用的日志组:

Name Loggers
web org.springframework.core.codecorg.springframework.httporg.springframework.weborg.springframework.boot.actuate.endpoint.weborg.springframework.boot.web.servlet.ServletContextInitializerBeans
sql org.springframework.jdbc.coreorg.hibernate.SQLorg.jooq.tools.LoggerListener
# pre-defined
logging.level.web=debug
logging.level.sql=debug

6、自定义log配置

由于日志服务一般都在ApplicationContext创建前就初始化了,它并不是必须通过Spring的配置文件控制。因此通过系统属性和传统的Spring Boot外部配置文件依然可以很好的支持日志控制和管理。

你可以根据你的日志系统,按照下面表格的定义规则,选择定义对应的日志配置:

Logging System Customization
Logback logback-spring.xmllogback-spring.groovylogback.xml, or logback.groovy
Log4j2 log4j2-spring.xml or log4j2.xml
JDK (Java Util Logging) logging.properties

SpringBoot官方推荐使用带有-spring的文件名作为配置,如logback-spring.xml而不是logback.xml

这样命名的好处在于:因为标准的logback.xml配置文件加载得太早,所以不能在其中使用扩展,需要使用logback-spring.xml

当然上面是默认的命名规则,如果你想自定义xml的名称,自定义路径,可以通过logging.config属性配置:logging.config=classpath:logging-config.xml

三、logback-spring.xml自定义注意事项

接下来分享一份配置十分详细的logback.xml配置,参照注释,应该就能够掌握xml的定义。

<?xml version="1.0" encoding="UTF-8"?>
<configuration  scan="true" scanPeriod="10 seconds" debug="false">
    <!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
    <!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
    <!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
    <!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
    <contextName>logback</contextName>
    <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
    <property name="log.path" value="log" />
    <property name="console_log_pattern"
              value="%black(%contextName-) %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}) - %gray(%msg%n)"/>
    <property name="charset" value="UTF-8"/>
    <!--输出到控制台-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
        <!-- 例如:如果此处配置了INFO级别,则后面其他位置即使配置了DEBUG级别的日志,也不会被输出 -->
         <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
             <level>DEBUG</level>
         </filter>
        <encoder>
            <pattern>${console_log_pattern}</pattern>
        </encoder>
    </appender>

    <!--输出到文件,只记录INFO级别信息-->
    <appender name="info_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/roll_info/logback.%d{yyyy-MM-dd}.log</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>${console_log_pattern}</pattern>
            <charset>${charset}</charset>
        </encoder>
        <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 每天日志归档路径以及格式 -->
            <fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!--日志文件保留天数-->
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <!-- 如果超过10MB就删除 -->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>10MB</maxFileSize>
        </triggeringPolicy>
        <!-- 此日志文件只记录info级别的 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!--输出到文件,只记录WARN级别信息-->
    <appender name="warn_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
    </appender>
    <!--输出到文件,只记录ERROR级别信息-->
    <appender name="error_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
    </appender>

    <!--
    root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
    level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,默认是DEBUG
    可以包含零个或多个appender元素。
    -->
    <root level="info">
        <appender-ref ref="console" />
        <appender-ref ref="info_file" />
        <appender-ref ref="warn_file"/>
        <appender-ref ref="error_file"/>
    </root>

    <!--
        <logger>用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>。
        <logger>仅有一个name属性,
        一个可选的level和一个可选的additivity属性。
        name:用来指定受此logger约束的某一个包或者具体的某一个类。
        level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
              如果未设置此属性,那么当前logger将会继承上级的级别。
        additivity:是否向上级logger传递打印信息,默认是true
    -->
    <!-- 使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作:
         第一种把<root level="INFO">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息
         第二种就是单独给mapper下目录配置DEBUG模式,代码如下,这样配置sql语句会打印,其他还是正常DEBUG级别:
    -->
    <logger name="com.hyh.logback.web.LogTestController" level="WARN" additivity="false">
        <appender-ref ref="console"/>
        <appender-ref ref="warn_file"/>
        <appender-ref ref="error_file"/>
    </logger>

    <!--    如果多环境开发可以用springProfile -->
    <!--开发环境:打印控制台-->
    <springProfile name="dev">
        <!--可以输出项目中的debug日志,包括mybatis的sql日志-->
        <logger name="com.hyh.logback.web" level="DEBUG">
            <appender-ref ref="console"/>
        </logger>
        <!--
            root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
            level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,默认是DEBUG
            可以包含零个或多个appender元素。
        -->
        <root level="INFO">
            <appender-ref ref="console"/>
        </root>
    </springProfile>
</configuration>

最终的效果,会在项目路径下生成日志文件:/log/info/log-info-2020-11-01.0.log,并且日志文件的策略也在xml中定义。

控制台打印信息,如下图所示:

springboot logback配置详解,java,spring boot,logback,后端文章来源地址https://www.toymoban.com/news/detail-787216.html

到了这里,关于SpringBoot整合Logback日志框架配置全解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springboot 日志配置(logback)

    Java 中的日志框架主要分为两大类: 日志门面 和 日志实现 。 Java 中的日志体系: 日志门面 日志门面定义了一组日志的接口规范,它并不提供底层具体的实现逻辑。 Apache Commons Logging 和 Slf4j ( Simple Logging Facade for Java 简单日志门面) 就属于这一类。 日志门面的作用:解决系

    2024年02月09日
    浏览(40)
  • springboot中logback日志配置

    Spring Boot使用Apache的Commons Logging作为内部的日志框架,其仅仅是一个日志接口,在实际应用中需要为该接口来指定相应的日志实现。 Spring Boot从1.4版本开始内置的日志框架就是Logback;Spring Boot 2.x 默认采用了slf4j+logback的形式,slf4j也是个通用的日志门面。 SpringBoot可以适配所有

    2024年02月16日
    浏览(47)
  • Springboot日志框架logback与log4j2

    目录 Springboot日志使用 Logback日志 日志格式 自定义日志格式 日志文件输出 Springboot启用log4j2日志框架 Springboot底层是使用slf4j+logback的方式进行日志记录 trace:级别最低 debug:调试级别的,常用于跟踪程序的进展 info:普通的打印信息(默认的日志级别) warn:警告级别,不影响

    2024年01月19日
    浏览(46)
  • SpringBoot多环境配置与添加logback日志

    一个项目会有多个运行环境 所以SpringBoot提供了可以适应多个环境的配置文件  每个文件对应一个端口号 application-dev.yml 开发环境 端口8090 application-test.yml 测试环境 端口8091 application-prod.yml 生产环境 端口8092 在application中选择使用哪个端口号 每个文件设置端口号: 2、添加lo

    2024年01月17日
    浏览(51)
  • 6.3 SpringBoot日志进阶实战 Logback配置详解

    在上一篇文章中,我和你介绍了SpringBoot快速入门Slf4j + Logback实战,遗留的问题是如何将日志输出到文件。 今天这篇文章分享了我在SpringBoot中使用Logback配置日志的经验和方法,并提供了详细的代码示例和解释,包括: 滚动文件、异步日志记录、动态指定属性、日志级别、配

    2024年02月07日
    浏览(49)
  • springboot Logback 不同环境,配置不同的日志输出路径

    mac 笔记本开发,日志文件写到/data/logs/下,控制台报出:Failed to create parent directories for [/data/logs/........... 再去手动在命令窗口创建文件夹data,报Read-only file system resource 目录下的配置文件列表: 在logback-spring.xml添加配置, 只有local写到当前项目下的data目录,其他环境写到系统

    2024年04月23日
    浏览(41)
  • springboot+mybatis 配置 logback 日志 并打印sql

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 springboot + logback 日志 提示:以下是本篇文章正文内容,下面案例可供参考 ` 使用时注意: 配置日志文件保存路径 默认用户目录 自定义指定需要打印日志的文件路径 参考连接: 很详细 是干货 SpringBoo

    2024年02月19日
    浏览(48)
  • SpringBoot项目从0到1配置logback日志打印

    大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。 以下是正文! 我们在写后端项目的时候,日志打印是必需的。支持SpringBoot项目的日志框架一般有log4j、logback,

    2024年02月11日
    浏览(55)
  • java的springboot框架中使用logback日志框架使用RabbitHandler注解为什么获取不到消费的traceId信息?

    当使用 Logback 日志框架和 RabbitMQ 的 @RabbitHandler 注解时,如果无法获取消费的 traceId 信息,可能是因为在处理 RabbitMQ 消息时,没有正确地将 traceId 传递到日志中。 为了将 traceId 传递到日志中,你可以利用 MDC(Mapped Diagnostic Context)机制。MDC 是一个线程绑定的上下文容器,允许

    2024年02月09日
    浏览(44)
  • spring整合logBack日志框架:

    SLF4J(Simple Logging Facade for Java)是一种日志规范,类似于JDBC,我们常用的日志log4j、logback等都实现了这个规范,所以我们可以直接使用SLF4J的规范来使用日志。 它们是同一个作者开发的,logback是重新编写的内核,在一些关键执行的路径上提升了10倍以上。它也支持了一些新的

    2024年02月12日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包