SpringBoot整合了許多的日誌框架,你可能不知道的到底應該選用哪個,但是SpringBoot爲你考慮了,就用它默認的配置就OK,而它默認使用的就是LogBack。
在springboot的resources目錄下新建logback-spring.xml或者logback.xml,兩種保存方式,
第一種不分級保存,所有的日誌都保存在同一個文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 屬性定義 -->
<!--日誌保存路勁-->
<property name="LOG_HOME" value="./logs"/>
<property name="appName" value="ERP_BOOT"/>
<property name="maxHistory" value="90"/>
<property name="logImpl" value="STDOUT"/>
<!-- 控制檯輸出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日誌消息,%n是換行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- 日誌 -->
<!-- 滾動記錄文件,先將日誌記錄到指定文件,當符合某個條件時,將日誌記錄到其他文件 RollingFileAppender-->
<appender name="MyLOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 過濾器,記錄「所有」級別的日誌 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!-- 滾動策略: 時間 和 大小 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/Log-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
<maxFileSize>256MB</maxFileSize>
<maxHistory>${maxHistory}</maxHistory>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss:SSS} [%thread] %-5level %logger{50}\(%F %L\) -%msg%n</pattern>
</encoder>
</appender>
<logger name="org.springframework" level="info"/>
<!--myibatis log configure-->
<logger name="java.sql" level="DEBUG"/>
<logger name="com.apache.ibatis" level="DEBUG"/>
<logger name="com.mysql.jdbc" level="DEBUG"/>
<logger name="com.example.demo.mapper" level="DEBUG"/>
<!-- 根日誌,所有日誌appender都必須包含在root/logger中,否則不會起作用 -->
<root level="info">
<appender-ref ref="STDOUT"/>
<appender-ref ref="MyLOG"/>
</root>
</configuration>
第二種把info,debug,error分開保存在不同文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 屬性定義 -->
<!--日誌保存路勁-->
<property name="LOG_HOME" value="./logs"/>
<property name="appName" value="ERP_BOOT"/>
<property name="maxHistory" value="90"/>
<!-- ConsoleAppender 控制檯輸出日誌 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- 對日誌進行格式化 -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss:SSS} [%thread] %-5level %logger{50}\(%F %L\) -%msg%n</pattern>
</encoder>
</appender>
<!-- DEBUG日誌 -->
<!-- 滾動記錄文件,先將日誌記錄到指定文件,當符合某個條件時,將日誌記錄到其他文件 RollingFileAppender-->
<appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 過濾器,記錄「所有」級別的日誌 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!-- 滾動策略: 時間 和 大小 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/debug/debugLog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
<maxFileSize>256MB</maxFileSize>
<maxHistory>${maxHistory}</maxHistory>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss:SSS} [%thread] %-5level %logger{50}\(%F %L\) -%msg%n</pattern>
</encoder>
</appender>
<!-- INFO級別日誌 -->
<appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 過濾器,只記錄「INFO」級別的日誌 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/info/infoLog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
<maxFileSize>256MB</maxFileSize>
<maxHistory>${maxHistory}</maxHistory>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss:SSS} [%thread] %-5level %logger{50}\(%F %L\) -%msg%n</pattern>
</encoder>
</appender>
<!-- WARN級別日誌 -->
<appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 過濾器,只記錄「WARN」級別的日誌 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/warn/warnLog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
<maxFileSize>256MB</maxFileSize>
<maxHistory>${maxHistory}</maxHistory>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss:SSS} [%thread] %-5level %logger{50}\(%F %L\) -%msg%n</pattern>
</encoder>
</appender>
<!-- ERROR級別日誌 -->
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 過濾器,只記錄「ERROR」級別的日誌 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/error/errorLog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
<maxFileSize>256MB</maxFileSize>
<maxHistory>${maxHistory}</maxHistory>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss:SSS} [%thread] %-5level %logger{50}\(%F %L\) -%msg%n</pattern>
</encoder>
</appender>
<logger name="org.springframework" level="info"/>
<logger name="java.sql.PreparedStatement" level="DEBUG"/>
<!-- 自己項目的mapper 路徑-->
<logger name="com.example.demo.mapper" level="DEBUG"/>
<!-- 根日誌,所有日誌appender都必須包含在root/logger中,否則不會起作用 -->
<root level="INFO">
<appender-ref ref="STDOUT"/>
<appender-ref ref="DEBUG"/>
<appender-ref ref="INFO"/>
<appender-ref ref="WARN"/>
<appender-ref ref="ERROR"/>
</root>
</configuration>