log4j添加druid的慢sql日志记录到指定文件

log4j日志记录工具的基本使用

一、Log4j的基本概念

  1. Log4j主要由三个核心组件构成:
    • 日志信息的优先级(Level):指定日志信息的重要程度,从高到低有FATAL、ERROR、WARN、INFO、DEBUG等级别。
    • 日志信息的输出目的地(Appender):定义日志将打印到控制台、文件还是其他目的地。
    • 日志信息的输出格式(Layout):控制日志信息的显示内容,如时间戳、日志级别、日志消息等。

二、log4j的高级用法

  1. Logger的继承关系 :Log4j中存在一个rootLogger,其他Logger都继承自这个rootLogger。如果没有为某个Logger单独定义输出级别,它将使用rootLogger的输出级别。
  2. Appender的叠加性:如果一个Logger继承了多个Appender,它的日志信息将输出到所有这些Appender中。可以通过配置限制Appender的叠加性。
  3. 日志级别的控制:可以使用threshold属性来控制Appender的输出级别,确保只有高于或等于指定级别的日志信息被输出。

log4j添加druid的慢sql日志记录到指定文件

(默认已经用过log4j了,只是不知道怎么把慢sql单独输出到一个文件里面),就是说添加依赖等等这些步骤就省略了

第一步:在数据库配置文件中添加下面的代码

xml 复制代码
<bean id="datasource" class="com.alibaba.druid.pool.DruidDataSource"
     init-method="init" destroy-method="close"> 
		<property name="proxyFilters">
			<list>
				<ref bean="stat-filter" />
				<ref bean="log-filter" />
			</list>
		</property>
</bean>

<bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter">
		<!--        <property name="mergeSql" value="true" />--> <!--用来合并重复或者是类似的sq -->
		<property name="slowSqlMillis" value="3000" /> <!-- 设置慢SQL的时间阈值 -->
		<property name="logSlowSql" value="true" /> <!-- 开启慢SQL日志记录 -->
</bean>

<bean id="log-filter" class="com.alibaba.druid.filter.logging.Log4jFilter">
		<!-- 配置日志记录的相关属性 -->
</bean>

第二步:在log4j.properties上添加配置(只需直接添加下面的一段配置即可)

java 复制代码
log4j.logger.com.alibaba.druid=info,druidSql 
log4j.additivity.com.alibaba.druid=false
log4j.logger.druid.sql.DataSource=info,druidSql
log4j.logger.druid.sql.Connection=info,druidSql
log4j.logger.druid.sql.Statement=info,druidSql
log4j.logger.druid.sql.ResultSet=info,druidSql

log4j.appender.druidSql=org.apache.log4j.DailyRollingFileAppender
log4j.appender.druidSql.File=${catalina.home}/logs/druid-sql.log
log4j.appender.druidSql.DatePattern='.'yyyy-MM-dd
log4j.appender.druidSql.ImmediateFlush=true
log4j.appender.druidSql.Append=true
log4j.appender.druidSql.Threshold=info
log4j.appender.druidSql.layout=org.apache.log4j.PatternLayout
log4j.appender.druidSql.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1} - %m%n
  • log4j.logger.com.alibaba.druid=info,druidSql:解释

log4j.logger.<logger-name>:这是一个配置项,用于设置指定logger(日志记录器)的日志级别和Appender(日志输出目的地)。<logger-name>是logger的名称,通常对应Java包名或类名。

com.alibaba.druid:这是指定的logger名称,表示com.alibaba.druid包及其子包下的所有类。

=info:这表示日志级别为INFO。日志级别决定了哪些日志信息会被记录。常见的日志级别有ERROR、WARN、INFO、DEBUG、TRACE等,INFO级别表示记录信息性消息,通常用于反馈应用程序的运行状态。

,druidSql:这表示该logger的日志将被输出到名为druidSql的Appender。(也可以理解为创建了一个名为druidSql的Appender)Appender定义了日志信息的输出目的地,如控制台、文件、远程服务器等。druidSql需要在Log4j的配置文件中被定义,并指定具体的输出目的地和格式。

  • log4j.additivity.com.alibaba.druid=false:解释

log4j.additivity.<logger-name>:这是一个配置项,用于设置指定logger的日志传递性(additivity)。

com.alibaba.druid:同样指定了logger的名称。

=false:这表示对于com.alibaba.druid包下的日志记录,禁用日志的传递性。在Log4j中,如果additivity被设置为true(默认值),则当前logger的日志信息不仅会被发送到它自己的Appender,还会被传递到父logger的Appender。设置为false后,当前logger的日志信息将只被发送到它自己的Appender,不再向上传递。

第三步:注意事项

  • log4j.rootLogger=INFO,druid1,druid2:这句代码的意思是定义了日志记录器的根类别(root logger)的日志级别以及与之关联的日志输出目的地(appender)。(这里的日志级别为info,日志输出目的地是druid1,druid2)

不要在log4j.rootLogger=xxx(或者是log4j.rootCategory=xxx旧版本的)配置上面配置的druidSql,否则其他的日志记录也会加到该日志文件里面

java 复制代码
// log4j.rootCategory=INFO,druid1,druid2  // 旧版本的使用的就是log4j.rootCategory

log4j.rootLogger=INFO,druid1,druid2 // 新版本的使用的是log4j.rootLogger

就是说如果在rootLogger上配置了名称,它就会把所有包的日志都会打印的

  • log4j.appender.druidSql.File=${catalina.home}/logs/druid-sql.log:表示输出的日志文件放在tomcat的logs目录下,文件名为druid-sql.log
相关推荐
&白帝&1 小时前
JAVA JDK7时间相关类
java·开发语言·python
2301_818732061 小时前
用layui表单,前端页面的样式正常显示,但是表格内无数据显示(数据库连接和获取数据无问题)——已经解决
java·前端·javascript·前端框架·layui·intellij idea
狄加山6751 小时前
系统编程(线程互斥)
java·开发语言
星迹日1 小时前
数据结构:二叉树—面试题(二)
java·数据结构·笔记·二叉树·面试题
组合缺一1 小时前
solon-flow 你好世界!
java·solon·oneflow
HHhha.2 小时前
JVM深入学习(二)
java·jvm
叩叮ING2 小时前
正则表达式中常见的贪婪词
java·服务器·正则表达式
组合缺一2 小时前
Solon Cloud Gateway 开发:熟悉 Completable 响应式接口
java·gateway·reactor·solon
组合缺一2 小时前
Solon Cloud Gateway 开发:Route 的配置与注册方式
java·gateway·reactor·solon
栗豆包3 小时前
w179基于Java Web的流浪宠物管理系统的设计与实现
java·开发语言·spring boot·后端·spring·宠物