Springboot log4j2總結
阿新 • • 發佈:2022-04-16
Log4j2
PS: Log4j 已不再維護,而最新的是Log4j2, Log4j2 是全部重寫了Log4j,並擁有更加優秀的效能
1. 引入依賴,和去掉logging的依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <!-- log4j2 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>
2. 在resources 下增加檔案log4j2.xml,預設會讀取這個命名的檔案(名字也可以改,但沒啥意義,預設就行)
Log4j2.xml 解釋版
<?xml version="1.0" encoding="UTF-8"?> <!-- status : 這個用於設定log4j2自身內部的資訊輸出,可以不設定,當設定成trace時,會看到log4j2內部各種詳細輸出 monitorInterval : Log4j能夠自動檢測修改配置檔案和重新配置本身, 設定間隔秒數。 --> <Configuration status="WARN" monitorInterval="60"> <Properties> <!-- 配置日誌檔案輸出目錄 --> <Property name="LOG_HOME">./logs</Property> <!-- 格式化輸出:%date表示日期,%thread表示執行緒名,%-5level:級別從左顯示5個字元寬度 %msg:日誌訊息,%n是換行符--> <!-- %logger{36} 表示 Logger 名字最長36個字元 --> <!-- <property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />--> <!-- 這個多打印出了日期,執行的函式名及行號 --> <property name="LOG_PATTERN" value="%d|%t|%X{uid}|%-5level|%c.%M:%L|%m%n" /> </Properties> <Appenders> <!-- 控制檯輸出配置 --> <Console name="Console" target="SYSTEM_OUT"> <!-- 控制檯只輸出level及以上級別的資訊(onMatch),其他的直接拒絕(onMismatch) --> <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/> <!--輸出日誌的格式--> <PatternLayout pattern="${LOG_PATTERN}"/> </Console> <!-- FileAppender。servlet容器中的兩個web應用程式 可以擁有它們各自的配置,如果Log4j2位於它們共同使用 的類載入器中,則可以安全地將日誌寫入同一個檔案。預設 啟用bufferedIO以及immediateFlush(前者提高效能,後 者可以保證寫入,緩衝區沒滿也寫入!每次寫操作都會調 用flush,不過有點影響效能),如果是非同步Logger,即便 immediateFlush設定為false,非同步Logger和appender也 將在一批事件結束時自動flush,這樣做比較高效同時 保證了資料寫入磁碟 --> <!--檔案會打印出所有資訊,這個log每次執行程式會自動清空,由append屬性決定,適合臨時測試用--> <File name="Debug" fileName="${LOG_HOME}/debug.log" append="false"> <PatternLayout pattern="${LOG_PATTERN}"/> </File> <!-- 似乎可以看作是FileAppender的進化版,實現上不大 一樣,根據報導,相比啟用了bufferedIO的FileAppender 效能提高了20-200%(RandomAccessFile沒有bufferedIO 這個選項,因為它總是buffered的!) --> <RollingRandomAccessFile name="Error" immediateFlush="true" bufferSize="4096" fileName="${LOG_HOME}/error.log" filePattern="${LOG_HOME}/error.log.%d{yyyy-MM-dd}.gz" ignoreExceptions="false"> <PatternLayout pattern="${LOG_PATTERN}"/> <Filters> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/> </Filters> <!-- 這個的預設是一小時觸發一次 --> <TimeBasedTriggeringPolicy/> <DefaultRolloverStrategy> <Delete basePath="${LOG_HOME}" maxDepth="2"> <IfFileName glob="error.log.*.gz"/> <IfLastModified age="30d"/> </Delete> </DefaultRolloverStrategy> </RollingRandomAccessFile> <RollingRandomAccessFile name="System" immediateFlush="true" bufferSize="4096" fileName="${LOG_HOME}/system.log" filePattern="${LOG_HOME}/system.log.%d{yyyy-MM-dd}.gz" ignoreExceptions="false"> <PatternLayout pattern="${LOG_PATTERN}"/> <Filters> <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/> </Filters> <!-- 表示兩天觸發一次策略 --> <Policies> <CronTriggeringPolicy schedule="0 0 2 * * ?" evaluateOnStartup="true"/> </Policies> <DefaultRolloverStrategy> <Delete basePath="${LOG_HOME}" maxDepth="2" followLinks="true"> <IfFileName glob="system.log.*.gz"/> <IfLastModified age="7d"/> </Delete> </DefaultRolloverStrategy> </RollingRandomAccessFile> </Appenders> <!--Logger節點用來單獨指定日誌的形式,比如要為指定包下的class指定不同的日誌級別等。--> <!-- 定義logger,只有定義了logger 並引入appender,appender才會生效 --> <Loggers> <!--若是additivity設為false,則子Logger 只會在自己的appender裡輸出,而不會在 父Logger 的appender裡輸出。--> <!--過濾掉mybatis的一些無用的DEBUG資訊--> <Logger name="org.mybatis" level="info" additivity="false"> <AppenderRef ref="Console"/> </Logger> <!--過濾掉spring的一些無用的DEBUG資訊--> <Logger name="org.springframework" level="info" additivity="false"> <AppenderRef ref="Console"/> </Logger> <Logger name="org.hibernate.validator" level="info" additivity="false"> <AppenderRef ref="Console"/> </Logger> <!-- Root節點用來指定專案的根日誌,如果沒有單獨指定Logger,那麼就會預設使用該Root日誌輸出 --> <!-- 建立一個預設的root的logger --> <Root level="trace" includeLocation="true"> <AppenderRef ref="Console"/> <AppenderRef ref="Error" /> <AppenderRef ref="System" /> <AppenderRef ref="Debug" /> </Root> </Loggers> </Configuration>