Log4j2 配置
阿新 • • 發佈:2018-12-13
config:
<?xml version="1.0" encoding="UTF-8"?> <!-- http://logging.apache.org/log4j/2.x/manual/appenders.html --> <!-- status 負責列印日記系統的 WARN 級別以及以上的日記 --> <Configuration status="INFO"> <Properties> <!-- springboot:logs or ${sys:jboss.server.log.dir} --> <Property name="logFilePath">logs</Property> <Property name="logFileName">ProjectName</Property> <Property name="logPattern">%d [%t] %-5level %logger{36} - %m%n%throwable</Property> </Properties> <Appenders> <!--很直白,Console指定了結果輸出到控制檯--> <Console name="ConsolePrint" target="SYSTEM_OUT" direct="true"> <PatternLayout pattern="${logPattern}"/> </Console> <!--<File>輸出結果到指定檔案</File>--> <!--<RollingFile>同樣輸出結果到指定檔案,但是使用buffer,速度會快點</RollingFile>--> <!--filePattern:表示當日志到達指定的大小或者時間,產生新日誌時,舊日誌的命名路徑。--> <!--PatternLayout:和log4j一樣,指定輸出日誌的格式,append表示是否追加內容,值預設為true--> <!-- https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html--> <RollingFile name="RollingFileInfo" fileName="${logFilePath}/${logFileName}-info.log" filePattern="${logFilePath}/$${date:yyyy-MM}/${logFileName}-%d{yyyy-MM-dd-HH-mm}-%i-info.log.gz"> <PatternLayout pattern="${logPattern}"/> <!--注意,如果有多個ThresholdFilter,那麼Filters標籤是必須的--> <Filters> <!--首先需要過濾不符合的日誌級別,把不需要的首先DENY掉,然後在ACCEPT需要的日誌級別,次序不能顛倒--> <!--只輸出DEBUG級別以上的資訊--> <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/> <ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/> <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/> <ThresholdFilter level="FATAL" onMatch="ACCEPT" onMismatch="DENY"/> </Filters> <!-- RollingFile實現日誌檔案滾動更新,依賴於TriggeringPolicy[Policies]和RolloverStrategy[預設就是DefaultRolloverStrategy] --> <Policies> <!-- 下述3個TriggeringPolicy為觸發策略,其決定了何時觸發日誌檔案的rollover,即When --> <OnStartupTriggeringPolicy /> <!--時間策略,每隔24小時產生新的日誌檔案--> <TimeBasedTriggeringPolicy/> <!--大小策略,每到指定size大小時產生新的日誌檔案--> <SizeBasedTriggeringPolicy size="1MB"/> </Policies> <!-- DefaultRolloverStrategy指定了當觸發rollover時的預設策略 --> <!-- max引數指定了計數器的最大值。一旦計數器達到了最大值,過舊的檔案將被刪除。注意:不要認為max引數是需要保留的日誌檔案的最大數目 --> <!-- 即使在log4j2.xml中沒有顯式指明,也相當於為RollingFile配置下添加了如下語句。DefaultRolloverStrategy預設的max為7 --> <!-- max引數是與filePattern中的計數器%i配合起作用的,其具體作用方式與filePattern的配置密切相關--> <!-- 1.如果filePattern中僅含有date/time pattern,每次rollover時,將用當前的日期和時間替換檔案中的日期格式對檔案進行重新命名。max引數將不起作用。如,filePattern="%d{yyyy-MM-dd}.log"--> <!-- 2.如果filePattern中僅含有整數計數器(即%i),每次rollover時,檔案重新命名時的計數器將每次加1(初始值為1),若達到max的值,將刪除舊的檔案。如,filePattern="%i.log"--> <!-- 3.如果filePattern中既含有date/time pattern,又含有%i,每次rollover時,計數器將每次加1,若達到max的值,將刪除舊的檔案,直到data/time pattern不再符合,被替換為當前的日期和時間,計數器再從1開始。如,filePattern="%d{yyyy-MM-dd HH-mm}-%i.log"--> <DefaultRolloverStrategy max="10"> <!-- 通過DeleteAction可以刪除任何檔案,而不僅僅像DefaultRolloverStrategy那樣,刪除最舊的檔案,所以使用的時候需要謹慎! --> <!-- basePath必填。目錄掃描開始路徑。--> <!-- maxDepth:掃描的最大目錄深度。0表示basePath指定的檔案自身。Integer.MAX_VALUE表示掃描所有的目錄層。預設值為1,表示僅掃描basePath下的檔案。--> <Delete basePath="${logFilePath}" maxDepth="2"> <!-- pathConditions:刪除檔案的過濾條件,滿足指定條件的檔案將會被刪除,可以指定一個或多個。 --> <!-- 如果指定多個pathCondition,需要同時滿足。Conditions可以巢狀,當巢狀配置時,只有當滿足了外部的Condition時,才能對內部的condition進行判斷。如果Conditions不是巢狀的,會可能以任意順序進行判斷。--> <!-- Conditions也可以通過使用IfAll,IfAny,IfNot等類似於AND,OR,NOT的condition,實現複雜的condition。--> <!-- IfFileName-判斷檔案的檔名是否滿足正則表示式或glob表示式--> <!-- IfLastModified-判斷檔案的修改時間是否早於指定的duration--> <!-- IfAccumulatedFileCount-判斷在遍歷檔案樹的時候,檔案個數是否超過了指定值--> <!-- IfAccumulatedFileSize-判斷在遍歷檔案樹的時候,檔案的總大小是否超過了指定值--> <!-- IfAll-判斷巢狀的condition是否都滿足--> <!-- IfAny-判斷巢狀的condition是否有一個滿足--> <!-- IfNot-判斷巢狀的condition是否不滿足--> <IfFileName glob="*/${logFileName}-*-info.log.gz"> <!-- Note: 這裡的age必須和filePattern協調, 後者是精確到HH, 這裡就要寫成xH, xd就不起作用 另外, 數字最好>2, 否則可能造成刪除的時候, 最近的檔案還處於被佔用狀態,導致刪除不成功!--> --> <IfLastModified age="2m"> <IfAny> <IfAccumulatedFileSize exceeds="1MB" /> <IfAccumulatedFileCount exceeds="5" /> </IfAny> </IfLastModified> </IfFileName> </Delete> </DefaultRolloverStrategy> </RollingFile> <Async name="ASYNC"> <AppenderRef ref="RollingFileInfo"/> <AppenderRef ref="ConsolePrint"/> </Async> </Appenders> <Loggers> <!-- additivity=false:表示只用當前logger的appender-ref。 --> <Logger name="debug的package 名稱" level="debug" additivity="false"> <AppenderRef ref="ASYNC" /> </Logger> <Root level="info" includeLocation="true"> <AppenderRef ref="ASYNC" /> </Root> </Loggers> </Configuration>