log4j2

1 日志級別

? ? 日志記錄器(Logger)的行為是分等級的物臂。如下表所示

分為OFF、FATAL产上、ERROR棵磷、WARN、INFO晋涣、DEBUG仪媒、ALL或者您定義的級別。Log4j建議只使用四個級別谢鹊,優(yōu)先級從高到低分別是 ERROR>WARN>INFO>DEBUG算吩。通過在這里定義的級別,您可以控制到應(yīng)用程序中相應(yīng)級別的日志信息的開關(guān)佃扼。比如在這里定義了INFO級別偎巢,則應(yīng)用程序中所有DEBUG級別的日志信息將不被打印出來,也是說大于等于的級別的日志才輸出松嘶。

2 log4j2文件的配置大致結(jié)構(gòu)

? ? log4j2.xml文件的配置大致如下:

Configuration

? ? properties

? ? Appenders

? ? ? ? Console

? ? ? ? ? ? PatternLayout

? ? ? ? File

? ? ? ? RollingRandomAccessFile? ?

? ? ? ? ? ? Filters(過濾機(jī)制)

? ? ? ? ? ? PatternLayout(控制日志信息輸出格式)

? ? ? ? ? ? Polices(控制日志何時when滾動)

? ? ? ? ? ? Strategy(控制日志如何how滾動)

? ? Loggers

? ? ? ? AsyncLogger(異步日志器)

? ? ? ? ? ? AppenderRef

? ? ? ? Logger(同步日志器)

? ? ? ? ? ? AppenderRef

? ? ? ? RootLogger

? ? ? ? ? ? AppenderRef

? ? 2.1 Configuration

Configuration:為根節(jié)點(diǎn)艘狭,有status和monitorInterval等多個屬性

* status的值有 “trace”, “debug”, “info”, “warn”, “error” and “fatal”,用于控制log4j2日志框架本身的日志級別翠订,如果將stratus設(shè)置為較低的級別就會看到很多關(guān)于log4j2本身的日志,如加載log4j2配置文件的路徑等信息

* monitorInterval遵倦,含義是每隔多少秒重新讀取配置文件尽超,可以不重啟應(yīng)用的情況下修改配置

? ? 2.2 Appenders: 輸出源,用于定義日志輸出的地方梧躺,log4j2支持的輸出源有很多似谁,有控制臺Console傲绣、文件File、MongoDB巩踏、Flume秃诵、RollingRandomAccessFile等。

1. Console: 控制臺輸出源是將日志打印到控制臺上塞琼,開發(fā)的時候一般都會配置菠净,用于調(diào)試;

2. File:文件輸出源彪杉,用于將日志寫入到指定的文件毅往,需要配置輸入到哪個位置(如/data/applogs);

3. RollingRandomAccessFile: 該輸出源也是寫入到文件,不同的是不同的是比File更加強(qiáng)大派近,可以指定當(dāng)文件達(dá)到一定大信饰ā(如20MB)時,另起一個文件繼續(xù)寫入日志渴丸,另起一個文件就涉及到新文件的名字命名規(guī)則侯嘀,因此需要配置文件命名規(guī)則。這種方式更加實(shí)用谱轨,因?yàn)槟悴豢赡芤恢蓖粋€文件中寫残拐,如果一直寫,文件過大碟嘴,打開就會卡死溪食,也不便于查找日志。

* name: 日志器名

* fileName: 指定當(dāng)前日志文件的位置和名稱娜扇;

* filePattern: 指定當(dāng)發(fā)生Rolling時错沃,文件的轉(zhuǎn)移和重命名規(guī)則

* SizeBasedTriggeringPolicy: 指定當(dāng)文件體積大于size指定的值時,觸發(fā)Rolling雀瓢,生成一個新的日志文件;

* DefaultRolloverStrategy: 指定最多保存的文件個數(shù),默認(rèn)是9枢析;

* TimeBasedTriggeringPolicy: 與filePattern結(jié)合使用,比如filePattern="${LOG_HOME}/apibiz_%d{yyyyMMdd}.log”刃麸、TimeBasedTriggeringPolicy的interval=1醒叁,則表示每天生成一個文件,若filePattern改成{yyyyMMddHHmm}泊业,則每分鐘生成一個文件把沼;

