当前位置: 首页>编程语言>正文

logback发送日志到mysql logback sql

使用logback记录带有详细参数值的SQL

1.添加maven支持

<dependency>
    <groupId>com.googlecode.usc</groupId>
    <artifactId>jdbcdslog</artifactId>
    <version>1.0.6.2</version>
 </dependency>
<!-- logback日志配置开始 -->
 <dependency>
          <groupId>ch.qos.logback</groupId>
          <artifactId>logback-core</artifactId>
          <version>1.1.2</version>
  </dependency>
  <dependency>
          <groupId>ch.qos.logback</groupId>
          <artifactId>logback-access</artifactId>
          <version>1.1.2</version>
  </dependency>
  <dependency>
          <groupId>ch.qos.logback</groupId>
          <artifactId>logback-classic</artifactId>
          <version>1.1.2</version>
  </dependency>
  <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>log4j-over-slf4j</artifactId>
          <version>1.7.7</version>
  </dependency>
 <!-- logback日志配置结束 -->

2.配置web.xml
注:logback.xml新建的在src的目录下

<!-- 设置 log4j.properties 的路径-->
    <context-param>
       <param-name>log4jConfigLocation </param-name>
       <!--<param-value>classpath:conf/log4j.properties</param-value>  -->
       <param-value>classpath:conf/logback.xml</param-value>
    </context-param>

    <!--设置刷新时间间隔-->
    <context-param >
       <param-name> log4jRefreshInterval</param-name>
       <param-value>10000</param-value>
    </context-param>

3.logback.xml配置

<?xml version="1.0" encoding="UTF-8"?>

<configuration scan="true" scanPeriod="1 seconds">

  <!-- <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
     <resetJUL>true</resetJUL>
  </contextListener> -->

  <!-- 控制台打印 -->
  <appender name="CON" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
     <pattern>logbak: %date [%level]   %logger{36}  %msg%n</pattern>
     <!-- <pattern>logbak: %d[HH:mm:ss.SSS]   %logger{36} -  %msg%n</pattern>
          <pattern>logbak: %date [%level] [%thread] %logger{80} [%file : %line] %msg%n</pattern>
     -->
    </encoder>
  </appender>

  <!-- 日志文件打印 -->
  <appender name="logfile" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!--See also http://logback.qos.ch/manual/appenders.html#RollingFileAppender-->
    <File>E:/run_log/spring4.log</File>
    <encoder>
      <pattern>logbak: %date [%level] [%thread] %logger{80} [%file : %line] %msg%n</pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
      <maxIndex>9</maxIndex>
      <FileNamePattern>E:/run_log/spring4.log.%i</FileNamePattern>
    </rollingPolicy>
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
      <MaxFileSize>5120KB</MaxFileSize>
    </triggeringPolicy>
  </appender>

  <logger name="org.springframework.web" level="ERROR" />
  <logger name="spring4.java" level="INFO"/>

  <!--
  <logger name="org.jdbcdslog.ConnectionLogger" level="trace" />
  <logger name="org.jdbcdslog.StatementLogger" level="trace" />
  <logger name="org.jdbcdslog.SlowQueryLogger" level="trace" />
  <logger name="org.jdbcdslog.ResultSetLogger" level="trace" />
  -->

  <!--<logger name="org.activiti.engine.impl.cfg" level="ERROR"/>
  <logger name="com.client" level="debug"/>
  <logger name="java.sql" level="debug"/>
  <logger name="com.mybatis" level="debug"/>
  <logger name="com.frame" level="debug"/> -->
  <root level="INFO">
    <appender-ref ref="CON"/>
    <appender-ref ref="logfile"/>
  </root>
</configuration>

4.applicationContext.xml配置数据源jdbcdslog插件代理

<!-- 数据源配置 -->
    <bean id="dataSource2" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="${jdbc.driverClassName}" />
        <property name="jdbcUrl" value="${jdbc.url}" />
        <property name="user" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <property name="minPoolSize" value="1" />
        <property name="maxPoolSize" value="100" />
        <property name="initialPoolSize" value="3" />
        <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
        <property name="maxIdleTime" value="60" />
        <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
        <property name="acquireIncrement" value="5" />
        <property name="maxStatements" value="0" />
        <!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
        <property name="idleConnectionTestPeriod" value="60" />
        <!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->
        <property name="acquireRetryAttempts" value="30" />
        <!-- 获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效 保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试 
            获取连接失败后该数据源将申明已断开并永久关闭。Default: false -->
        <property name="breakAfterAcquireFailure" value="false" />
        <!-- 因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的 时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable 
            等方法来提升连接测试的性能。Default: false -->
        <property name="testConnectionOnCheckout" value="false" />
    </bean>


    <!-- 数据源配置    增加日志配置 -->
    <!-- 代理datasource,使其能够显式获取preparedStatement的参数值 -->
    <bean id="dataSource" class="org.jdbcdslog.ConnectionPoolDataSourceProxy">
        <property name="targetDSDirect" ref="dataSource2"/>
    </bean>

    <!-- 数据源配置 -->

    <!-- Mybatis sessionfactory配置 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="configLocation" value="classpath:conf/myBatisConfig.xml" />
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!-- 通过扫描的模式,扫描目录在com/proj/*目录下,所有的DAO都继承com.proj.dao.BaseDAO接口的接口 -->
    <bean name="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.frame,com.client" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
        <property name="markerInterface" value="com.frame.dao.BaseDAO" />
    </bean>  


   <!-- 定义事务管理器(声明式的事务)-->
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>        
   <tx:annotation-driven transaction-manager="transactionManager"/>

5.日志打印效果:

logback发送日志到mysql logback sql,logback发送日志到mysql logback sql_spring,第1张

6.将log4j.properties转换为logback.xml
项目之前的使用log4j.properties可以用
http://logback.qos.ch/translator/转换到等价的logback配置文件。

PS:转换后的配置文件,pattern参数需要修改。
如log4j的pattern配置 %-d{yyyy-MM-dd HH:mm:ss,SSS} [%c:%L]-[%p] %m%n 在logback里面不在起效。
我把它调整为 %date [%level] [%thread] %logger{80} [%file : %line] %msg%n
另外按日期产生日志文件策略的pattern也需要修改(具体查看下文的logback.xml配置文件)。
具体含义是:

参数 含义
%date 表示日期格式(yyyy-MM-dd HH:mm:ss,SSS)
%level 表示日志的级别
%thread 表示输出产生该日志的线程名
%logger{80} 表示logger名字最长80个字符,否则按照句点(.)分割
%file 表示文件名
%line 表示第几行
%msg 表示输出信息
%n 表示换行



https://www.xamrdz.com/lan/5xy1963276.html

相关文章: