log4j

一.log4j簡介:

log4j官方下載地址:jakarta.apache.org/log4j?

log4j是Apache的一個開源日志組件,可以為我們提供非常強大又便捷的日志記錄扳剿。

log4j日志有七個等級:all<debug<info<warn<error<fatal<off

二.log4j配置:

不同類型的項目引入log4j的方式是不同的夯尽。

但是需要配置的內(nèi)容是大致一樣的(日志級別琅束、日志格式和記錄顯示/保存位置等)歼捏。

1.在Maven項目中

1.1.在maven中引入log4j的依賴

1.2.在src/main/java中創(chuàng)建log4j.properties配置文件

1.3.在java文件中使用log4j進行日志記錄

//在Maven項目中的依賴

<dependency>

? ? ? ? <groupId>log4j</groupId>

? ? ? ? <artifactId>log4j</artifactId>

? ? ? ? <version>1.2.17</version>

</dependency>


//log4j.properties配置文件

log4j.rootLogger = INFO,console? ? //定義輸出器等級和名字

log4j.additivity.org.apache = true? ? //表示不會在父logger中的appender輸出,默認true

#console

log4j.appender.console = org.apache.log4j.ConsoleAppender //指定logger的輸出位置

log4j.appender.console.Threshold = INFO? ? //指定日志的最低級別雌续,默認DEBUG

log4j.appender.console.ImmediateFlush = true? ? //表示所有信息都會被立即輸出

log4j.appender.console.Target=System.out? ? ?//默認值為System.out

log4j.appender.console.layout=org.apache.log4j.PatternLayout? ? ?//指定輸出內(nèi)容及格式?

//輸出日志時間點的時間或日期吨掌,默認格式為ISO8601

log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p]?%m%n


#在JAVA文件中使用log4j記錄日志

public class MainTest(){

? ? public static void main(String[] args){

? ? ? ? new Test.test();

? ? }

}

public class Test(){

? ? final Logger logger = Logger.getLogger(MainTest.class);

? ? public void test(){

? ??????logger.info("hello world");? ?

? ? }

}

2.在普通java/spring項目中

2.1.將log4j的jar包通過build path引入項目

2.2.在src/main/java下創(chuàng)建log4j.properties配置文件

2.3.在JAVA文件中使用log4j進行日志記錄

3.在SpringMVC項目中

3.1.在src/main/resources的conf目錄下創(chuàng)建log4j.properties文件

3.2.編輯項目的web.xml文件

//編輯項目的web.xml文件 添加以下內(nèi)容

<context-parm>

? ? ? ? <parm-name>log4jConfigLocation</parm-name>

? ? ? ? <parm-value>classpath:/conf/log4j.properties</parm-value>

</context-parm>

<listener>

? ? ? ? <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>

</listener>

4.在普通的Web項目中

因為普通的項目中沒有了Spring提供的listener來加載log4j了半抱,所以需要使用servlet來加載

4.1.在src/main/resources/conf下創(chuàng)建log4j.properties文件

4.2.編輯項目的web.xml文件

//使用servlet來加載log4j

public?class?Log4jServlet?extends?HttpServlet {

? ??????private?static?final?long?serialVersionUID = 1L;

? ? ? ? public void init(ServletConfig config) throws ServletException{?

? ? ? ? ? ? ? ? String perfix = this.getClass().getClassLoader().getResources("/").getPath();

? ? ? ? ? ? ? ? String path = config.getInitParameter("log4j-path");

? ? ? ? ? ? ? ? PopertyConfigurator.configure(prefix+path);

? ? ? ? }

? ??????public?void?doGet(HttpServletRequest req, HttpServletResponse res)?throws?IOException, ServletException {}

? ??????public?void?doPost(HttpServletRequest req, HttpServletResponse res)?throws?IOException, ServletException {}

? ??????public?void?destroy() {}

}


//編輯web.xml文件 添加如下內(nèi)容

