springboot整合logback打印日志,分文件

 更新时间:2023年11月02日 10:16:47   作者:格林爱通话  
本文主要介绍了springboot整合logback打印日志,分文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言:

接着上面实战03讲,这次我们采用springboot自带的日志打印方式-logback 来打印日志

一、pom.xml配置

因为是springboot自带的日志方式,所以不需要添加依赖

二、application.yml 配置

因为是springboot自带的日志方式,所以不需要添加logback.xml 路径,当然如果你非要加也可以

logging:
  config: classpath:logback.xml

三、logback.xml 配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
    <!--定义日志文件的存储地址 ,这个使用的是相对路径,即在日志文件存放在项目根路径logs文件夹下-->
    <property name="LOG_HOME" value="log/" />
    <property name="all-logger" value="all-logger" />
    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <!--            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>-->
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] [%t] [%-40.40logger{39}] : %m%n</pattern>
        </encoder>
    </appender>

    <!-- 按照每天生成日志文件 -->
    <appender name="${all-logger}" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/all-logger.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/${all-logger}.log.%d{yyyy-MM-dd}.%i</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>250MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <!--            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>-->
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] [%t] [%-40.40logger{39}] : %m%n</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

    <logger name="com.example.demo" level="DEBUG" ></logger>

    <!-- 日志输出级别 ,一定要把上边定义的appender 写在下面否者会导致日志文件生成不了,或者为空的日志文件-->
    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="${all-logger}" />
    </root>
</configuration>

四、测试类

因为自带的日志方式,所以可以直接使用注解,@slf4j, 这样就方便很多

启动项目

控制台:

 日志:

五、常见问题:

1、mybatis 的sql 日志无法打印

那是因为确实打印的指定的包,因为我们需要打印所有包的sql,所以直接配置一个最大的包

<logger name="com.example.demo" level="DEBUG" ></logger>

2、mybatis 打印了sql的结果集明细

那是因为日志基本写成了dubug

<root level="DEBUG">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="${all-logger}" />
</root>

这样就会打印结果集的全部明细,日志量会异常庞大,一般我们只需要打印INFO级别就可以了。

六、日志按照业务类别打印不同文件

1、logback.xml 

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
    <!--定义日志文件的存储地址 ,这个使用的是相对路径,即在日志文件存放在项目根路径logs文件夹下-->
    <property name="LOG_HOME" value="log" />
    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <!--            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>-->
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] [%t] [%-40.40logger{39}] : %m%n</pattern>
        </encoder>
    </appender>

    <!-- 按照每天生成日志文件 -->
    <appender name="ALLACTIONAPPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/alllogger.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/alllogger.log.%d{yyyy-MM-dd}.%i</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>250MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <!--            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>-->
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] [%t] [%-40.40logger{39}] : %m%n</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

    <appender name="TASKACTIONAPPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/taskaction.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/taskaction.log.%d{yyyy-MM-dd}.%i</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>250MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <!--            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>-->
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%p] [%t] [%-40.40logger{39}] : %m%n</pattern>
            <charset>utf8</charset>
        </encoder>
    </appender>

    <logger name="com.example.demo" level="DEBUG" >
    </logger>

    <!-- 日志输出级别 ,一定要把上边定义的appender 写在下面否者会导致日志文件生成不了,或者为空的日志文件-->
    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="ALLACTIONAPPENDER" />
    </root>

    <!--业务操作日志-->
    <logger name="TASKACTION" level="info" additivity="false">
        <appender-ref ref="TASKACTIONAPPENDER"/>
    </logger>

    <logger name="ALLACTION" level="info" additivity="false">
        <appender-ref ref="ALLACTIONAPPENDER"/>
    </logger>

</configuration>

ALLACTION 打印默认的日志, 
TASKACTION 打印任务类型的日志

2、测试类 

直接通过logger name 来打印自定义的业务日志, logger的配置就是LoggerFactory需要的模板,只有配置了工厂获取才会生效。

3、启动项目

控制台

 alllogger 文件

taskaction 文件

可以看到控制台并没有打印 自定义的业务日志,如果要打印,需要在自定义工厂里面加上控制台输出。

<!--业务操作日志, logger的配置就是LoggerFactory需要的模板,只有配置了工厂获取才会生效。-->
<logger name="TASKACTION" level="info" additivity="false">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="TASKACTIONAPPENDER"/>
</logger>

<logger name="ALLACTION" level="info" additivity="false">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="ALLACTIONAPPENDER"/>
</logger>

再次启动项目

4、注解 + logger.getname 一起用  

因为注解方式打印的就是默认的日志文件,但是我们如果还要打印任务日志怎么办呢,这时就可以结合使用。

测试类

启动项目。

控制台

 allaction默认日志

taskaction

到此这篇关于springboot整合logback打印日志,分文件的文章就介绍到这了,更多相关springboot logback打印日志内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java实现马踏棋盘的算法

    java实现马踏棋盘的算法

    这篇文章主要为大家详细介绍了java实现马踏棋盘的算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Java使用 try-with-resources 实现自动关闭资源的方法

    Java使用 try-with-resources 实现自动关闭资源的方法

    这篇文章主要介绍了Java使用 try-with-resources 实现自动关闭资源的方法,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • 关于Java集合框架面试题(含答案)上

    关于Java集合框架面试题(含答案)上

    Java集合框架为Java编程语言的基础,也是Java面试中很重要的一个知识点。这里,我列出了一些关于Java集合的重要问题和答案。
    2015-12-12
  • Java集合框架ArrayList源码分析(一)

    Java集合框架ArrayList源码分析(一)

    这篇文章主要为大家详细介绍了Java集合框架ArrayList源码分析,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • java 分布式与集群的区别和联系

    java 分布式与集群的区别和联系

    本文主要介绍了java分布式与集群的区别和联系,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • Maven 仓库国内镜像源收藏(小结)

    Maven 仓库国内镜像源收藏(小结)

    这篇文章主要介绍了Maven 仓库国内镜像源收藏(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 基于Java语言开发的一个高效的敏感词过滤工具

    基于Java语言开发的一个高效的敏感词过滤工具

    这篇文章主要为大家详细介绍了如何基于Java语言开发的一个高效的敏感词过滤工具,文中的示例代码简洁易懂,有需要的小伙伴可以参考一下
    2025-01-01
  • Spring Boot中如何使用Swagger详解

    Spring Boot中如何使用Swagger详解

    Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful风格的Web服务,这篇文章主要给大家介绍了关于Spring Boot中如何使用Swagger的相关资料,需要的朋友可以参考下
    2021-08-08
  • 关于Java的Character类详解

    关于Java的Character类详解

    这篇文章主要介绍了关于Java的Character类详解,Java中的Character类是一个包装类,用于封装一个基本数据类型char的值,它提供了一些静态方法来操作字符,需要的朋友可以参考下
    2023-05-05
  • spring使用@Async注解导致循环依赖问题异常的排查记录

    spring使用@Async注解导致循环依赖问题异常的排查记录

    这篇文章主要介绍了spring使用@Async注解导致循环依赖问题异常的排查记录,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08

最新评论