logback
logback出自log4j的作者,性能和功能相比log4j作出了一些改進,而配置方法和log4j類似,是spring boot的默認日志組件。在application.properties文件中可以進行一些簡單的日志配置,參考第五篇。如果要作一些更詳細的配置,需要在resources目錄下配置logback-spring.xml
logback-spring.xml
spring boot官方建議使用logback-spring.xml這個文件名來配置默認的logback日志。關於logback詳細知識可以查官方文檔,這里提供一個比較實用的配置:在控制台輸出INFO級別日志,另外將warn警告日志和error錯誤日志分別保存到不同目錄文件,具體看注釋
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- appender是配置輸出終端,ConsoleAppender是控制台,name是自定義名 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <!-- 配置日志格式,這是一個比較通用的格式 --> <pattern>%d{HH:mm:ss.SSS} %-5level %logger{35} - %msg%n</pattern> </encoder> </appender> <!-- 輸出終端是滾動文件 --> <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 基於時間滾動,就是每天的日志輸出到不同的文件 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 輸出日志的目錄文件名,window中默認分區為當前程序的硬盤分區,%d{yyyy-MM-dd}是當前日期 --> <fileNamePattern>/log/warn/warn.%d{yyyy-MM-dd}.log</fileNamePattern> <!-- 最大保存99個文件,超出的歷史文件會被刪除 --> <maxHistory>99</maxHistory> </rollingPolicy> <!-- 按照日志級別進行過濾 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!-- 只收集WARN級別的日志,其他高級別和低級別的日志都放棄 --> <level>WARN</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <encoder> <pattern>%d{HH:mm:ss.SSS} %-5level %logger{35} - %msg%n</pattern> </encoder> </appender> <!-- 除了filter,其他 配置和上面一樣, 只是name和文件路徑不同--> <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/log/error/error.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>99</maxHistory> </rollingPolicy> <!-- 閾值過濾器 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <!-- 收集ERROR及ERROR以上級別的日志 --> <level>ERROR</level> </filter> <encoder> <pattern>%d{HH:mm:ss.SSS} %-5level %logger{35} - %msg%n</pattern> </encoder> </appender> <!-- root是根日志打印器,只有一個,負責整個系統的日志輸出 --> <root level="INFO"> <!-- 將上面三個輸出終端配置到根打印器,將對整個系統 生效。 --> <appender-ref ref="STDOUT" /> <appender-ref ref="WARN" /> <appender-ref ref="ERROR" /> </root> <!-- logger是root的子打印器,可以有多個,輸出name配置的包中的日志。 --> <!-- hello.dao是我的mybatis映射dao的包名,設置為debug可以打印mybatis的sql語句 --> <logger name="hello.dao" level="DEBUG" /> </configuration>
運行后結果是這樣的,E盤是我的程序當前分區,會自動生成log目錄如下,會分別保存error和warn級別的日志
level日志級別
在上面配置中的leven參數,主要使用了四種,,級別從低到高分別為debug,info,warn,error,當設置某一級別日志時,比他低級的日志不會輸出。
debug:調試,從名字可以看出其作用。程序中報錯無法解決時,使用調試來查看更多錯誤信息。在mybatis中使用這種日志才會輸出sql語句。 debug的輸出量太大,而且不懂源碼的人很多都看不懂,還有很多沒什么實際作用的日志信息刷屏,只適合報異常程序的調試。
info:信息,信息量比debug少很多,只會輸出一些重要的信息,適合開發時使用。
warn:警告,通常是可以修復的,不修復也不一定會引發異常,有時候是一些提示信息,但是比info信息更加重要
error:錯誤,很明顯,就是程序異常
access訪問日志
tomcat中默認是有access訪問日志的,用於記錄訪問者的IP,不過在spring boot中這個日志默認是關閉的。如果你的服務器結構中有nginx類的http服務器,access日志應該是在nginx中配置的。而tomcat這樣的后台服務器只需要記錄后台日志,不需要管access日志。如果想在spring boot中打開access日志,可以在application.properties中配置
#配置tomcat工作目錄,為當前分區的tomcat目錄 server.tomcat.basedir=/tomcat #開啟accesslog,會記錄到上面的目錄下 server.tomcat.accesslog.enabled=true