<servlet>

? ? ? ? <servlet-name>log4j</servlet-name>

? ? ? ? <servlet-class>com.xmyself.log4j.Log4jServlet</servlet-class>

? ? ? ? <init-param>

? ? ? ? ? ? ? ? <param-name>log4j-path</param-name>

? ? ? ? ? ? ? ? <param-value>conf/log4j.properties</param-value>

? ? ? ? </init-param>

? ? ? ? <load-on-startup>1</load-on-startup>

</servlet>

三.log4j的配置說明

1.logger:日志實例,指的是代碼里實例化的log4j(Logger)對象??

log4j.rootLogger = LEVEL,appenderName1,appenderName2...? ? //定義Logger實例化對象

log4j.additivity.org.apache = false;? ? //表示不會在父logger的appender里輸出膜宋,默認true


例:? log4j.logger.com.demo.test = BEBUG,test

? ??????log4j.additivity.com.demo.test =?false

2.appender:日志輸出器窿侈,指定logger的輸出位置

log4j.appender.appenderName = className


//className有五種值可以選擇,每個都有不同的配置

1.org.apache.log4j.ConsoleAppender? ? //控制臺?

? ??????Threshold=WARN:指定日志信息的最低輸出級別秋茫,默認DEBUG?

? ??????ImmediateFlush=true:所有消息都會被立即輸出史简,false則不輸出,默認值是true

? ??????Target=System.err:默認值是System.out

2.org.apache.log4j.FileAppender? ?//文件

? ??????Threshold=WARN:指定日志信息的最低輸出級別肛著,默認DEBUG

? ??????ImmediateFlush=true:所有消息都會被立即輸出圆兵,false則不輸出,默認true

? ??????Append=false:true消息增加到指定文件中策泣,false將消息覆蓋指定文件衙傀,默認true

? ??????File=D:/logs/logging.log4j:指定消息輸出到logging.log4j文件

3.org.apache.log4j.DailyRollingFileAppender //每天產(chǎn)生一個日志文件????

? ??????Threshold=WARN:指定日志信息的最低輸出級別抬吟,默認DEBUG

? ??????ImmediateFlush=true:所有消息都會被立即輸出萨咕,false則不輸出,默認true

? ??????? Append=false:true消息增加到指定文件中火本,false將消息覆蓋指定文件危队,默認true

? ???????File=D:/logs/logging.log4j:指定消息輸出到logging.log4j文件?

? ??????? DatePattern='.'yyyy-MM:每月滾動一次日志文件聪建,即每月產(chǎn)生一個新的日志文件。當(dāng)前月的日志文件名為logging.log4j茫陆,前一個月的日志文件名 ('.'yyyy-MM:每月 /?'.'yyyy-ww:每周? /??'.'yyyy-MM-dd:每天? /? '.'yyyy-MM-dd-a:每天兩次? /?'.'yyyy-MM-dd-HH:每小時 /?'.'yyyy-MM-dd-HH-mm:每分鐘????)

4.org.apache.log4j.RollingFileAppender? ? //文件大小到達指定尺寸的時候產(chǎn)生一個新的文件

? ??????? ?Threshold=WARN:指定日志信息的最低輸出級別金麸,默認DEBUG? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????????????ImmediateFlush=true:所有消息都會被立即輸出,false則不輸出簿盅,默認true? ? ? ? ? ? ? ? ? ? ? ? ? ? Append=false:true消息增加到指定文件中挥下,false將消息覆蓋指定文件,默認true? ? ? ? ? ? ? ? ? File=D:/logs/logging.log4j:指定消息輸出到logging.log4j文件?

????????????MaxFileSize=100KB:后綴可以是KB,MB或者GB桨醋。在日志文件到達該大小時棚瘟,將會自動滾動,即將原來的內(nèi)容移到logging.log4j.1文件

