Log4J.xml配置詳解
Appender
Appender:日誌輸出器,配置日誌的輸出級別、輸出位置等,包括以下幾類:
- ConsoleAppender: 日誌輸出到控制檯;
- FileAppender:輸出到檔案;
- RollingFileAppender:輸出到檔案,檔案達到一定閾值時,自動備份日誌檔案;
- DailyRollingFileAppender:可定期備份日誌檔案,預設一天一個檔案,也可設定為每分鐘一個、每小時一個;
- WriterAppender:可自定義日誌輸出位置。
日誌級別
- 一般日誌級別包括:ALL,DEBUG, INFO, WARN, ERROR,FATAL,OFF
- Log4J推薦使用:DEBUG, INFO, WARN, ERROR
輸出格式
Log4J最常用的日誌輸出格式為:org.apache.log4j.PatternLayOut,其主要引數為:
- %n - 換行
- %m - 日誌內容
- %p - 日誌級別(FATAL, ERROR,WARN, INFO,DEBUG or custom)
- %r - 程式啟動到現在的毫秒數
- %t - 當前執行緒名
- %d - 日期和時間, 一般使用格式 %d{yyyy-MM-dd HH:mm:ss, SSS}
- %l - 輸出日誌事件的發生位置, 同 %F%L%C%M
- %F - java 原始檔名
- %L - java 原始碼行數
- %C - java 類名,%C{1} 輸出最後一個元素
- %M - java 方法名
程式碼示例
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//log4j/log4j Configuration//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- 日誌輸出到控制檯 -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<!-- 日誌輸出格式 -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%p][%d{yyyy-MM-dd HH:mm:ss SSS}][%c]-[%m]%n"/>
</layout>
<!--過濾器設定輸出的級別-->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<!-- 設定日誌輸出的最小級別 -->
<param name="levelMin" value="INFO"/>
<!-- 設定日誌輸出的最大級別 -->
<param name="levelMax" value="ERROR"/>
</filter>
</appender>
<!-- 輸出日誌到檔案 -->
<appender name="fileAppender" class="org.apache.log4j.FileAppender">
<!-- 輸出檔案全路徑名-->
<param name="File" value="/data/applogs/own/fileAppender.log"/>
<!--是否在已存在的檔案追加寫:預設時true,若為false則每次啟動都會刪除並重新新建檔案-->
<param name="Append" value="false"/>
<param name="Threshold" value="INFO"/>
<!--是否啟用快取,預設false-->
<param name="BufferedIO" value="false"/>
<!--快取大小,依賴上一個引數(bufferedIO), 預設快取大小8K -->
<param name="BufferSize" value="512"/>
<!-- 日誌輸出格式 -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%p][%d{yyyy-MM-dd HH:mm:ss SSS}][%c]-[%m]%n"/>
</layout>
</appender>
<!-- 輸出日誌到檔案,當檔案大小達到一定閾值時,自動備份 -->
<!-- FileAppender子類 -->
<appender name="rollingAppender" class="org.apache.log4j.RollingFileAppender">
<!-- 日誌檔案全路徑名 -->
<param name="File" value="/data/applogs/RollingFileAppender.log" />
<!--是否在已存在的檔案追加寫:預設時true,若為false則每次啟動都會刪除並重新新建檔案-->
<param name="Append" value="true" />
<!-- 儲存備份日誌的最大個數,預設值是:1 -->
<param name="MaxBackupIndex" value="10" />
<!-- 設定當日志檔案達到此閾值的時候自動回滾,單位可以是KB,MB,GB,預設單位是KB,預設值是:10MB -->
<param name="MaxFileSize" value="10KB" />
<!-- 設定日誌輸出的樣式 -->`
<layout class="org.apache.log4j.PatternLayout">
<!-- 日誌輸出格式 -->
<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%-5p] [method:%l]%n%m%n%n" />
</layout>
</appender>
<!-- 日誌輸出到檔案,可以配置多久產生一個新的日誌資訊檔案 -->
<appender name="dailyRollingAppender" class="org.apache.log4j.DailyRollingFileAppender">
<!-- 檔案檔案全路徑名 -->
<param name="File" value="/data/applogs/own/dailyRollingAppender.log"/>
<param name="Append" value="true" />
<!-- 設定日誌備份頻率,預設:為每天一個日誌檔案 -->
<param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
<!--每分鐘一個備份-->
<!--<param name="DatePattern" value="'.'yyyy-MM-dd-HH-mm'.log'" />-->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%p][%d{HH:mm:ss SSS}][%c]-[%m]%n"/>
</layout>
</appender>
<!--
1. 指定logger的設定,additivity是否遵循預設的繼承機制
2. 當additivity="false"時,root中的配置就失靈了,不遵循預設的繼承機制
3. 程式碼中使用Logger.getLogger("logTest")獲得此輸出器,且不會使用根輸出器
-->
<logger name="logTest" additivity="false">
<level value ="INFO"/>
<appender-ref ref="dailyRollingAppender"/>
</logger>
<!-- 根logger的設定,若程式碼中未找到指定的logger,則會根據繼承機制,使用根logger-->
<root>
<appender-ref ref="console"/>
<appender-ref ref="fileAppender"/>
<appender-ref ref="rollingAppender"/>
<appender-ref ref="dailyRollingAppender"/>
</root>
</log4j:configuration>
測試程式碼
@Component
public class LogTest {
Logger logger = Logger.getLogger("logTest1");
@PostConstruct
public void test(){
for (int i=0; i<1000; i++) {
logger.info(i + "----Log.Info----");
logger.info(i + "----Log.Info----");
logger.info(i + "----Log.Info----");
}
}
}
測試結果
控制檯日誌輸出展示:
日誌輸出到檔案:
相關文章
- Druid配置詳解UI
- MyBatis 配置詳解MyBatis
- nginx配置詳解Nginx
- iptables配置詳解
- 配置pvst詳解
- hortonworks/registry配置詳解
- git ssh配置詳解Git
- Apache的配置詳解Apache
- nginx 詳解 - 詳細配置說明Nginx
- nginx 詳解 – 詳細配置說明Nginx
- webpack(2)——配置項詳解Web
- haproxy配置檔案詳解
- redis配置檔案詳解Redis
- Echars折線配置詳解
- redis 配置檔案詳解Redis
- Swoft2 配置詳解
- vsftpd.conf 配置詳解FTP
- Keepalived部署與配置詳解
- Nginx日誌配置詳解Nginx
- Nginx如何配置HTTPS詳解NginxHTTP
- php-fpm 配置詳解PHP
- Spring零配置之@Configuration註解詳解Spring
- docker-compose.yml配置詳解Docker
- Spring(環境搭建&配置詳解)Spring
- Echarts 柱狀圖配置詳解Echarts
- git config配置檔案詳解Git
- Ansible自動化配置詳解
- Android Studio Gradle 常用配置詳解AndroidGradle
- webpack loader配置全流程詳解Web
- 詳解:Flannel安裝與配置
- Nginx的配置檔案詳解Nginx
- Prometheus hashmod 配置引數詳解Prometheus
- Anaconda+Pytorch(GPU)配置詳解PyTorchGPU
- 詳解Spring Boot的RedisAutoConfiguration配置Spring BootRedis
- influx詳解(二):配置檔案UX
- Python - poetry(3)配置項詳解Python
- 詳解 Docker 容器網路配置Docker
- Swagger3 更新配置詳解Swagger