日志、关于logback无法打印mybatis日志的问题

日志:Log

作用

  1. 开发时输出的信息,有助于查看各种信息
  2. 生产环境里,日志记下来,有助于定位错误

内容

  1. 方法执行提示,参数的信息,返回值的信息
  2. 操作日志,记录用户操作信息,用于产品运营,如基于大数据的推荐

目前的常用开源日志包

  1. log4j:一个抽象的日志包,可以在buildpath中自动选择相应的日志包
  2. lockback
  3. sl4j:无论底层是什么日志包都能用
    log4j和logback互斥,只能选用其中一个

logback的使用

为类添加日志

//标配,为参数对应的类加入日志
	public final static Logger logger = LoggerFactory.getLogger(this.class);

xml配置

如果在类路径上找到logback-test.xml或logback.xml文件,则logback将尝试使用logback-test.xml或logback.xml文件进行自我配置

基本配置文件
<configuration>

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>

  <root level="debug">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

appender注明日志输出的位置,STDOUT意为standard OUT(标准输出设备),class属性为输出位置,如此处ConsoleAppender为输出到控制台
encoder中的pattern为输出格式,即:时间+线程+级别+类名+信息
root中level属性表示根级别,如此处根级别为debug,则高于debug的级别通过STDOUT输出

结论

开发阶段使用debug,生产阶段使用info
使用debug:warn、debug、info、error这些级别的日志有效
使用info:warn、info、error这些级别的日志有效
方法的参数用debug,进入方法的信息使用info

关于logback无法打印mybatis日志的问题

尝试用logback+slf4j打印mybatis日志信息,却始终无法打印,而自己用logger定义的日志信息可以打印出来,logback.xml如下:

<configuration>

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>

  <root level="debug">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

后来通过搜索,得到一个解决办法解决办法原帖连接
在logback.xml中加入:

    <logger name="org.apache.ibatis" level="DEBUG">
		<appender-ref ref="STDOUT"/>
	</logger>
	
	<logger name="java.sql" level="debug">
	    <appender-ref ref="STDOUT"/>
	</logger

在mybatis-config.xml中加入;

	<settings>
		<setting name="logImpl" value="STDOUT_LOGGING" />
	</settings>

的方法,可以成功打印出mybatis的日志信息:
在这里插入图片描述
但是这里有一个问题,这里打印出的仅仅是mybatis的日志信息,而logback.xml中配置格式时,还有时间、线程等信息,于是查询了mybatis官方文档发现,STDOUT_LOGGING应该是mybatis的一个日志实现,也就是说,这种方法与logback并无关系,于是我将logback.xml删除,甚至是将slf4j和logback的jar包都移除了日志文件还是照常输出
## 结论
目前mybatis内置的日志工厂没有logback,所以不会检测到logback的jar包,会禁用日志功能

2021.4.16,今天写thymeleaf时惊奇的发现,控制台将mybatis的日志输出了,而我用的还是logback,想到thymeleaf中有一个slf4j的jar包,在这里插入图片描述
之前我所用的slf4j是1.7.9版本的,可能与我的logbackjar包的版本不兼容,所以出现日志无法打印的情况

结论

logback1.2.3与slf4j1.7.9的版本不兼容,出现日志无法打印的情况,改为其他可兼容版本如1.7.25即可

mybatis日志—Mapper文件的sql语句中,参数用${}和用#{}的差别

当用${}时,日志中的sql语句会将sql的参数值直接显示在语句中,而#{}则显示预编译时的sql语句,即将参数用?代替

#{}:
在这里插入图片描述
${}:
在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值