? ??????????MaxBackupIndex=2:指定可以產(chǎn)生的滾動文件的最大數(shù)喜最,例如偎蘸,設(shè)為2則可以產(chǎn)生logging.log4j.1,logging.log4j.2兩個滾動文件和一個logging.log4j文件

5.org.apache.log4j.WriterAppender? ? //將日志信息以流格式發(fā)送到任意指定的地方

3.layout:指定logger輸出內(nèi)容及格式

log4j.appender.appenderName.layout = calssName? ? ?


//layout的className有四種選擇

1.org.apache.log4j.HTMLLayout? ? ?//以HTML表格形式布局?

? ??????LocationInfo=true:輸出java文件名稱和行號瞬内,默認false

? ? ? ? ?Title=My Logging: 默認值是Log4J Log Messages

2.org.apache.log4j.PatternLayout? ? ?//可以靈活地指定布局模式?

? ??????ConversionPattern=%m%n:設(shè)定以怎樣的格式顯示消息

3.org.apache.log4j.SimpleLayout? ? ?//包含日志信息的級別和信息字符串?

4.org.apache.log4j.TTCCLayout? ? ?//包含日志產(chǎn)生的時間迷雪、線程、類別等信息?

PatternLayout的值

四.log4j全局配置

在配置了全局的log4j之后虫蝶,整個項目都使用了同一套配置章咧,也就是說所有的日志都在同一個地方,所有的信息都混在一起能真。

log4j.rootLogger=DEBUG,console,dailyFile,rollingFile,logFile

log4j.additivity.org.apache=true??

#控制臺日志輸出器

log4j.appender.console=org.apache.log4j.ConsoleAppender

log4j.appender.console.Threshold=DEBUG

log4j.appender.console.ImmediateFlush=true? ?

log4j.appender.console.Target=System.err

log4j.appender.console.layout=org.apache.log4j.PatternLayout?

log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p]?%m%n?

#文件日志輸出器

log4j.appender.logFile=org.apache.log4j.FileAppender

log4j.appender.logFile.Threshold=DEBUG

log4j.appender.logFile.ImmediateFlush=true

log4j.appender.logFile.Append=true

log4j.appender.logFile.File=D:/logs/log.log4j

log4j.appender.logFile.layout=org.apache.log4j.PatternLayout? ?

log4j.appender.logFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p]?%m%n???

#滾動文件日志輸出器

log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender

log4j.appender.rollingFile.Threshold=DEBUG

log4j.appender.rollingFile.ImmediateFlush=true

log4j.appender.rollingFile.Append=true

log4j.appender.rollingFile.File=D:/logs/log.log4j????

log4j.appender.rollingFile.MaxFileSize=200KB? ? ?

log4j.appender.rollingFile.MaxBackupIndex=50

log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout

log4j.appender.rollingFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p]?%m%n??

#定期滾動文件日志輸出器

log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender

log4j.appender.rollingFile.Threshold=DEBUG? ?

log4j.appender.rollingFile.ImmediateFlush=true

log4j.appender.rollingFile.Append=true? ?

log4j.appender.rollingFile.File=D:/logs/log.log4j

log4j.appender.rollingFile.MaxFileSize=200KB

log4j.appender.rollingFile.MaxBackupIndex=50

log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout? ?

log4j.appender.rollingFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p]?%m%n??

五.log4j局部配置

如果想要為不同的包或者類單獨的輸出日志慧邮,那么就需要定義多個局部配置

#定義局部的log4j文件輸出器

log4j.logger.com.demo.test=DEBUG,test

log4j.appender.test=org.apache.log4j.FileAppender

log4j.appender.test.File=/log/test.log

log4j.appender.test.layout=org.apache.log4j.PatternLayout

log4j.appender.test.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p]?%m%n???

//可以讓同一個類輸出不同類型的日志文件

//可以初始化兩個日志對象

private?static?Log logger1 = LogFactory.getLog("myTest1");

private?static?Log logger2 = LogFactory.getLog("myTest2");?


