logback-spring.xml 小记

  • 为什么不用logback.xml 名字

加载顺序:logback.xml>application.yml>logback-spring.xml

使用xml中使用到配置文件属性时,就会报错

  • 为什么logback中记录不到运行时报错

logback获取不到堆栈错误

解决办法:在全局错误出使用log.error()指定输出

  • 为什么打印不出来mybatis-plus的sql日志

配置mq,使用 org.apache.ibatis.logging.stdout.StdOutImpl 使用的是System.out.println(s);

所以打印不出来

控制台打印

正确使用:

 配置mq,使用 org.apache.ibatis.logging.slf4j.Slf4jImpl,并且配置项目mapper目录为DEBUG

 控制台打印,看前面带有DEBUG

 参考文章(博主有源码详细解释):springboot 下mybatis-plus 如何打印sql日志和参数到日志文件_jsqlparsercountoptimize sql=-CSDN博客

当然可以自己定义打印sql,与 StdOutImpl 一样实现org.apache.ibatis.logging.Log,进行编辑

 附带logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- scan 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。 -->
<!-- scanPeriod 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">

    <!-- 生成文件名前缀 -->
    <springProperty name="FILE_PREFIX" source="logging.file.name" />
    <!-- 输出文件路径 -->
    <springProperty name="OPEN_FILE_PATH" source="logging.file.path"/>
    <!-- 文件保存时间 这里是7天 -->
    <property name="EXIST_TIME" value="7"/>
    <!-- 文件输出格式 -->
    <property name="PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
    <!-- 日志文件最大的大小 -->
    <property name="MAX_FILE_SIZE" value="10MB"/>


    <!--  控制台输出  -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 输出到all文件 这里是全部的日志内容 -->
    <appender name="ALL" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${OPEN_FILE_PATH}/${FILE_PREFIX}_ALL_%d{yyyy-MM-dd}-%i.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>${EXIST_TIME}</MaxHistory>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
            <TimeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!--日志文件最大的大小-->
                <MaxFileSize>${MAX_FILE_SIZE}</MaxFileSize>
            </TimeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
    </appender>

    <!--输出到error文件-->
    <appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${OPEN_FILE_PATH}/${FILE_PREFIX}_ERROR_%d{yyyy-MM-dd}-%i.log</FileNamePattern>
            <MaxHistory>30</MaxHistory>
            <cleanHistoryOnStart>true</cleanHistoryOnStart>
            <TimeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <MaxFileSize>${MAX_FILE_SIZE}</MaxFileSize>
            </TimeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <append>true</append>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!-- 只打印ERROR日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 异步写日志 -->
    <appender name="ASYNC_FILE" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>1024</queueSize>
        <appender-ref ref="ALL"/>
    </appender>
    <appender name="ASYNC_ERROR_FILE" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>1024</queueSize>
        <appender-ref ref="error"/>
    </appender>


    <!--  默认输出info等级,然后再根据各自的拦截过滤规则去处理  -->
    <root level="info">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="ASYNC_FILE"/>
        <appender-ref ref="ASYNC_ERROR_FILE" />
    </root>


</configuration>

相关推荐

  1. logback

    2024-06-18 21:10:04       35 阅读
  2. logback实践

    2024-06-18 21:10:04       42 阅读
  3. wordpress小记

    2024-06-18 21:10:04       53 阅读
  4. NAT<span style='color:red;'>小记</span>

    NAT小记

    2024-06-18 21:10:04      51 阅读
  5. FFMpeg小记

    2024-06-18 21:10:04       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-18 21:10:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-18 21:10:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-18 21:10:04       87 阅读
  4. Python语言-面向对象

    2024-06-18 21:10:04       96 阅读

热门阅读

  1. adb之ps命令用法

    2024-06-18 21:10:04       37 阅读
  2. vue3 配置全局@符号

    2024-06-18 21:10:04       22 阅读
  3. Linux 【Vim命令】文本编辑器

    2024-06-18 21:10:04       35 阅读
  4. SqlServer编写存储过程

    2024-06-18 21:10:04       22 阅读
  5. 如何查看k8s中service的负载均衡策略

    2024-06-18 21:10:04       31 阅读
  6. React中数据响应式原理

    2024-06-18 21:10:04       28 阅读