? ?

? 2.4 Filters:可以配置一系列的過濾器

? ? Log4j2的onMatch和onMismatch屬性值詳解如下:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? onMatch和onMismatch都有三個屬性值,分別為Accept吁伺、DENY和NEUTRAL;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? 分別介紹這兩個配置項(xiàng)的三個屬性值:? ? ? ? ? ? ? ? ? ? ? -? ? ? ? ? ? ? ?

? ? --------------------? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? onMatch="ACCEPT" 表示匹配該級別及以上? ? ?

? ? onMatch="DENY" 表示不匹配該級別及以上? ? ? ? ?

? ? onMatch="NEUTRAL" 表示該級別及以上的饮睬,由下一個filter處理,如果當(dāng)前是最后一個篮奄,則表示匹配該級別及以上

? ? onMismatch="ACCEPT" 表示匹配該級別以下? ?

? ? onMismatch="NEUTRAL" 表示該級別及以下的捆愁,由下一個filter處理割去,如果當(dāng)前是最后一個,則不匹配該級別以下的

? ? onMismatch="DENY" 表示不匹配該級別以下的? ? ? ? ? ? ? -? ? ? ? ? ?

? ? --------------------

? 2.5 PatternLayout

* charset ##指定字符集?

* pattern ##指定格式

* alwaysWriteExceptions ##默認(rèn)為true昼丑,輸出異常

* header ##可選項(xiàng)呻逆。包含在每個日志文件的頂部

* footer ##可選項(xiàng)。包含在每個日志文件的尾部菩帝。

? ? ? ?

? 2.5.1 pattern屬性參數(shù)格式描述

######### 常見參數(shù) #########

%c{參數(shù)} 或 %logger{參數(shù)}? ##輸出日志名稱

