1. 程式人生 > >SpringBoot2 -- 配置列印sql執行語句及日誌報警

SpringBoot2 -- 配置列印sql執行語句及日誌報警

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>

相關推薦

SpringBoot2 -- 配置列印sql執行語句日誌報警

springboot整合mybatis時,顯示sql執行語句的配置在application.properties中,logging.level.com.xxx.mapper = debug格式為logging.level.+mapper的全限定名 = debug日誌配置 lo

log4j.xml簡單配置實現在控制檯列印sql執行語句

先上配置程式碼! <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <!--控制檯輸出sql執行過程--> <appender name="CO

log4j.xml 簡單配置 列印 mybatis 執行sql 語句

網上的資料眼花繚亂 , 因為太詳細所以懶得看,下面我就說最簡單的方式,也是專案中常常使用的方式!1)下載jar包<dependency><groupId>log4j</groupId><artifactId>log4j</

Spring整合mybatis-----配置列印sql語句過程遇到的問題

Spring整合mybatis過程中,再mybatis.xml配置<settings/>時一直提示報錯,如下所示: 原始配置: 在除錯專案的過程中,遇到sql查詢不到的問題,所以就像配置mybatis.xml列印sql以便定位問題,配置後的mybatis.

通用方法 控制檯如何列印Mybatis SQL執行語句

log4j.properties基本內容: #定義LOG輸出級別   log4j.rootLogger=INFO,Console,File   #定義日誌輸出目的地為控制檯   lo

Hibernate配置列印sql語句和引數

在Hibernate的配置檔案hibernate.cfg.xml中有3個設定項跟顯示SQL語句相關,他們的值都是boolean值: 1、show_sql:是否顯示SQL語句 2、format_sql: 是否格式化輸出字串,增強SQL的可讀性 3、use_s

log4j不列印sql,不輸出日誌檔案到指定目錄

#log4j.rootLogger=CONSOLE,info,error,DEBUG log4j.rootLogger=infoA,errorA,CONSOLE,DEBUGA //注意這裡不要用INFO,DEBUG等 改個名字 log4j.appender.CONSOLE=org.apach

mysql優化之sql執行流程表結構(schema)對效能的影響

part 1 sql執行流程(如下圖所示) 1、客戶端傳送一條查詢到伺服器。 2、伺服器通過許可權檢查後,先檢查查詢快取,命中則直接返回結果。否則進入3。 3、伺服器進行sql解析,預處理,再由優化器根據該sql涉及到的資料表的資訊計算,生成執行計劃。 4.、MySQL根據優化器生成的執行計劃,呼叫儲

mybatis在控制檯輸出SQL執行語句

log4j啥的輸出語句,mybatis配置一下配置檔案就可以啦。在mybatis-config.xml中新增如下兩行程式碼就可以,網上有的說只新增最後一行,經嘗試不列印。兩行都填加才打印。 <settings>         <setting name=

springboot2配置使用Druid連線池使用的時候出現的連線問題

最近在springboot2專案中使用了Druid連線池,在此記錄一下,整合過程 首先:引入Maven配置項 <dependency> <groupId>com.alibaba</groupId> <artifac

sql執行順序效能優化

sql語句的執行步驟:               1)語法分析,分析語句的語法是否符合規範,衡量語句中各表示式的意義。               2)語義分析,檢查語句中涉及的所有資料庫物件是否存在,且使用者有相應的許可權。               3)檢視轉換,將

Android之在linux終端執行shell指令碼直接列印當前執行app的日誌

1、問題我們一般很多時候會需要在ubuntu終端上列印當前執行app的日誌,我們一般常見的做法是1)、獲取包名      開啟當前執行的app,然後輸入如下命令,然後在第一行TASK後面的就可以看到包名adb shell dumpsys activity top2)、我們的終

JVM列印gc的內容日誌解釋

0.077: [GC 0.077: [DefNew: 1364K->437K(4928K), 0.0017301 secs] 0.079: [Tenured: 8704K->949K(10944K), 0.1680245 secs] 9556K->949K(15872K),  [Perm :

mysql 監控 sql執行語句

修改my.ini,在mysqld下新增log一行, [mysqld] log = "D:/tmp/mysql_log/mysql_log.sql" 然後,重新啟動mysql,就可以實時看到myql伺服器當前正在執行的語句了。 重啟mysql 其中第二種方法對我這無效,以後再搞清楚! 一、MYSQL服務 我

不需要配置log4j , 除錯列印ibatis執行sql語句和引數

背景:如果不想通過配置log4j的方式來列印ibatis執行的sql語句和引數param,可以使用如下方法在控制檯列印sql語句和引數   public static void main(String[] args) { try { //宣告配置檔

log4j2列印Mybatis執行SQL語句SQL語句執行時間

有關於log4j2的詳細配置方式,建議大家觀看log4j2配置檔案詳解,這裡不做介紹 一、首先如需使用log4j2,得引入maven依賴 <!-- log4j2 --> <dependency> <groupI

配置log日誌列印sql語句

發現搭的小框架並不能輸出sql語句,比較蛋疼,百度了一些,發現了下面這種最簡單的配置方式,也算實現了需求。具體步驟如下,在src/main/resources/下新建log4j.xml 並把之前的log4j.properties刪掉,具體程式碼如下: <?xml ve

Mybatis在編譯器中列印sql語句執行後的結果

在mybatisconfig.xml中加入下列語句,mybatis會列印sql語句及執行後的結果 <!-- 列印查詢語句 --> <settings> <setting name="logImpl" value="STDOUT_L

spring-boot 配置 logback 列印sql業務日誌

網上有好多的教程 發現都不是那麼 清晰  我就把我的配置給大家 貼 上吧 1.在mybatis-config.xml 中新增  <setting name="logPrefix" value="dao."/> 2.在logback-spring.xml 中

springboot配置myBatis專案如何在控制檯列印sql語句

最簡單的2種方法 aplication.properties種新增(方法一) logging.level.com.demo.hellow.service.mapper=debug 注意demo.hellow.service.mapper部分,替換成你自己要掃描的mapper檔案所在的