logger4j.properties和log4j.xml的常用配置(乾貨)
背景:不介紹了,日誌對於一個專案的重要性大家都懂的;
直接上程式碼(含註釋說明)
log4j.xml的
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!--
* 1. 一個appender子元素定義一個日誌輸出目的地
* 2. 一個logger子元素定義一個日誌寫出器
-->
<!-- catalina.out -->
<appender name="consoleAppend" class="org.apache.log4j.ConsoleAppender" >
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} [%5p][%t][%c{1}]-[%M] %m%n" />
</layout>
</appender>
<!-- error log -->
<appender name="errorAppend" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${webapp.root}/logs/error/error.html" />
<param name="Append" value="true" />
<param name="DatePattern" value="yyyy-MM-dd-HH-mm'.html'"/>
<param name="MaxBackupIndex" value="10" />
<param name="MaxFileSize" value="4000000" />
<param name="encoding" value="utf-8"/>
<layout class="org.apache.log4j.HTMLLayout">
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="ERROR" />
</filter>
</appender>
<!-- biz -->
<appender name="bizAppend" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${webapp.root}/logs/biz/biz.log" />
<param name="Append" value="true" />
<param name="DatePattern" value="'.'yyyy-MM-dd-HH'.log'" />
<param name="MaxBackupIndex" value="10" />
<param name="MaxFileSize" value="4096" />
<param name="encoding" value="utf-8"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[date:%d{yyyy-MM-dd HH:mm:ss}] %m%n" />
</layout>
<filter class="com.raycloud.bizlogger.LoggerFilter">
<param name="LevelMin" value="40050" />
<param name="LevelMax" value="40050" />
</filter>
</appender>
<!-- 消費者消費的訊息記錄 -->
<appender name="taskExcutorAppend" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${webapp.root}/logs/excutor/excutor.log" />
<!-- 每小時1個檔案 -->
<param name="DatePattern" value="'.'yyyy-MM-dd-HH'.log'" />
<!-- 最大檔案的size,單位:Kb,Mb... -->
<param name="MaxFileSize" value="4096" />
<!-- 重啟了伺服器之後,是否在原有檔案的後面追加?true(預設):追加;false:不追加 -->
<param name="Append" value="true"/>
<!-- 預設 MaxBackupIndex 為 1 -->
<param name="MaxBackupIndex" value="10" />
<param name="Encoding" value="utf-8"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} [%5p] %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="WARN" />
</filter>
</appender>
<!-- ProcessHandler的日誌 -->
<appender name="processHandlerAppend" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${webapp.root}/logs/process/process.log" />
<!-- 每小時1個檔案 -->
<param name="DatePattern" value="'.'yyyy-MM-dd-HH'.log'" />
<!-- 最大檔案的size,單位:Kb,Mb... -->
<param name="MaxFileSize" value="4096" />
<!-- 重啟了伺服器之後,是否在原有檔案的後面追加?true(預設):追加;false:不追加 -->
<param name="Append" value="true"/>
<!-- 預設 MaxBackupIndex 為 1 -->
<param name="MaxBackupIndex" value="10" />
<param name="Encoding" value="utf-8"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} [%5p] %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="WARN" />
</filter>
</appender>
<!-- command node js的日誌 -->
<appender name="nodejsAppend" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${webapp.root}/logs/command/nodejs.log" />
<!-- 每小時1個檔案 -->
<param name="DatePattern" value="'.'yyyy-MM-dd-HH'.log'" />
<!-- 最大檔案的size,單位:Kb,Mb... -->
<param name="MaxFileSize" value="4096" />
<!-- 重啟了伺服器之後,是否在原有檔案的後面追加?true(預設):追加;false:不追加 -->
<param name="Append" value="true"/>
<!-- 預設 MaxBackupIndex 為 1 -->
<param name="MaxBackupIndex" value="10" />
<param name="Encoding" value="utf-8"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} [%5p] %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="WARN" />
</filter>
</appender>
<!-- command ffmpeg的日誌 -->
<appender name="ffmpegAppend" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${webapp.root}/logs/command/ffmpeg.log" />
<!-- 每小時1個檔案 -->
<param name="DatePattern" value="'.'yyyy-MM-dd-HH'.log'" />
<!-- 最大檔案的size,單位:Kb,Mb... -->
<param name="MaxFileSize" value="4096" />
<!-- 重啟了伺服器之後,是否在原有檔案的後面追加?true(預設):追加;false:不追加 -->
<param name="Append" value="true"/>
<!-- 預設 MaxBackupIndex 為 1 -->
<param name="MaxBackupIndex" value="10" />
<param name="Encoding" value="utf-8"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} [%5p] %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="WARN" />
</filter>
</appender>
<!--
logger的作用:
1.[name屬性]:指定你定義Logger物件時候的name
2. additivity : children-logger是否使用 rootLogger的配置,
additivity在log4j預設為true。這解釋了為什麼有些時候,一個日誌資訊在螢幕上會有多次輸出。
3.還可以指定level(輸出級別)、appender-ref(指定哪個append)
-->
<!-- loggers -->
<logger name="com.raycloud.picture.task.consumer.PictureVideoTaskExcutor" additivity="true">
<!-- 如果1個包想對應多個 Appender 就這樣,對於每個Appender自定義的日誌級別可以在Appender上加上filter -->
<appender-ref ref="taskExcutorAppend" />
</logger>
<logger name="com.raycloud.picture.task.handle.impl.DefaultVideoProcessorHandleImpl" additivity="true">
<appender-ref ref="processHandlerAppend" />
</logger>
<logger name="com.raycloud.picture.service.command.NodeJsCommandInvoke" additivity="true">
<appender-ref ref="nodejsAppend" />
</logger>
<logger name="com.raycloud.picture.service.command.FfmpegCommandInvoke" additivity="true">
<appender-ref ref="ffmpegAppend" />
</logger>
<!--
root的作用(相當於全域性的意思):
1.[priority ]:指定預設的全域性輸出級別
2.[appender-ref ]:指定一些預設的append(沒有指出特殊包或者類,即那些沒有指定<logger>元素的append)的輸出;
-->
<root>
<priority value="INFO" />
<!-- 將 logger 中 additivity=true 的日誌或者沒有指定<logger>的append輸出到控制檯 -->
<appender-ref ref="consoleAppend" />
<!-- 將全域性的 error 日誌輸出到error檔案中 -->
<appender-ref ref="errorAppend" />
<appender-ref ref="bizAppend" />
</root>
</log4j:configuration>
log4j.xml在web.xml中的配置
<!-- log4j -->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j-server.xml</param-value>
</context-param>
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>3000</param-value>
</context-param>
<!-- 先開啟Log4J,再去啟動spring等一些你需要的東西,有助於報錯時日誌的輸出 -->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
log4j.properties配置
####################################################
# 將日誌按照包分類輸出的配置檔案
####################################################
#根針對所有的日誌包
log4j.rootLogger = debug , appendConsole
#下面兩個配置是指定包的特殊處理,針對兩個指定的日誌級別,如果不指定的話則使用父日誌記錄器(rootLogger)的,指定了就覆蓋掉了父日誌記錄器的
#設定dao包的日誌配置
log4j.logger.com.xun.log4j.dao = debug, appendDao
#設定service包的日誌配置
log4j.logger.com.xun.log4j.service = info, appendService
#控制檯的配置
log4j.appender.appendConsole = org.apache.log4j.ConsoleAppender
#Threshold:設定此appender的日誌級別,這裡會覆蓋全域性的(rootLogger中)定義的日誌級別
log4j.appender.appendConsole.Threshold = error
#設定日誌輸出編碼方式為UTF-8,如果不指定,會以當前執行作業系統的編碼方式記錄
log4j.appender.appendConsole.encoding = UTF-8
log4j.appender.appendConsole.layout = org.apache.log4j.SimpleLayout
#appendDao配置
log4j.appender.appendDao = org.apache.log4j.FileAppender
log4j.appender.appendDao.layout = org.apache.log4j.PatternLayout
log4j.appender.appendDao.layout.ConversionPattern = [%d{yyyy-MM-dd HH:mm:ss}]--[%t] [%p] -%l -%m%n%n
log4j.appender.appendDao.Append = false
log4j.appender.appendDao.File = e:/test/log4j/dao.txt
#appendService
log4j.appender.appendService = org.apache.log4j.FileAppender
log4j.appender.appendService.layout = org.apache.log4j.PatternLayout
log4j.appender.appendService.layout.ConversionPattern = [%d{yyyy-MM-dd HH:mm:ss}]--[%t] [%p] -%l -%m%n%n
log4j.appender.appendService.Append = false
log4j.appender.appendService.File = e:/test/log4j/service.txt
//方式一:自動快速的使用Log4J預設的環境
// BasicConfigurator.configure();
//方式二:讀取properties檔案(自定義位置),但是注意這裡檔案的載入路徑
// PropertyConfigurator.configure("E:/workspace-idea/study-demo/log4j-test/src/main/resources/log4j/log4j.properties");
// PropertyConfigurator.configure(HowUseLog4JDemo.class.getClassLoader().getResource("log4j/log4j.properties").getFile());
//方式三:讀取XML檔案
// DOMConfigurator.configure("xxx");