log4j2.0之後咱們一般在log4j2.xml中配置相關參數,在配置的時候咱們須要理解這些參數的具體含義,下面列出了這些參數的解釋。html
一、Logger 完成日誌信息的處理apache
<logger name="com.srd.ljzd" level="INFO" additivity="true"> <appender-ref ref="INFO" /> <appender-ref ref="WARN" /> <appender-ref ref="ERROR" /> <appender-ref ref="Mail" /> </logger>
logger中的name是指代碼的包名或類名,路徑要寫全,能夠配置不一樣包中的日誌輸出到不一樣的文件中。level是日誌輸出級別,定義輸出的層次和決定信息是否輸出,markdown
DEBUG<INFO<WARN<ERROR
additivity設置事件是否在root logger輸出,爲了不重複輸出,能夠在Logger 標籤下設置additivity爲」false」。app
二、Appender 設置在哪輸出日誌信息
FileAppender 普通地輸出到本地文件
FlumeAppender 將幾個不一樣源的日誌聚集、集中到一處。
JMSQueueAppender VS. JMSTopicAppender 與JMS相關的日誌輸出
RewriteAppender 對日誌事件進行掩碼或注入信息
RollingFileAppender 對日誌文件進行封存(詳細)
RoutingAppender 在輸出地之間進行篩選路由
SMTPAppender 將LogEvent發送到指定郵件列表
SocketAppender 將LogEvent以普通格式發送到遠程主機
SyslogAppender 將LogEvent以RFC 5424格式發送到遠程主機
AsynchAppender 將一個LogEvent異步地寫入多個不一樣輸出地
ConsoleAppender 將LogEvent輸出到命令行
FailoverAppender 維護一個隊列,系統將嘗試向隊列中的Appender依次輸出LogEvent,直到有一個成功爲止異步
其中ConsoleAppender、RollingFileAppender和SMTPAppender較爲經常使用。若是想詳細瞭解,能夠參考log4j的官方文檔佈局
ConsoleAppender將輸出寫到System.err或System.out。若是想將輸出寫到System.out,設置Console標籤下的target爲」SYSTEM_OUT」便可;若是想將輸出寫到System.err,設置Console標籤下的target爲」SYSTEM_ERR 「便可。post
RollingFileAppender跟FileAppender的基本用法同樣。但RollingFileAppender能夠設置log文件的size(單位:KB/MB/GB)上限、數量上限,當log文件超過設置的size上限,會自動被壓縮。RollingFileAppender能夠理解爲滾動輸出日誌,若是log4j 2記錄的日誌達到上限,舊的日誌將被刪除,騰出的空間用於記錄新的日誌,DefaultRolloverStrategy 標籤的max設置壓縮文件的上限(默認值爲7)。測試
SMTPAppender主要用來給指定的E-mail發送log event。spa
<SMTP name="Mail" subject="****SaaS系統正式版異常信息" to="yong.shi@lengjing.info" from="message@lengjing.info" smtpUsername="message@lengjing.info" smtpPassword="LENG****1234" smtpHost="mail.lengjing.info" smtpDebug="false" smtpPort="25" bufferSize="10"> <PatternLayout pattern="[%-5p]:%d{YYYY-MM-dd HH:mm:ss} [%t] %c{1}:%L - %msg%n" /> </SMTP>
SMTPAppender默認狀況下只發送ERROR級別以上的日誌,在測試的時候會發現低級別的日誌是不會經過郵箱發送的。命令行
三、Layout 設置日誌信息的輸出格式
layout有如下幾種:
org.apache.log4j.HTMLLayout(以HTML表格形式佈局)
org.apache.log4j.SimpleLayout(包含日誌訊息的級別和訊息字符串)
org.apache.log4j.TTCCLayout(包含日誌產生的時間、執行緒、類別等訊息)
org.apache.log4j.PatterLayout(能夠靈活地指定佈局格式)
詳細配置能夠參考官方文檔。
4,Filters
Filter能夠過濾log事件,並控制log輸出,詳細配置能夠參考官方文檔。
例如ThresholdFilter 能夠實現單個log級別的過濾功能。
5,Status
<Configuration status="OFF" monitorInterval="30">
log4j 2定義的status級別有8個:ALL,TRACE, DEBUG, INFO, WARN, ERROR ,FATAL,OFF。其實status屬性是幫助開發者找錯用的,它能夠檢測log4j 2的配置文件是否有錯,也能夠檢測到死循環的logger。
6,monitorInterval
<Configuration status="OFF" monitorInterval="30">
經過設置monitorInterval屬性,便可設置log4j 2自動檢測配置文件的時間間隔(單位:秒),最小間隔爲5秒。log4j 2檢測到配置文件有變化,會從新配置本身。
7,Policies 配置日誌相關策略
SizeBasedTriggeringPolicy 設置日誌大小達到必定大小後打包生成壓縮文件。
TimeBasedTriggeringPolicy 基於時間的觸發策略。該策略主要是完成周期性的log文件封存工做。有兩個參數:
interval,integer型,指定兩次封存動做之間的時間間隔。單位:以日誌的命名精度來肯定單位,好比yyyy-MM-dd-HH 單位爲小時,yyyy-MM-dd-HH-mm 單位爲分鐘。
modulate,boolean型,說明是否對封存時間進行調製。若modulate=true,則封存時間將以0點爲邊界進行偏移計算。好比,modulate=true,interval=4hours,那麼假設上次封存日誌的時間爲03:00,則下次封存日誌的時間爲04:00,以後的封存時間依次爲08:00,12:00,16:00。
這裏將我在項目中經常使用配置貢獻給你們,能夠知足大部分需求。
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="OFF" monitorInterval="30"> <properties> <!--設置日誌在硬盤上輸出的目錄--> <property name="logPath">D:/ljzx_log</property> </properties> <Appenders> <!--設置在控制檯打印日誌--> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="[%-5p]:%d{YYYY-MM-dd HH:mm:ss} [%t] %c{1}:%L - %msg%n" /> </Console> <!--設置級別爲INFO日誌輸出到info.log中--> <RollingFile name="INFO" filename="${logPath}/info.log" filepattern="${logPath}/%d{YYYYMMdd}-%i-info.log.zip"> <Filters> <!--設置只輸出級別爲INFO的日誌--> <ThresholdFilter level="INFO"/> <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/> </Filters> <PatternLayout pattern="[ %-5p]:%d{YYYY-MM-dd HH:mm:ss} [%t] %c{1}:%L - %msg%n" /> <Policies> <!--設置天天打包日誌一次--> <TimeBasedTriggeringPolicy interval="1" modulate="true"/> <!--設置日誌文件滿1MB後打包--> <SizeBasedTriggeringPolicy size="1 MB" /> </Policies> <DefaultRolloverStrategy max="20" /> </RollingFile> <!--設置級別爲WARN日誌輸出到warn.log中--> <RollingFile name="WARN" filename="${logPath}/warn.log" filepattern="${logPath}/%d{YYYYMMdd}-%i-warn.log.zip"> <Filters> <!--設置只輸出級別爲WARN的日誌--> <ThresholdFilter level="WARN"/> <ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/> </Filters> <PatternLayout pattern="[ %-5p]:%d{YYYY-MM-dd HH:mm:ss} [%t] %c{1}:%L - %msg%n" /> <Policies> <!--設置天天打包日誌一次--> <TimeBasedTriggeringPolicy interval="1" modulate="true"/> <!--設置日誌文件滿1MB後打包--> <SizeBasedTriggeringPolicy size="1 MB" /> </Policies> <DefaultRolloverStrategy max="20" /> </RollingFile> <!--設置級別爲ERROR日誌輸出到error.log中--> <RollingFile name="ERROR" filename="${logPath}/error.log" filepattern="${logPath}/%d{YYYYMMdd}-%i-error.log.zip"> <!--設置只輸出級別爲ERROR的日誌--> <ThresholdFilter level="ERROR"/> <PatternLayout pattern="[ %-5p]:%d{YYYY-MM-dd HH:mm:ss} [%t] %c{1}:%L - %msg%n" /> <Policies> <!--設置天天打包日誌一次--> <TimeBasedTriggeringPolicy interval="1" modulate="true"/> <!--設置日誌文件滿1MB後打包--> <SizeBasedTriggeringPolicy size="1 MB" /> </Policies> <DefaultRolloverStrategy max="20" /> </RollingFile> <!--設置經過郵件發送日誌信息--> <SMTP name="Mail" subject="XXXXSaaS系統正式版異常信息" to="yong.shi@lengjing.info" from="message@lengjing.info" smtpUsername="message@lengjing.info" smtpPassword="LENG****1234" smtpHost="mail.lengjing.info" smtpDebug="false" smtpPort="25" bufferSize="10"> <PatternLayout pattern="[%-5p]:%d{YYYY-MM-dd HH:mm:ss} [%t] %c{1}:%L - %msg%n" /> </SMTP> </Appenders> <Loggers> <logger name="com.srd.ljzd" level="INFO" additivity="true"> <appender-ref ref="INFO" /> <appender-ref ref="WARN" /> <appender-ref ref="ERROR" /> <appender-ref ref="Mail" /> </logger> <root level="DEBUG"> <appender-ref ref="Console"/> </root> </