【LogBack日志】打印mybatis中sql日志并存放到指定文件中

这篇具有很好参考价值的文章主要介绍了【LogBack日志】打印mybatis中sql日志并存放到指定文件中。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:

在springboot中使用logbac-spring.xml单独打印mybaits中的sql,另存一个单独的日志中。

1、yml配置

# 日志配置
logging:
  level:
    com.xxxx.mapper: debug
    org.springframework: warn
  config: classpath:logback-app.xml
  file:
    path: ./logs/app

2、logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property resource="application.yml"/>
    <!-- 日志文件存放路径 -->
    <springProperty scope="context" name="FILE_PATH" source="logging.file.path"/>
    <!-- 文件输出格式 -->
    <!-- 1格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
    <property name="FILE_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:  %msg%n"/>
    <!-- 日志最大保存数量 -->
    <property name="MAX_HISTORY" value="10"/>
    <!-- 日志文件大小 -->
    <property name="FILE_SIZE" value="10MB"/>

    <!-- info文件,记录info级别日志 -->
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 实时输出的日志文件 -->
        <file>${FILE_PATH}/sys-info.log</file>
        <append>true</append>
        <!-- 历史日志分块,配置滚动的策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志名称的格式 -->
            <fileNamePattern>${FILE_PATH}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 保存的最长时间:天数 -->
            <MaxHistory>${MAX_HISTORY}</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${FILE_PATTERN}</pattern>
        </encoder>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>${FILE_SIZE}</MaxFileSize>
        </triggeringPolicy>
        <!-- 过滤掉非info的日志,即此日志文件中只会输出info日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>INFO</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- error文件,记录error级别日志 -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 实时输出的日志文件 -->
        <file>${FILE_PATH}/sys-error.log</file>
        <append>true</append>
        <!-- 历史日志分块,配置滚动的策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志名称的格式 -->
            <fileNamePattern>${FILE_PATH}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 保存的最长时间:天数 -->
            <MaxHistory>${MAX_HISTORY}</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${FILE_PATTERN}</pattern>
        </encoder>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>${FILE_SIZE}</MaxFileSize>
        </triggeringPolicy>
        <!-- 过滤掉非error的日志,即此日志文件中只会输出error日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>ERROR</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- debug文件,记录debug级别日志 -->
    <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 实时输出的日志文件 -->
        <file>${FILE_PATH}/sys-debug.log</file>
        <append>true</append>
        <!-- 历史日志分块,配置滚动的策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志名称的格式 -->
            <fileNamePattern>${FILE_PATH}/sys-debug.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 保存的最长时间:天数 -->
            <MaxHistory>${MAX_HISTORY}</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${FILE_PATTERN}</pattern>
        </encoder>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>${FILE_SIZE}</MaxFileSize>
        </triggeringPolicy>
        <!-- 过滤掉非debug的日志,即此日志文件中只会输出debug日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>DEBUG</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>>
        </filter>
    </appender>

    <!-- sql文件,记录DEBUG级别日志 -->
    <appender name="SQL_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 实时输出的日志文件 -->
        <file>${FILE_PATH}/sys-sql.log</file>
        <append>true</append>
        <!-- 历史日志分块,配置滚动的策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志名称的格式 -->
            <fileNamePattern>${FILE_PATH}/sys-sql.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 保存的最长时间:天数 -->
            <MaxHistory>${MAX_HISTORY}</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${FILE_PATTERN}</pattern>
        </encoder>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>${FILE_SIZE}</MaxFileSize>
        </triggeringPolicy>
        <!-- 过滤掉非debug的日志,即此日志文件中只会输出debug日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>DEBUG</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>>
        </filter>
    </appender>

    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${FILE_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 打印 Spring 在启动的时候初始化各个 Bean 的信息 -->
    <logger name="org.springframework" level="WARN"/>

    <!--mybatis日志 mapper包所在路径-->
    <logger name="com.xxx.mapper" level="DEBUG" additivity="false">
        <appender-ref ref="SQL_FILE" />
        <appender-ref ref="STDOUT" />
    </logger>

    <!-- 相当于logger元素,只是name值已经确定为root了 -->
    <root level="INFO">
        <appender-ref ref="INFO_FILE" />
        <appender-ref ref="ERROR_FILE" />
        <appender-ref ref="DEBUG_FILE" />
        <appender-ref ref="STDOUT" />
    </root>

</configuration>

3、关键几点

几个关键点

a. 文件名需要为​​logback-spring.xml​​; 动态日志路径才会生效; 属性文件中配置 ​​log.path=xxx​​;

【Log日志】logback.xml动态配置属性值(包括接入的第三方配置)

b. levle 需要是DEBUG等级; 因为sql日志是DEBUG等级的;name= 存放mapper文件的包路径

<!--mybatis日志 mapper包所在路径-->
    <logger name="com.xxx.mapper" level="DEBUG" additivity="false">
        <appender-ref ref="SQL_FILE" />
        <appender-ref ref="STDOUT" />
    </logger>

c. mybatis的log-impl需要配置正确的实现类 比如 在maybatis-plus中

# MyBatis配置
mybatis:
  # 搜索指定包别名
  typeAliasesPackage: com.xxx.**.domain
  # 配置mapper的扫描,找到所有的mapper.xml映射文件
  mapperLocations: classpath*:mapper/**/*Mapper.xml
  configuration:
    # 指定 MyBatis 所用日志的具体实现
    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
    # 开启自动下划线格式转驼峰格式
    map-underscore-to-camel-case: true
    # 全局映射器启用缓存
    cache-enabled: true
    # 允许 JDBC 支持自动生成主键
    use-generated-keys: true
    # 执行模式。默认是 SIMPLE
    default-executor-type: reuse
    # 允许查询结果为null
    call-setters-on-nulls: true

d. 我之前就是一直配置的是 ​​log-impl: org.apache.ibatis.logging.stdout.StdOutImpl​​ ;导致文件只能出现在控制台;却没有打印到文件中;

参数值的默认值设置
如果配置文件没有设置属性. 可以在使用的地方设置默认值 例如​​​${log.path:-默认值}​

参考资料:
https://blog.51cto.com/szzdzhp/5300674
https://blog.csdn.net/happyxin_/article/details/128844723?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-2-128844723-blog-116700232.235%5Ev28%5Epc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-2-128844723-blog-116700232.235%5Ev28%5Epc_relevant_default&utm_relevant_index=3
https://blog.csdn.net/DreamMryang/article/details/115351202文章来源地址https://www.toymoban.com/news/detail-412347.html

到了这里,关于【LogBack日志】打印mybatis中sql日志并存放到指定文件中的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • springboot 下mybatis-plus 如何打印sql日志和参数到日志文件

    网上很多说法打印sql日志的方法在application.properties配置文件中 但是上述配置只能将sql日志打印到控制台,无法打印到日志文件中 参考下面这个文档,将sql日志打印到日志文件中 https://www.ius7.com/a/305 1:设置mybatisplus包下的日志级别为DEBUG; 2:设置项目mapper目录的日志级别为DE

    2024年02月14日
    浏览(52)
  • mybatis打印sql日志

    我们日常操作数据库的过程一般都是使用mybatis中执行sql操作,有时候为了确认mybatis拼接的sql是否正确,就需要在日志中打印出具体的sql语句,对应的入参以及数据库的返回值 一.sql日志输出到控制台,修改mybatis-config文件,指定如下配置: 二.sql日志输出到文件,修改mybatis

    2024年02月15日
    浏览(48)
  • Mybatis设置sql打印日志

    第一种:使用 mybatis 自带的打印 第二种:使用 log4j 日志打印 备注:log4j 运行级别调到DEBUG,可以在控制台打印出mybatis运行的sql语句。 #将等级为DEBUG的日悲信虑出到console和file这网个日的地,console和file的定义在下面的代码 log4j.rootLogger=DEBUG,console,file #控制台输出的相关设置

    2024年02月06日
    浏览(56)
  • Mybatis-Plus 打印sql日志

    先说一下springboot 和mybatis-plus版本 再给一份logback.xml文件配置 配置打印日志的两种方式 控制台打印,很简单,在application.yml配置 日志文件打印,在application.yml配置 还需要再logback.xml中将mapper 包的logger日志级别设置为debug,看上方 有用的话,帮忙点赞,谢谢,如果因为版本问

    2024年02月15日
    浏览(57)
  • MyBatis实战:如何将拼接的SQL打印到日志

    哈喽,大家好,我是木头左! 在日常开发中,经常会遇到拼接SQL的情况,这时候,如何将拼接的SQL打印到日志,以便追踪和调试呢?本文将详细介绍MyBatis如何实现这一功能。 MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的

    2024年04月11日
    浏览(44)
  • 【Mybatis小白从0到90%精讲】15: Mybatis配置打印SQL日志

    日志(Log)是每个程序都不可或缺的一部分,它可以帮助开发人员诊断和调试问题。Mybatis,作为一款备受赞誉的ORM框架,自然也提供了强大的日志功能。 它不仅提供了 内置的标准实现 ,还支持 集成各种主流的日志框架 ,让我们可以轻松地 查看最终执行的SQL语句 ,这在进行数

    2024年02月05日
    浏览(45)
  • Logback日志记录只在控制台输出sql,未写入日志文件【解决】

    原因:持久层框架对于Log接口实现方式不一样,日记记录的位置及展示方式也也不一样 可以分别配置到两个环境中,dev用StdOutImpl,prod用Slf4jImpl或者其他的都行,具体需要看他是如何实现的,使用logger对象输出的都是会写入日志的,使用System.out或err的只会在控制台显示,以下是实验

    2024年02月09日
    浏览(64)
  • log4j--动态打印日志文件到指定文件夹

    1、添加Maven依赖 2、配置文件 log4j.properties 3、编写日志打印工具类 LogUtil 4、工具类调用 测试结果:

    2024年02月16日
    浏览(54)
  • MyBatis的#{}和${}:安全与灵活并存的SQL之道

    MyBatis是一款广泛使用的Java持久化框架,提供了强大的SQL映射和数据库操作功能。在编写MyBatis的SQL语句时,我们经常会遇到#{}和${}两种不同的占位符语法。本文将详细解析#{}和${}的区别以及它们在MyBatis中的应用场景,帮助开发者更好地理解和使用MyBatis。 #{} 安全的预编译占位

    2024年04月08日
    浏览(32)
  • SpringBoot项目从0到1配置logback日志打印

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

    2024年02月11日
    浏览(56)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包