統(tǒng)一日志處理
日志級(jí)別 ERROR 、WARN、INFO块请、DEBUG
-
設(shè)置控制臺(tái)輸出日志級(jí)別
# 設(shè)置日志級(jí)別 logging.level.root=WARN
-
把日志不僅輸出到控制臺(tái)娜氏,也可以輸出到文件中,使用日志工具
第一步:刪除application.properties所有的日志配置 第二步:在resources中創(chuàng)建logback-spring.xml墩新,看注解修改如下信息 1. <property name="log.path" value="E:/xujc_msg/edu"/> 2. <logger name="com.xujc" level="INFO"/>
<!--logback-spring.xml--> <?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="10 seconds"> <!-- 日志級(jí)別從低到高分為TRACE < DEBUG < INFO < WARN < ERROR < FATAL贸弥,如果設(shè)置為WARN,則低于WARN的信息都不會(huì)輸出 --> <!-- scan:當(dāng)此屬性設(shè)置為true時(shí)海渊,配置文件如果發(fā)生改變绵疲,將會(huì)被重新加載,默認(rèn)值為true --> <!-- scanPeriod:設(shè)置監(jiān)測(cè)配置文件是否有修改的時(shí)間間隔臣疑,如果沒有給出時(shí)間單位盔憨,默認(rèn)單位是毫秒。當(dāng)scan為true時(shí)讯沈,此屬性生效郁岩。默認(rèn)的時(shí)間間隔為1分鐘。 --> <!-- debug:當(dāng)此屬性設(shè)置為true時(shí)缺狠,將打印出logback內(nèi)部日志信息问慎,實(shí)時(shí)查看logback運(yùn)行狀態(tài)。默認(rèn)值為false挤茄。 --> <contextName>logback</contextName> <!-- name的值是變量的名稱如叼,value的值時(shí)變量定義的值。通過定義的值會(huì)被插入到logger上下文中穷劈。定義變量后笼恰,可以使“${}”來(lái)使用變量。 --> <property name="log.path" value="E:/xujc_msg/edu"/> <!-- 彩色日志 --> <!-- 配置格式變量:CONSOLE_LOG_PATTERN 彩色日志格式 --> <!-- magenta:洋紅 --> <!-- boldMagenta:粗紅--> <!-- cyan:青色 --> <!-- white:白色 --> <!-- magenta:洋紅 --> <property name="CONSOLE_LOG_PATTERN" value="%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level) |%blue(%thread) |%blue(%file:%line) |%green(%logger) |%cyan(%msg%n)"/> <!--輸出到控制臺(tái)--> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <!--此日志appender是為開發(fā)使用歇终,只配置最底級(jí)別挖腰,控制臺(tái)輸出的日志級(jí)別是大于或等于此級(jí)別的日志信息--> <!-- 例如:如果此處配置了INFO級(jí)別,則后面其他位置即使配置了DEBUG級(jí)別的日志练湿,也不會(huì)被輸出 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> <encoder> <Pattern>${CONSOLE_LOG_PATTERN}</Pattern> <!-- 設(shè)置字符集 --> <charset>UTF-8</charset> </encoder> </appender> <!--輸出到文件--> <!-- 時(shí)間滾動(dòng)輸出 level為 INFO 日志 --> <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在記錄的日志文件的路徑及文件名 --> <file>${log.path}/log_info.log</file> <!--日志文件輸出格式--> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> </encoder> <!-- 日志記錄器的滾動(dòng)策略猴仑,按日期,按大小記錄 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 每天日志歸檔路徑以及格式 --> <fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--日志文件保留天數(shù)--> <maxHistory>15</maxHistory> </rollingPolicy> <!-- 此日志文件只記錄info級(jí)別的 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 時(shí)間滾動(dòng)輸出 level為 WARN 日志 --> <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在記錄的日志文件的路徑及文件名 --> <file>${log.path}/log_warn.log</file> <!--日志文件輸出格式--> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此處設(shè)置字符集 --> </encoder> <!-- 日志記錄器的滾動(dòng)策略肥哎,按日期辽俗,按大小記錄 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--日志文件保留天數(shù)--> <maxHistory>15</maxHistory> </rollingPolicy> <!-- 此日志文件只記錄warn級(jí)別的 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>warn</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 時(shí)間滾動(dòng)輸出 level為 ERROR 日志 --> <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在記錄的日志文件的路徑及文件名 --> <file>${log.path}/log_error.log</file> <!--日志文件輸出格式--> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> <!-- 此處設(shè)置字符集 --> </encoder> <!-- 日志記錄器的滾動(dòng)策略,按日期篡诽,按大小記錄 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--日志文件保留天數(shù)--> <maxHistory>15</maxHistory> </rollingPolicy> <!-- 此日志文件只記錄ERROR級(jí)別的 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- <logger>用來(lái)設(shè)置某一個(gè)包或者具體的某一個(gè)類的日志打印級(jí)別崖飘、以及指定<appender>。 <logger>僅有一個(gè)name屬性杈女, 一個(gè)可選的level和一個(gè)可選的addtivity屬性朱浴。 name:用來(lái)指定受此logger約束的某一個(gè)包或者具體的某一個(gè)類吊圾。 level:用來(lái)設(shè)置打印級(jí)別,大小寫無(wú)關(guān):TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF翰蠢, 如果未設(shè)置此屬性项乒,那么當(dāng)前l(fā)ogger將會(huì)繼承上級(jí)的級(jí)別。 --> <!-- 使用mybatis的時(shí)候梁沧,sql語(yǔ)句是debug下才會(huì)打印檀何,而這里我們只配置了info,所以想要查看sql語(yǔ)句的話廷支,有以下兩種操作: 第一種把<root level="INFO">改成<root level="DEBUG">這樣就會(huì)打印sql频鉴,不過這樣日志那邊會(huì)出現(xiàn)很多其他消息 第二種就是單獨(dú)給mapper下目錄配置DEBUG模式,代碼如下恋拍,這樣配置sql語(yǔ)句會(huì)打印垛孔,其他還是正常DEBUG級(jí)別: --> <!--開發(fā)環(huán)境:打印控制臺(tái)--> <springProfile name="dev"> <!--可以輸出項(xiàng)目中的debug日志,包括mybatis的sql日志--> <logger name="com.xujc" level="INFO"/> <!-- root節(jié)點(diǎn)是必選節(jié)點(diǎn)施敢,用來(lái)指定最基礎(chǔ)的日志輸出級(jí)別周荐,只有一個(gè)level屬性 level:用來(lái)設(shè)置打印級(jí)別,大小寫無(wú)關(guān):TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF悯姊,默認(rèn)是DEBUG 可以包含零個(gè)或多個(gè)appender元素。 --> <root level="INFO"> <appender-ref ref="CONSOLE"/> <appender-ref ref="INFO_FILE"/> <appender-ref ref="WARN_FILE"/> <appender-ref ref="ERROR_FILE"/> </root> </springProfile> <!--生產(chǎn)環(huán)境:輸出到文件--> <springProfile name="pro"> <root level="INFO"> <appender-ref ref="CONSOLE"/> <appender-ref ref="DEBUG_FILE"/> <appender-ref ref="INFO_FILE"/> <appender-ref ref="ERROR_FILE"/> <appender-ref ref="WARN_FILE"/> </root> </springProfile> </configuration>
如果程序運(yùn)行出現(xiàn)異常贩毕,可以把異常信息輸出到文件中
- 添加注解
@Slf4j
- log.error(e.getMessage());
@ControllerAdvice
@Slf4j
public class GlobalException {
// 自定義異常處理
@ExceptionHandler(XujcException.class)
@ResponseBody
public R error(XujcException e) {
e.printStackTrace();
log.error(e.getMessage());
return R.error().code(e.getCode()).message(e.getMsg());
}
}