国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

log4j和log4j2

2019-11-09 18:10:36
字體:
來源:轉載
供稿:網友

相信很多程序猿朋友對log4j都很熟悉,log4j可以說是陪伴了絕大多數的朋友開啟的編程。我不知道log4j之前是用什么,至少在我的生涯中,是log4j帶我開啟的日志時代。

log4j是Apache的一個開源項目,我們不去考究它的起源時間,但是據我了解,log4j 1已經不再更新了。 下面引用官網的原文:

End of Life On August 5, 2015 the Logging Services PRoject Management Committee announced that Log4j 1.x had reached end of life. For complete text of the announcement please see the Apache Blog. Users of Log4j 1 are recommended to upgrade to Apache Log4j 2. 是的,log4j停止于1.x版本,迎來了log4j 2,也就是我們今天要說的log4j 2.

回顧log4j,曾給我們留下了多少的回憶,我記得早些年,那時候mybatis還是叫ibatis的時候,我為了配置ibatis控制臺打印日志,糾結了多少個夜晚,最后配置出來時的那種喜悅感。廢話不多說,下面我就以列舉的方式來淺談log4j和log4j 2的不同之處。

1.配置文件類型 log4j是通過一個.properties的文件作為主配置文件的,而現在的log4j 2則已經棄用了這種方式,采用的是.xml,.json或者.jsn這種方式來做,可能這也是技術發展的一個必然性,畢竟properties文件的可閱讀性真的是有點差。

2.核心JAR包 log4j只需要引入一個jar包即可,

<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version></dependency>1234512345

而log4j 2則是需要2個核心

<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.5</version></dependency><dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.5</version></dependency>1234567891012345678910

大家發現沒,log4j和log4j 2的包路徑是不同的,Apache為了區分,包路徑都更新了,這樣大家甚至可以在一個項目中使用2個版本的日志輸出哦!(不過我想你們沒有那么調皮吧,嘿嘿)

3.文件渲染 log4j想要生效,我們需要在web.xml中進行配置,

<listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:config/log4j.properties</param-value> </context-param> <context-param> <param-name>log4jRefreshInterval</param-name> <param-value>60000</param-value>1234567891012345678910

這段配置目的在于告訴工程去哪加載log4j的配置文件和定義一個掃描器,這樣可以隨心所欲的放置log4j配置文件。 log4j2就比較簡單,以maven工程為例,我們只需要把log4j2.xml放到工程resource目錄下就行了。大家記住一個細節點,是log4j2.xml,而不是log4j.xml,xml名字少個2都不行!!

喜歡做學問的小伙伴,有興趣可以去研究下,照我估計應該是在log4j2的包里面配置死了,而且大家可以嘗試下怎么自定義log4j2.xml的位置。

4.Log調用 log4j和log4j2調用都是很簡單的。 log4j:

import org.apache.log4j.Logger;private final Logger LOGGER = Logger.getLogger(Test.class.getName());1212

log4j2:

import org.apache.logging.log4j.Level;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;private static Logger logger = LogManager.getLogger(Test.class.getName());12341234

5.配置文件方式 最關鍵的最大的不同,那就是配置文件的區別了,大家具體使用的時候再根據你的情況進行配置就行了。 log4j2 例子如下:

<?xml version="1.0" encoding="UTF-8"?> <configuration status="error"> <!-- 先定義所有的appender --> <appenders> <!-- 這個輸出控制臺的配置 --> <Console name="Console" target="SYSTEM_OUT"> <!-- 控制臺只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch) --> <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/> <!-- 這個都知道是輸出日志的格式 --> <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/> </Console> <!-- 文件會打印出所有信息,這個log每次運行程序會自動清空,由append屬性決定,這個也挺有用的,適合臨時測試用 --> <!-- append為TRUE表示消息增加到指定文件中,false表示消息覆蓋指定的文件內容,默認值是true --> <File name="log" fileName="log/test.log" append="false"> <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/> </File> <!-- 添加過濾器ThresholdFilter,可以有選擇的輸出某個級別以上的類別 onMatch="ACCEPT" onMismatch="DENY"意思是匹配就接受,否則直接拒絕 --> <File name="ERROR" fileName="logs/error.log"> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="%d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/> </File> <!-- 這個會打印出所有的信息,每次大小超過size,則這size大小的日志會自動存入按年份-月份建立的文件夾下面并進行壓縮,作為存檔 --> <RollingFile name="RollingFile" fileName="logs/web.log" filePattern="logs/$${date:yyyy-MM}/web-%d{MM-dd-yyyy}-%i.log.gz"> <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/> <SizeBasedTriggeringPolicy size="2MB"/> </RollingFile> </appenders> <!-- 然后定義logger,只有定義了logger并引入的appender,appender才會生效 --> <loggers> <!-- 建立一個默認的root的logger --> <root level="trace"> <appender-ref ref="RollingFile"/> <appender-ref ref="Console"/> <appender-ref ref="ERROR" /> <appender-ref ref="log"/> </root> </loggers> </configuration> 12345678910111213141516171819202122232425262728293031323334353637383940414243441234567891011121314151617181920212223242526272829303132333435363738394041424344

總結: 技術總是在不斷進步的,我們不能局限在已知的知識領域中,要不斷去創新,去嘗試!

附:

日志的級別:     我們現在要調用logger的方法,不過在這個Logger對象中,有很多方法,所以要先了解log4j的日志級別,log4j規定了默認的幾個級別:trace<debug<info<warn<error<fatal等。這里要說明一下:    

級別之間是包含的關系,意思是如果你設置日志級別是trace,則大于等于這個級別的日志都會輸出。基本上默認的級別沒多大區別,就是一個默認的設定。你可以通過它的API自己定義級別。你也可以隨意調用這些方法,不過你要在配置文件里面好好處理了,否則就起不到日志的作用了,而且也不易讀,相當于一個規范,你要完全定義一套也可以,不用沒多大必要。從我們實驗的結果可以看出,log4j默認的優先級為ERROR或者WARN(實際上是ERROR)    

這不同的級別的含義大家都很容易理解,這里就簡單介紹一下:

trace: 是追蹤,就是程序推進以下,你就可以寫個trace輸出,所以trace應該會特別多,不過沒關系,我們可以設置最低日志級別不讓他輸出。

debug: 調試么,我一般就只用這個作為最低級別,trace壓根不用。是在沒辦法就用eclipse或者idea的debug功能就好了么。

info: 輸出一下你感興趣的或者重要的信息,這個用的最多了。

warn: 有些信息不是錯誤信息,但是也要給程序員的一些提示,類似于eclipse中代碼的驗證不是有error 和warn(不算錯誤但是也請注意,比如以下depressed的方法)。

error: 錯誤信息。用的也比較多。

fatal: 級別比較高了。重大錯誤,這種級別你可以直接停止程序了,是不應該出現的錯誤么!不用那么緊張,其實就是一個程度的問題。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌兰察布市| 晋州市| 绵竹市| 嘉兴市| 太白县| 桃园县| 丰顺县| 肃宁县| 高唐县| 招远市| 溧水县| 丰都县| 昌宁县| 子洲县| 通海县| 溆浦县| 内江市| 衡山县| 清丰县| 邵东县| 准格尔旗| 随州市| 太和县| 云林县| 鄂托克前旗| 车致| 凌源市| 晋州市| 北辰区| 左权县| 安平县| 乌恰县| 若尔盖县| 阿拉善右旗| 明水县| 酉阳| 普格县| 九龙城区| 武宁县| 大埔县| 聂荣县|