%C{參數(shù)} 或 %class{參數(shù)? ? ##輸出類型

%d{參數(shù)}{時區(qū)te{參數(shù)}{時區(qū)} ##輸出時間

%F|%file? ? ? ? ? ? ? ? ? ##輸出文件名

highlight{pattern}{style} ##高亮顯示

%l? ##輸出錯誤的完整位置

%L? ##輸出錯誤行號

%m 或 %msg 或 %message ##輸出錯誤信息

%M 或 %method ##輸出方法名

%n? ? ? ? ? ? ##輸出換行符

%level{參數(shù)1}{參數(shù)2}{參數(shù)3} ##輸出日志的級別

%t 或 %thread? ? ? ? ? ? ? ##創(chuàng)建logging事件的線程名

*/

######### 特殊符號 ############

#有些特殊符號不能直接打印咖城,需要使用實(shí)體名稱或者編號

//

& —— & 或者 &

< —— <? 或者 <

> —— >? 或者 >

“ —— " 或者 "

‘ —— ' 或者 '

*/

######## pattern對齊修飾 ##########

// 對齊修飾,可以指定信息的輸出格式胁附,如是否左對齊酒繁,是否留空格等。

## 編寫格式為在任何pattern和%之間加入一個小數(shù)控妻,可以是正數(shù)州袒,也可以是負(fù)數(shù)。

## 整數(shù)表示右對齊弓候,負(fù)數(shù)表示左對齊郎哭;

## 整數(shù)位表示輸出信息的最小n個字符,如果輸出信息不夠n個字符菇存,將用空格補(bǔ)齊夸研;

## 小數(shù)位表示輸出信息的最大字符數(shù),如果超過n個字符依鸥,則只保留最后n個字符的信息

## (注意:保留的是后20個字符亥至,而不是前20個字符)

*/

#示例如下

%20 —— 右對齊,不足20個字符則在信息前面用空格補(bǔ)足贱迟,超過20個字符則保留原信息

%-20 —— 左對齊姐扮,不足20個字符則在信息后面用空格補(bǔ)足,超過20個字符則保留原信息

%.30 —— 如果信息超過30個字符衣吠,則只保留最后30個字符

%20.30 —— 右對齊茶敏,不足20個字符則在信息前面用空格補(bǔ)足,超過30個字符則只保留最后30個字符

%-20.30 —— 左對齊缚俏,不足20個字符則在信息后面用空格補(bǔ)足惊搏,超過30個字符則只保留最后30個字符

? ?

? ? 2.6 Loggers:日志器,分為跟日志器Root和自定義日志器自定義時需要指定每個Logger的名稱name(對于命名可以以包名作為日志的名字忧换,不同的包配置不同的級別等)恬惯,日志級別level,相加性additivity(是否繼承下面配置的日志器)包雀, 對于一般的日志器(如Console宿崭、File、RollingRandomAccessFile)一般需要配置一個或多個輸出源AppenderRef才写; 每個logger可以指定一個level(TRACE, DEBUG, INFO, WARN, ERROR, ALL or OFF)葡兑,不指定時level默認(rèn)為ERROR

additivity指定是否同時輸出log到父類的appender,缺省為true赞草。

log4j.xml配置樣例

<?xml version="1.0" encoding="UTF-8"?>

<!—日志框架本身的日志級別為warn,也就是說不會看到日志框架本身warn以下級別的日志信息-->

<configuration status="WARN">

? <Properties>

? ? ? <!—日志輸出格式讹堤,不足5個字符時左對齊,比對2.5中對pattern參數(shù)的解釋來看-->

? ? ? <Property name="PATTERN_LAYOUT">[search-mobile-web]%d %-5p [%c] %m%n</Property>

? ? ? <!—日志路徑-->

? ? ? <Property name="LOG_HOME">/data/applogs/search-mobile-web/</Property>

? </Properties>

? <appenders>

? ? ? <!—沒有filter厨疙,表示不過濾洲守,任何級別的日志都匹配-->

? ? ? <RollingRandomAccessFile

? ? ? ? ? ? name="rootAppender"

? ? ? ? ? ? fileName="${LOG_HOME}/root.log"

? ? ? ? ? ? filePattern="${LOG_HOME}/root_%d{yyyyMMdd}.log">

? ? ? ? <PatternLayout pattern="${PATTERN_LAYOUT}"/>

? ? ? ? <Policies>

? ? ? ? ? ? <TimeBasedTriggeringPolicy interval="1"/>

? ? ? ? </Policies>

? ? ? </RollingRandomAccessFile>

? ? ? <!—filePattern與TimeBasedTriggerPolicy共同決定了日志的滾動級別,filePattern格式?jīng)Q定滾動的時間沾凄、TimeBasedTriggerPolicy決定滾動間隔梗醇,比如當(dāng)前這個配置表示滾動時間為天級別、間隔為1天-->

? ? ? <RollingRandomAccessFile

? ? ? ? ? ? name="apiBizAppender"

? ? ? ? ? ? fileName="${LOG_HOME}/apibiz.log"

? ? ? ? ? filePattern="${LOG_HOME}/apibiz_%d{yyyyMMdd}.log”>

? ? ? ? <Filters>

? ? ? ? ? ? <!—表示不匹配warn級別及以上的撒蟀,warn級別以下由下一個? ? ? ? ? ? ? ? ? filter處理-->

? ? ? ? ? ? <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL”/>

? ? ? ? ? ? <!—表示匹配info級別及以上的叙谨,info級別以下不匹配-->

? ? ? ? ? ? <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>

? ? ? ? </Filters>

? ? ? ? <PatternLayout pattern="${PATTERN_LAYOUT}"/>

? ? ? ? <Policies>

? ? ? ? ? ? <TimeBasedTriggeringPolicy interval="1"/>

? ? ? ? </Policies>

? ? ? </RollingRandomAccessFile>

? ? ? <RollingRandomAccessFile

? ? ? ? ? ? name="apiSysAppender"

? ? ? ? ? ? fileName="${LOG_HOME}/apisys.log"

? ? ? ? ? ? filePattern="${LOG_HOME}/apisys_%d{yyyyMMdd}.log">

? ? ? ? <Filters>

? ? ? ? ? ? <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>

? ? ? ? ? ? <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>

? ? ? ? </Filters>

? ? ? ? <PatternLayout pattern="${PATTERN_LAYOUT}"/>

? ? ? ? <Policies>

? ? ? ? ? ? <TimeBasedTriggeringPolicy interval="1"/>

? ? ? ? </Policies>

? ? ? </RollingRandomAccessFile>

? ? ? <RollingRandomAccessFile

? ? ? ? ? ? name="apiErrAppender"

? ? ? ? ? ? fileName="${LOG_HOME}/syserror.log"

? ? ? ? ? ? filePattern="${LOG_HOME}/syserror_%d{yyyyMMdd}.log">

? ? ? ? <Filters>

? ? ? ? ? ? <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>

? ? ? ? </Filters>

? ? ? ? <PatternLayout pattern="${PATTERN_LAYOUT}"/>

? ? ? ? <Policies>

? ? ? ? ? ? <TimeBasedTriggeringPolicy interval="1"/>

? ? ? ? </Policies>

? ? ? </RollingRandomAccessFile>

? ? ? <RollingRandomAccessFile

? ? ? ? ? ? name="apiQueryAppender"

? ? ? ? ? ? fileName="${LOG_HOME}/query.log"

? ? ? ? ? ? filePattern="${LOG_HOME}/query_%d{yyyyMMdd}.log">

? ? ? ? <Filters>

? ? ? ? ? ? <ThresholdFilter level="warn" onMatch=“DENY" onMismatch="NEUTRAL"/>

? ? ? ? ? ? <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>

? ? ? ? </Filters>

? ? ? ? <PatternLayout pattern="${PATTERN_LAYOUT}"/>

? ? ? ? <Policies>

? ? ? ? ? ? <TimeBasedTriggeringPolicy interval="1"/>

? ? ? ? </Policies>

? ? ? </RollingRandomAccessFile>

? ? ? <RollingRandomAccessFile

? ? ? ? ? ? name="serviceQueryAppender"

? ? ? ? ? ? fileName="${LOG_HOME}/servicelogs/query.log"

? ? ? ? ? ? filePattern="${LOG_HOME}/servicelogs/query.log_%d{yyyyMMdd}.log”>

? ? ? ? <!—表示僅匹配info級別-->

? ? ? ? <Filters>

? ? ? ? ? ? <ThresholdFilter level="warn" onMatch=“DENY" onMismatch="NEUTRAL"/>

? ? ? ? ? ? <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>

? ? ? ? </Filters>

? ? ? ? <PatternLayout pattern="${PATTERN_LAYOUT}"/>

? ? ? ? <Policies>

? ? ? ? ? ? <TimeBasedTriggeringPolicy interval="1"/>

? ? ? ? </Policies>

? ? ? </RollingRandomAccessFile>

? ? ? <RollingRandomAccessFile

? ? ? ? ? ? name="serviceErrorAppender"

? ? ? ? ? ? fileName="${LOG_HOME}/servicelogs/error.log"

? ? ? ? ? ? filePattern="${LOG_HOME}/servicelogs/error.log_%d{yyyyMMdd}.log">

? ? ? ? <Filters>

? ? ? ? ? ? <ThresholdFilter level=“warn" onMatch="ACCEPT" onMismatch="DENY"/>

? ? ? ? </Filters>

? ? ? ? <PatternLayout pattern="${PATTERN_LAYOUT}"/>

? ? ? ? <Policies>

? ? ? ? ? ? <TimeBasedTriggeringPolicy interval="1"/>

? ? ? ? </Policies>

? ? ? </RollingRandomAccessFile>

? </appenders>

? <loggers>

? ? ? <AsyncLogger name="query-monitor" additivity="false" level="info">

? ? ? ? <appender-ref ref="serviceQueryAppender"/>

? ? ? </AsyncLogger>

? ? ? <AsyncLogger name="service-error-monitor" additivity="false" level="error">

? ? ? ? <appender-ref ref="serviceErrorAppender"/>

? ? ? </AsyncLogger>

? ? ? <AsyncLogger name="api-biz-monitor" additivity="false" level="warn">

? ? ? ? <appender-ref ref="apiBizAppender"/>

? ? ? </AsyncLogger>

? ? ? <AsyncLogger name="api-sys-monitor" additivity="false" level="warn">

? ? ? ? <appender-ref ref="apiSysAppender"/>

? ? ? </AsyncLogger>

? ? ? <AsyncLogger name="sys-error-monitor" additivity="false" level="error">

? ? ? ? <appender-ref ref="apiErrAppender"/>

? ? ? </AsyncLogger>

? ? ? <AsyncLogger name="query-monitor" additivity="false" level="info">

? ? ? ? <appender-ref ref="apiQueryAppender"/>

? ? ? </AsyncLogger>

? ? ? <asyncRoot level="info">

? ? ? ? <appender-ref ref="rootAppender"/>

? ? ? </asyncRoot>

? </loggers>

</configuration>

//按如上配置生產(chǎn)的日志格式樣例

相關(guān)jar包配置樣例

<!--log4j2依賴-start-->

<dependency>

? ? <groupId>org.apache.logging.log4j</groupId>

? ? <artifactId>log4j-api</artifactId>

? ? <version>${log4j2.version}</version>

</dependency>

<dependency>

? ? <groupId>org.apache.logging.log4j</groupId>

? ? <artifactId>log4j-core</artifactId>

? ? <version>${log4j2.version}</version>

</dependency>

<dependency>

? ? <groupId>org.apache.logging.log4j</groupId>

? ? <artifactId>log4j-slf4j-impl</artifactId>

? ? <version>${log4j2.version}</version>

</dependency>

<dependency>

? ? <groupId>org.apache.logging.log4j</groupId>

? ? <artifactId>log4j-web</artifactId>

? ? <version>${log4j2.version}</version>

</dependency>

<dependency>

? ? <groupId>org.slf4j</groupId>

? ? <artifactId>slf4j-api</artifactId>

? ? <version>${slf4j-api.version}</version>

</dependency>

<dependency>

? ? <groupId>com.lmax</groupId>

? ? <artifactId>disruptor</artifactId>

? ? <version>3.4.1</version>

</dependency>

<!--log4j2依賴-end-->

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市保屯,隨后出現(xiàn)的幾起案子手负,更是在濱河造成了極大的恐慌,老刑警劉巖姑尺,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件竟终,死亡現(xiàn)場離奇詭異,居然都是意外死亡切蟋,警方通過查閱死者的電腦和手機(jī)统捶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來柄粹,“玉大人喘鸟,你說我怎么就攤上這事×耄” “怎么了迷守?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長旺入。 經(jīng)常有香客問我兑凿,道長,這世上最難降的妖魔是什么茵瘾? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任礼华,我火速辦了婚禮,結(jié)果婚禮上拗秘,老公的妹妹穿的比我還像新娘圣絮。我一直安慰自己,他們只是感情好雕旨,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布扮匠。 她就那樣靜靜地躺著捧请,像睡著了一般。 火紅的嫁衣襯著肌膚如雪棒搜。 梳的紋絲不亂的頭發(fā)上疹蛉,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機(jī)與錄音力麸,去河邊找鬼可款。 笑死,一個胖子當(dāng)著我的面吹牛克蚂,可吹牛的內(nèi)容都是我干的闺鲸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼埃叭,長吁一口氣:“原來是場噩夢啊……” “哼摸恍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起游盲,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤误墓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后益缎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谜慌,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡莺奔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了令哟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡屏富,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出狠半,到底是詐尸還是另有隱情,我是刑警寧澤神年,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站已日,受9級特大地震影響垛耳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一堂鲜、第九天 我趴在偏房一處隱蔽的房頂上張望栈雳。 院中可真熱鬧,春花似錦泡嘴、人聲如沸甫恩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至奖慌,卻和暖如春抛虫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背简僧。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工建椰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人岛马。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓棉姐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親啦逆。 傳聞我的和親對象是個殘疾皇子伞矩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容