#分別配置量兩個log4j實例

log4j.logger.myTest1=?DEBUG,test1

log4j.additivity.myTest1=false

log4j.appender.test1=org.apache.log4j.FileAppender? ??

log4j.appender.test1.File=/log/test1.log

log4j.appender.test1.layout=org.apache.log4j.PatternLayout

log4j.appender.test1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p]?%m%n??

.

log4j.logger.myTest2=DEBUG,test2

log4j.appender.test2=org.apache.log4j.FileAppender

log4j.appender.test2.File=/log/test2.log

log4j.appender.test2.layout=org.apache.log4j.PatternLayout

log4j.appender.test2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p]?%m%n????

六.slf4j搭配log4j

1.slf4j簡介:

slf4j運用了典型的門面模式思想,和JVM的思想是一樣的舟陆,即當(dāng)一個項目中依賴了多個日志框架的時候误澳,slf4j就負責(zé)幫我們處理這些日志實現(xiàn)框架的差異。

2.slf4j使用:

2.1.在項目中添加slf4j的依賴

2.2.在項目中添加slf4j和不同日志實現(xiàn)框架的轉(zhuǎn)換(關(guān)聯(lián))依賴

//slf4j的依賴

<dependency>

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

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

? ? ? ? <version>1.7.21</version>

</dependency>


//slf4j和log4j的關(guān)聯(lián)jar包

//通過這個jar包秦躯,把對slf4j接口的調(diào)用轉(zhuǎn)為對log4j的調(diào)用

//不同的日志實現(xiàn)框架忆谓,這個轉(zhuǎn)換工具不同

//slf4j-log4j12依賴了slf4j和log4j,所以只使用這個依賴就可以滿足需求? ? ?

<dependency>

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

? ? ? ? <artifactId>slf4j-log4j12</artifactId>

? ? ? ? <version>1.7.21</version>

</dependency>

//在JAVA類中使用slf4j和log4j的方式

class Test{

? ? ? ? Logger log = LoggerFactory.getLogger(Test.calss);

? ? ? ? public void test(){

? ? ? ? ? ? ? ? log.info("hello {}",world);? ? //slf4j中可以使用占位符

? ? ? ? }

}

原文:https://blog.csdn.net/qq_42072311/article/details/80923512

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市踱承,隨后出現(xiàn)的幾起案子倡缠,更是在濱河造成了極大的恐慌,老刑警劉巖茎活,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昙沦,死亡現(xiàn)場離奇詭異,居然都是意外死亡载荔,警方通過查閱死者的電腦和手機盾饮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人丘损,你說我怎么就攤上這事普办。” “怎么了徘钥?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵衔蹲,是天一觀的道長。 經(jīng)常有香客問我呈础,道長舆驶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任而钞,我火速辦了婚禮贞远,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘笨忌。我一直安慰自己蓝仲,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布官疲。 她就那樣靜靜地躺著袱结,像睡著了一般。 火紅的嫁衣襯著肌膚如雪途凫。 梳的紋絲不亂的頭發(fā)上垢夹,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天,我揣著相機與錄音维费,去河邊找鬼果元。 笑死,一個胖子當(dāng)著我的面吹牛犀盟,可吹牛的內(nèi)容都是我干的而晒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼阅畴,長吁一口氣:“原來是場噩夢啊……” “哼倡怎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起贱枣,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤监署,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后纽哥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钠乏,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年春塌,在試婚紗的時候發(fā)現(xiàn)自己被綠了晓避。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片簇捍。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖够滑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吕世,我是刑警寧澤彰触,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站命辖,受9級特大地震影響况毅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜尔艇,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一尔许、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧终娃,春花似錦味廊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至窍荧,卻和暖如春辉巡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蕊退。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工郊楣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瓤荔。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓净蚤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親输硝。 傳聞我的和親對象是個殘疾皇子塞栅,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,562評論 2 349