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檔案所在的