springboot集成mybatis时,显示sql执行语句的配置
在application.properties中,
logging.level.com.xxx.mapper = debug
格式为logging.level.+mapper的全限定名 = debug
日志配置 logback.xml
<?xml version="1.0" encoding="UTF-8"?> <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --> <!-- 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。 当scan为true时,此属性生效。默认的时间间隔为1分钟。 --> <configuration scan="true" scanPeriod="30 seconds"> <!-- 定义变量 --> <property name="APP_NAME" value="productlibrary"/> <property name="LOG_PATH" value="/home/xxx/logs"/> <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator"> <resetJUL>true</resetJUL> </contextListener> <!-- To enable JMX Management --> <jmxConfigurator/> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%X{synId}] %logger{0}-%msg%n</pattern> </encoder> </appender> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/${APP_NAME}/${APP_NAME}.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 非当天的Log文件压缩备份为 ${tomcat_home}/logs/gradevin.2014-11-24.zip --> <fileNamePattern>${LOG_PATH}/${APP_NAME}/${APP_NAME}.%d{yyyy-MM-dd}.zip </fileNamePattern> <!-- 超过7天的备份文件会被删除 --> <maxHistory>100</maxHistory> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [%X{synId}] %logger{50}-%msg%n</pattern> </layout> </appender> <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/${APP_NAME}/${APP_NAME}_error.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/${APP_NAME}/${APP_NAME}_error.%d{yyyy-MM-dd}.zip</fileNamePattern> <maxHistory>7</maxHistory> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level [%X{synId}] %logger{50}-%msg%n</pattern> </layout> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender"> <smtpHost>host</smtpHost> <smtpPort>25</smtpPort> <to>收件邮箱地址</to> <from>发件邮箱地址</from> <username>发送人</username> <password>密码</password> <asynchronousSending>true</asynchronousSending> <includeCallerData>true</includeCallerData> <subject>主题</subject> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%X{synId}] %class{36} %M-%msg%xEx%n</pattern> </layout> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <evaluator class="xxx.system.CounterBasedEvaluator"/> </appender>--> <!-- mybatis日志级别的定义 --> <logger name="com.ibatis" level="INFO"/> <logger name="com.ibatis.common.jdbc.SimpleDataSource" level="INFO"/> <logger name="com.ibatis.common.jdbc.ScriptRunner" level="INFO"/> <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" level="INFO"/> <logger name="java.sql.Connection" level="INFO"/> <logger name="java.sql.Statement" level="INFO"/> <logger name="java.sql.PreparedStatement" level="INFO"/> <!--去掉motan服务中的心跳日志(warn级别),不然会一直出现 serviceStatsLog-[motan-totalAccessStatistic] app: motan module: motan total_count: 0 slow_count: 0 biz_excp: 0 other_excp: 0 avg_time: 0.00ms biz_time: 0.00ms avg_tps: 0 serviceStatsLog-[motan-memoryStatistic] 233.65MB of 1746.00 MB (13.4%) used --> <logger name="serviceStatsLog" level="WARN"/> <!--zookeeper的日志--> <logger name="org.apache.zookeeper.ClientCnxn" additivity="false"> <level value="INFO"/> </logger> <root level="INFO"> <appender-ref ref="CONSOLE"/> <appender-ref ref="FILE"/> <appender-ref ref="ERROR_FILE"/> <!--<appender-ref ref="EMAIL" />--> </root> </configuration>
上面警报邮件暂时注释掉了,如果需要,打开注释,需要编写业务类,比如失败多少次才发送邮件,时间间隔之类的
警报触发CounterBasedEvaluator类 后面补上(已经测试过,报警邮件可以正常发送,需要引入两个架包
<!-- 日志报警发送邮件需要的2个jar --> <dependency> <groupId>org.codehaus.janino</groupId> <artifactId>janino</artifactId> <version>3.0.8</version> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.5.0-b01</version> </dependency>
)
补:
public class CounterEvaluator extends EventEvaluatorBase<ILoggingEvent> { /** 40个error发一次邮件 */ private static int limit = 40; /** 当前积攒了多少error */ private int counter = 0; /** 最后一次发送的时间 */ private Date lastSendTime = new Date(); /** 间隔 默认10分钟*/ private final Long INTERVAL = 1000 * 60 * 10L; /** * @see ch.qos.logback.core.boolex.EventEvaluator#evaluate(java.lang.Object) */ @Override public boolean evaluate(ILoggingEvent event) throws EvaluationException { counter++; if (counter >= limit || ((new Date().getTime() - lastSendTime.getTime()) > INTERVAL)) { counter = 0; lastSendTime = new Date(); return true; } else { return false; } } }
日志配置 log4j2.xml
<?xml version="1.0" encoding="UTF-8"?> <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --> <!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出--> <!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数--> <configuration status="DEBUG" monitorInterval="30"> <!--先定义所有的appender--> <appenders> <!--这个输出控制台的配置--> <console name="Console" target="SYSTEM_OUT"> <!--输出日志的格式--> <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/> </console> <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用--> <File name="logs" fileName="./logs/test.log" append="false"> <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/> </File> <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--> <RollingFile name="RollingFileInfo" fileName="./logs/info.log" filePattern="./logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log"> <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--> <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="100 MB"/> </Policies> </RollingFile> <RollingFile name="RollingFileWarn" fileName="./logs/warn.log" filePattern="./logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log"> <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="100 MB"/> </Policies> <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 --> <DefaultRolloverStrategy max="20"/> </RollingFile> <RollingFile name="RollingFileError" fileName="./logs/error.log" filePattern="./logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log"> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="100 MB"/> </Policies> </RollingFile> <RollingFile name="RollingFileDebug" fileName="./logs/debug.log" filePattern="./logs/$${date:yyyy-MM}/debug-%d{yyyy-MM-dd}-%i.log"> <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="100 MB"/> </Policies> </RollingFile> </appenders> <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效--> <loggers> <!--过滤掉spring和mybatis的一些无用的DEBUG信息--> <logger name="org.springframework" level="INFO"></logger> <logger name="org.mybatis" level="INFO"></logger> <root level="all"> <appender-ref ref="Console"/> <appender-ref ref="RollingFileInfo"/> <appender-ref ref="RollingFileWarn"/> <appender-ref ref="RollingFileError"/> <appender-ref ref="RollingFileDebug"/> </root> </loggers> </configuration>