log4j2配置详情
生活随笔
收集整理的這篇文章主要介紹了
log4j2配置详情
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
<?xml version="1.0" encoding="UTF-8"?> /app_data/logs/my_app_log UTF-8 [%d{yyyy-MM-dd HH:mm:ss.SSS}][%-5p][%T][%c.%M:%L] %msg%xEx%n 1MB <Appenders><!-- Console Appender常用于將日志輸出到System.out,一般用在開發環境 --><Console name="Console" target="SYSTEM_OUT"><!-- 接受程序中DEBUG級別的日志進行處理,onMatch的值為 ACCEPT 表示接受該級別及以上的,onMismatch 的值為 DENY 表示拒絕該等級一下的--> <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/><!-- 在大多數情況下,Appender將格式化LogEvent的責任委托給Layout --><PatternLayout pattern="${log_pattern}"/></Console><!-- RollingFile name:指定Appender的名字,fileName:指定輸出日志的目的文件帶全路徑的文件名,filePattern:指定新建日志文件的名稱格式. PatternLayout:輸出格式,不設置默認為:%m%n,Policies:指定滾動日志的策略,就是什么時候進行新建日志文件輸出日志.--> <!-- 這個RollingFile Appender會打印出所有的DEBUG及以下級別(DEBUG、INFO、ERROR、FATAL、OFF)的信息 --><RollingFile name="DebugLogRollingFile" fileName="${log_base_path}/my_app_debug.log"filePattern="${log_base_path}/$${date:yyyy_MM_dd}/my_app_debug_%d{yyyy_MM_dd_HH}_%i.log.gz"><ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="${log_pattern}" charset="UTF-8"/><!-- Policies表示一個CompositeTriggeringPolicy,可以組合多個TriggeringPolicy,只要內部的任意一個TriggeringPolicy滿足觸發條件,都會滾動日志 --><Policies><!-- TimeBasedTriggeringPolicy用于按時間滾動日志。只要filePattern屬性值中的日期/時間模式(pattern)不再應用于當前文件時就進行日志滾動。這種規則通過interval和modulate屬性來配置。interval屬性指定一個整數,用于基于日期/時間模式中的最小的時間單位數滾動一次。例如,filePattern值為/app_data/logs/my_app/$${date:yyyy_MM_dd}/my_app_%d{yyyy_MM_dd_HH}_%i.log,這里使用小時作為最小的時間單位時,假如interval參數值為4,則表示每4小時滾動一次。默認值為1。modulate表示是否調整interval屬性值以便下次滾動發生在interval邊界處。如果時間最小單位為小時,當前時間為早上3點,間隔為4小時,則第一次滾動將發生在早上4點時(而不是早上7點),后續滾動將發生在早上8點、中午12點、下午4點等時刻 --><TimeBasedTriggeringPolicy interval="1" modulate="false"/><!-- SizeBasedTriggeringPolicy用于按文件大小滾動日志。每當日志文件超過size指定的大小(一般不超過幾十MB,否則使用軟件打開導出的日志時很不方便),則這size大小的日志會自動存入按filePattern屬性指定建立的文件夾下面并進行壓縮存檔 --><SizeBasedTriggeringPolicy size="${max_single_file_size}"/></Policies><!-- DefaultRolloverStrategy可以同時接受RollingFileAppender中filePattern屬性值中日期/時間和整數計數器(%i)的pattern,當日期/時間滿足條件時,則會使用當前的日期/時間生成新的日志文件,如果filePattern屬性值中含有一個整數計數器%i,則在每次滾動時該整數都會增加,如果filePattern屬性值中同時包含了日期/時間和整數計數器(%i),計數器會在日期/時間不變時而滿足其他滾動觸發條件時(文件大小)開始自增,直到日期/時間發生變化時,計數器會重新自增。以.gz、.zip、.bz2、deflate、pack200或xz結尾的filePattern值,會在日志文件歸檔時以后綴對應的格式進行壓縮。min屬性指定計數器的最小值,默認為1。max屬性指定計數器的最大值,一旦計數器達到了最大值,最早的歸檔將會在每次滾動時被刪除,默認值為7。fileIndex屬性如果設置為max(默認),則具有更大索引的文件比具有更小索引的文件內容更新,如果設置為min,文件將重命名且計數器將遵循Fixed Window策略,這兩種情況均有可能導致批量的文件重命名,自2.8版本開始,如果fileIndex屬性設置為nomax,則min和max屬性值都將會被忽略,文件編號將每次遞增1,每次滾動都會遞增到更大的值,且沒有最大文件編號的限制 --><!--<DefaultRolloverStrategy max="100" min="1" fileIndex = "nomax"/>--><DefaultRolloverStrategy fileIndex="nomax"><!-- Log4j 2.5引入了刪除動作(Delete元素)。在滾動刪除舊的日志文件時,相比使用DefaultRolloverStrategy的max屬性,該功能可以讓用戶擁有更多的刪除控制。刪除動作可以讓用戶配置若干個條件來刪除相對于基準目錄的文件。該功能可以刪除非日志文件,使用時一定要小心??梢酝ㄟ^testMode屬性來測試配置是否會錯刪文件。basePath屬性值用于指定刪除文件的基準目錄,必須顯式指定。maxDepth屬性指定掃描目錄的最大層級,0表示僅能訪問基準目錄(安全限制不能訪問的情況除外),Integer.MAX_VALUE值表示可以訪問所有層級。默認值為1,表示僅掃描基準目錄下的文件。testMode屬性值如果設置為true,文件不會實際刪除,而是在status logger打印一條INFO級別的消息,可以使用該功能來測試是否會錯刪目標文件,默認為false。--><!-- 這里的Delete元素配置了每次滾動都會刪除基準目錄下匹配“*/my_app_debug_*.log.gz”日志文件,只要9分鐘以前的日志文件總大小超過2MB,或9分鐘以前的日志文件文件總數超過2個就按時間順序刪除較早的日志文件。該元素可以防止日志文件所在分區的磁盤空間被占滿。特別需要注意的是,只有在發生日志滾動時才會嘗試進行刪除,否則即使滿足了刪除條件,但如果沒有新的滾動日志生成的話也不會發生刪除操作。 --><Delete basePath="${log_base_path}" maxDepth="2"><!-- Delete元素里可以指定若干個PathCondition類型的元素。如果指定了不止一個條件,則這些條件都需要在刪除之前接受某個路徑。這些條件可以嵌套,只有外部條件接受某個路徑之后,其內部條件才會決定是否接受該路徑。如果這些條件沒有嵌套,則它們的執行順序是任意的。這些條件也可以通過使用IfAll, IfAny和IfNot等組合條件進行AND、OR和NOT等邏輯運算。用戶也可以創建自定義條件或使用內置條件:- IfFileName:接受匹配正則表達式或glob的文件路徑;- IfLastModified:接受比指定時段早或一樣早的文件;- IfAccumulatedFileCount:在遍歷文件樹時文件總數超過文件數上限后接受路徑;- IfAccumulatedFileSize:在遍歷文件樹時文件總大小超過上限后接受路徑;- IfAll:如果所有內嵌條件都接受了某個路徑才會接受該路徑,相當于AND邏輯,其內嵌條件的執行順序是任意的;- IfAny:如果任意一個內嵌條件接受了某個目錄就接受該目錄,相當于OR邏輯,其內嵌條件的執行順序是任意的;- IfNot:如果內嵌條件不接受某個路徑就接收該路徑,相當于NOT邏輯。--><!-- IfFileName可以通過glob(使用受限的模式語言,比正則更簡單)或regex屬性(正則)來匹配相對路徑(相對于Delete的basePath屬性指定的基準目錄)--><!-- 當外部的條件滿足時才會計算內部的條件,內部的同級條件的計算順序是任意的。 --><IfFileName glob="*/my_app_debug_*.log.gz"><!-- IfLastModified可以通過age屬性值來指定接受最后修改時間為指定時間或早于指定時間的路徑,該屬性的值可參考org.apache.logging.log4j.core.appender.rolling.action.Duration.parse(CharSequence text)方法的文檔 --><!-- 這里的IfLastModified指定刪除達到或超過60天內的文件 --><IfLastModified age="9m"><!-- 這里的IfAny內嵌了兩個PathCondition,表示滿足任意一個條件即可 --><IfAny><!-- IfAccumulatedFileSize可通過exceeds屬性值指定一個文件總大小上限值。如果文件數超過了該上限值則刪除文件 --><IfAccumulatedFileSize exceeds="2MB"/><!-- IfAccumulatedFileCount可通過exceeds屬性值指定一個文件總數上限值。如果文件數超過了該上限值則刪除文件 --><IfAccumulatedFileCount exceeds="2"/></IfAny></IfLastModified></IfFileName></Delete></DefaultRolloverStrategy></RollingFile><RollingFile name="InfoLogRollingFile" fileName="${log_base_path}/my_app_info.log"filePattern="${log_base_path}/$${date:yyyy_MM_dd}/my_app_info_%d{yyyy_MM_dd_HH}_%i.log.gz"><ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="${log_pattern}"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="${max_single_file_size}"/></Policies><DefaultRolloverStrategy fileIndex="nomax"><Delete basePath="${log_base_path}" maxDepth="2"><IfFileName glob="*/my_app_info_*.log.gz"><!-- 這里表示匹配“*/my_app_info_*.log.gz”模式的日志文件的刪除策略如下:- 只要日志文件總數量超過5個就刪除按時間順序最早的日志文件- 只要日志文件總大小超過10MB就會刪除按時間順序最早的日志文件- 只要日志文件最近修改時間為9分鐘前或更早就會刪除按時間順序最早的日志文件 --><IfAny><IfAccumulatedFileSize exceeds="8MB"/><IfAccumulatedFileCount exceeds="5"/><IfLastModified age="9m"/></IfAny></IfFileName></Delete></DefaultRolloverStrategy></RollingFile><RollingFile name="WarnLogRollingFile" fileName="${log_base_path}/my_app_warn.log"filePattern="${log_base_path}/$${date:yyyy_MM_dd}/my_app_warn_%d{yyyy_MM_dd_HH}_%i.log.gz"><ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="${log_pattern}"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="${max_single_file_size}"/></Policies><DefaultRolloverStrategy fileIndex="nomax"><Delete basePath="${log_base_path}" maxDepth="2"><IfFileName glob="*/my_app_warn_*.log.gz"><IfAny><IfAccumulatedFileSize exceeds="3GB"/><IfAccumulatedFileCount exceeds="3000"/><IfLastModified age="30d"/></IfAny></IfFileName></Delete></DefaultRolloverStrategy></RollingFile><RollingFile name="ErrorLogRollingFile" fileName="${log_base_path}/my_app_error.log"filePattern="${log_base_path}/$${date:yyyy_MM_dd}/my_app_error_%d{yyyy_MM_dd_HH}_%i.log.gz"><ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="${log_pattern}"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="${max_single_file_size}"/></Policies><DefaultRolloverStrategy fileIndex="nomax"><Delete basePath="${log_base_path}" maxDepth="2"><IfFileName glob="*/my_app_error_*.log.gz"><IfAny><IfAccumulatedFileSize exceeds="3GB"/><IfAccumulatedFileCount exceeds="3000"/><IfLastModified age="30d"/></IfAny></IfFileName></Delete></DefaultRolloverStrategy></RollingFile><!-- 記錄druid的SQL語句 --><RollingFile name="DruidSqlRollingFile" fileName="${log_base_path}/druid.log"filePattern="${log_base_path}/$${date:yyyy_MM_dd}/druid_%d{yyyy_MM_dd_HH}_%i.log.gz"><PatternLayout pattern="${log_pattern}"/><Policies><TimeBasedTriggeringPolicy/><SizeBasedTriggeringPolicy size="${max_single_file_size}"/></Policies><DefaultRolloverStrategy fileIndex="nomax"><Delete basePath="${log_base_path}" maxDepth="2" testMode="true"><IfFileName glob="*/druid_*.log.gz"><IfAny><IfAccumulatedFileSize exceeds="3GB"/><IfAccumulatedFileCount exceeds="3000"/><IfLastModified age="30d"/></IfAny></IfFileName></Delete></DefaultRolloverStrategy></RollingFile>
</Appenders><!--定義logger,只有定義了logger并引入的appender,appender才會生效-->
<Loggers><!-- 當Logger在配置文件中聲明時,就創建了一個LoggerConfig對象,兩者一一對應,LoggerConfig包含一些Filter、這些Filters用于過濾傳遞給任意Appender的LogEvent,它還包含一些Appender的引用。Logger本身執行無指向的動作,它僅含有一個與LoggerConfig關聯的名稱(通過name屬性指定),root Logger具有固定的默認名稱,其他Logger需要指定各自的name屬性值。LoggerConfig會被分配一個日志級別,通過level屬性來指定。內建的日志級別按優先級從高到底排序有:OFF > FATAL >ERROR > WARN > INFO > DEBUG > TRACE > ALL,Log4j 2 也支持自定義的日志級別。--><Root level="ALL"><AppenderRef ref="Console"/><AppenderRef ref="InfoLogRollingFile"/><AppenderRef ref="WarnLogRollingFile"/><AppenderRef ref="DebugLogRollingFile"/><AppenderRef ref="ErrorLogRollingFile"/></Root><!-- 每個LoggerConfig的日志級別如果沒有顯式配置,則會繼承其父級LoggerConfig的日志級別,而root LoggerConfig如果沒有配置日志級別,則會為其分配一個默認的ERROR級別 --><!-- 某個Logger所允許的每條日志打印請求都會傳遞給其LoggerConfig中的所有Appender,也會傳遞給該LoggerConfig的parentLoggerConfig中的Appender,這種現象稱為相加性(Additivity)。也就是說,Appender會從LoggerConfig的繼承中繼承相加性。這種特性可以用來匯整某幾個logger的輸出,可以在聲明Logger的配置文件中設置additivity="false"來禁用這種疊加繼承 ,則這個logger不會將日志流反饋到root中,可以達到以logger中配置的appender方式來輸出日志而其他地方輸出的目的name 為要輸出日志的包名或者類名--><!--記錄druid-sql的記錄--><Logger name="druid.sql.Statement" level="debug" additivity="false"><appender-ref ref="DruidSqlRollingFile"/></Logger><!--過濾掉spring和mybatis的一些無用的DEBUG信息--><Logger name="org.springframework" level="INFO"/><Logger name="org.mybatis" level="INFO"/><!--log4j2 自帶過濾日志--><Logger name="org.apache.catalina.startup.DigesterFactory" level="error"/><Logger name="org.apache.catalina.util.LifecycleBase" level="error"/><Logger name="org.apache.coyote.http11.Http11NioProtocol" level="warn"/><Logger name="org.apache.sshd.common.util.SecurityUtils" level="warn"/><Logger name="org.apache.tomcat.util.net.NioSelectorPool" level="warn"/><Logger name="org.crsh.plugin" level="warn"/><Logger name="org.crsh.ssh" level="warn"/><Logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="error"/><Logger name="org.hibernate.validator.internal.util.Version" level="warn"/><Logger name="org.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration" level="warn"/><Logger name="org.springframework.boot.actuate.endpoint.jmx" level="warn"/><Logger name="org.thymeleaf" level="warn"/>
</Loggers>
在這里插入代碼片
總結
以上是生活随笔為你收集整理的log4j2配置详情的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PM血泪总结项目管理中存在的教训
- 下一篇: python经典实例应用_《Python