日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java中使用log4j记录日志

發(fā)布時間:2023/12/2 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中使用log4j记录日志 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在項(xiàng)目開發(fā)中,記錄錯誤日志是一個很有必要功能。一是方便調(diào)試;二是便于發(fā)現(xiàn)系統(tǒng)運(yùn)行過程中的錯誤;三是存儲業(yè)務(wù)數(shù)據(jù),便于后期分析;

在java中,記錄日志,有很多種方式。

比如,自己實(shí)現(xiàn)。

自己寫類,將日志數(shù)據(jù),以io操作方式,寫數(shù)據(jù)到文本文件。或者是寫到數(shù)據(jù)庫中。

比如,使用log4j。

log4j,這也是此文要記錄的。log4j,以前在用.Net做web form時,用log4net。平臺通吃。而且,log4j可以將日志,輸出到console窗口,輸出到文本文件,輸出到數(shù)據(jù)庫等,功能還是很強(qiáng)大的!

比如,使用jdk自帶的logging.jar中的方法。

比如,使用slfj。

slfj,是也是一個很強(qiáng)大的功能。slfj旨在一統(tǒng)天下,也就是slfj提供了logging.jar 和 log4j的接口,可以通過slfj來調(diào)用log4j,也可以調(diào)用jdk的logging。

?

從需求出發(fā),記錄log4j

1、log4j引入哪些包?

去官網(wǎng)看看吧

2、添加配置文件

在src下,也就是class下,把log4j的配置文件添加進(jìn)去log4j.properties,標(biāo)準(zhǔn)的properties文件(Properties文件的操作,參考此文)

3、建一個類文件,建主函數(shù),下圖為結(jié)構(gòu)

4、修改配置文件,使用log4j將日志輸出到console窗口

我們經(jīng)常使用System.out.println(“日志內(nèi)容”),來將內(nèi)容輸出。今天不用這個了。用log4j的。

log4J配置文件為:

1 2 3 4 5 6 7 8 9 ### 設(shè)置級別和目的地(這里多個目的地) ### log4j.rootLogger = DEBUG,CONSOLE ### 這里的me是包,也就是在這個包記錄日志時,是只記錄debug及以上級別的日志 log4j.logger.me=DEBUG ### 輸出到控制臺 ### log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Target = System.out log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern =? %d{ABSOLUTE} %5p %c{1}:%L - %m%n

main主函數(shù)調(diào)用:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 import org.apache.log4j.Logger; public class Log4jTest { ????public static Logger logger1 = Logger.getLogger(Log4jTest.class); ????public static void main(String[] args) { ????????//logger1 ????????logger1.trace("我是logger1,trace"); ????????logger1.debug("我是logger1,debug"); ????????logger1.info("我是logger1,info"); ????????logger1.warn("我是logger1,warn"); ????????logger1.error("我是logger1,error"); ????????logger1.fatal("我是logger1,fatal"); ????} }

可以看到console中輸出內(nèi)容:

1 2 3 4 5 16:51:16,575 DEBUG Log4jTest:15 [main:0]- 我是logger1,debug 16:51:16,578? INFO Log4jTest:16 [main:3]- 我是logger1,info 16:51:16,578? WARN Log4jTest:17 [main:3]- 我是logger1,warn 16:51:16,578 ERROR Log4jTest:18 [main:3]- 我是logger1,error 16:51:16,578 FATAL Log4jTest:19 [main:3]- 我是logger1,fatal

5、log4j將日志輸出到console窗口,說說輸出的格式

在標(biāo)題4中,看到console的輸出內(nèi)容,是按一定格式輸出。格式的配置還是來自于配置文件log4j.properties

log4j.appender.CONSOLE.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{1}:%L - %m%n

日志輸出格式,所用到的參數(shù)如下,按需添加:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 %p: 輸出日志信息優(yōu)先級,即DEBUG,INFO,WARN,ERROR,FATAL, %d: 輸出日志時間點(diǎn)的日期或時間,默認(rèn)格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921 %r: 輸出自應(yīng)用啟動到輸出該log信息耗費(fèi)的毫秒數(shù) %c: 輸出日志信息所屬的類目,通常就是所在類的全名 %t: 輸出產(chǎn)生該日志事件的線程名 %l: 輸出日志事件的發(fā)生位置,相當(dāng)于%C.%M(%F:%L)的組合,包括類目名、發(fā)生的線程,以及在代碼中的行數(shù)。舉例:Testlog4.main(TestLog4.java:10) %x: 輸出和當(dāng)前線程相關(guān)聯(lián)的NDC(嵌套診斷環(huán)境),尤其用到像java servlets這樣的多客戶多線程的應(yīng)用中。 %%: 輸出一個”%”字符 %F: 輸出日志消息產(chǎn)生時所在的文件名稱 %L: 輸出代碼中的行號 %m: 輸出代碼中指定的消息,產(chǎn)生的日志具體信息 %n: 輸出一個回車換行符,Windows平臺為”\r\n”,Unix平臺為”\n”輸出日志信息換行 可以在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。如: 1)%20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小于20的話,默認(rèn)的情況下右對齊。 2)%-20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小于20的話,”-”號指定左對齊。 3)%.30c:指定輸出category的名稱,最大的寬度是30,如果category的名稱大于30的話,就會將左邊多出的字符截掉,但小于30的話也不會有空格。 4)%20.30c:如果category的名稱小于20就補(bǔ)空格,并且右對齊,如果其名稱長于30字符,就從左邊交遠(yuǎn)銷出的字符截掉。

6、log4j將日志輸出到文本文件

log4j配置文件:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ### 設(shè)置級別和目的地(這里多個目的地) ### log4j.rootLogger = trace,CONSOLE,zhangsanLog log4j.logger.me=DEBUG ### 輸出到控制臺 ### log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Target = System.out log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern =? %d{ABSOLUTE} %5p %c{1}:%L [%t:%r]- %m%n ### 輸出到日志文件 ### log4j.appender.zhangsanLog = org.apache.log4j.DailyRollingFileAppender log4j.appender.zhangsanLog.File =G\:\\var\\alldata\\zhenduan\\debug.log #log4j.appender.zhangsanLog.File =/var/alldata/zhenduan/debug.log log4j.appender.zhangsanLog.Append = true ## 只輸出DEBUG級別以上的日志 log4j.appender.zhangsanLog.Threshold = DEBUG #'.'yyyy-MM-dd: 每天產(chǎn)生一個新的文件 log4j.appender.zhangsanLog.DatePattern = '.'yyyy-MM-dd log4j.appender.zhangsanLog.layout = org.apache.log4j.PatternLayout log4j.appender.zhangsanLog.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] [%c{1}:%L] [%M] %m%n log4j.additivity.zhangsanLog = false

main函數(shù)調(diào)用:

1 2 3 4 5 6 7 8 9 10 public static Logger logger1 = Logger.getLogger(Log4jTest.class); public static void main(String[] args) { ????//logger1 ????logger1.trace("我是logger1,trace"); ????logger1.debug("我是logger1,debug"); ????logger1.info("我是logger1,info"); ????logger1.warn("我是logger1,warn"); ????logger1.error("我是logger1,error"); ????logger1.fatal("我是logger1,fatal"); }

暫時不做說明,具體配置說明,見后續(xù)文章

7、log4j將日志輸出到文本文件,并且,每一小時生成一個文件,每天一個文件,每半天一個文件

繼續(xù)使用標(biāo)題6的配置,但是需要修改幾個地方。

在6中,有這句話

log4j.appender.zhangsanLog = org.apache.log4j.DailyRollingFileAppender

這句話的意思是,寫到文件中,并且追加,那么多久生成一個文件呢?

需要修改

log4j.appender.zhangsanLog.DatePattern = '.'yyyy-MM-dd

DatePattern=’.’yyyy-ww:每周滾動一次文件,即每周產(chǎn)生一個新的文件。當(dāng)然也可以指定按月、周、天、時和分。即對應(yīng)的格式如下:
1)’.’yyyy-MM: 每月
2)’.’yyyy-ww: 每周
3)’.’yyyy-MM-dd: 每天
4)’.’yyyy-MM-dd-a: 每天兩次
5)’.’yyyy-MM-dd-HH: 每小時
6)’.’yyyy-MM-dd-HH-mm: 每分鐘

8、log4j將日志輸出到文本文件,并且,每當(dāng)文本文件為3KB大時,新建一個文件。

同樣使用6的代碼:

1 2 3 4 5 6 7 8 9 10 11 12 log4j.appender.zhangsanLog = org.apache.log4j.RollingFileAppender log4j.appender.zhangsanLog.File =G\:\\var\\alldata\\zhenduan\\debug.log #log4j.appender.zhangsanLog.File =/var/alldata/zhenduan/debug.log log4j.appender.zhangsanLog.Append = true ## 輸出DEBUG級別以上的日志 log4j.appender.zhangsanLog.Threshold = DEBUG #'.'yyyy-MM-dd: 每天產(chǎn)生一個新的文件 log4j.appender.zhangsanLog.MaxFileSize = 2KB log4j.appender.zhangsanLog.MaxBackupIndex = 5 log4j.appender.zhangsanLog.layout = org.apache.log4j.PatternLayout log4j.appender.zhangsanLog.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] [%c{1}:%L] [%M] %m%n log4j.additivity.zhangsanLog = false

這里修改的是

log4j.appender.zhangsanLog = org.apache.log4j.RollingFileAppender

MaxFileSize,當(dāng)文件達(dá)到多大存儲空間時,就新建一個文件

MaxBackupIndex,最多會新建幾個文件(如果設(shè)置的小了,當(dāng)文件個數(shù)較多時,后續(xù)就不再新建文件了)

9、log4j將日志輸出到數(shù)據(jù)庫

暫無

10、log4j將日志輸出到hadoop框架中的hbase上

暫無

?

Log4j的日志級別

(由低到高。可以聯(lián)想到windows或unix的錯誤級別,都是類似的):

trace: 是追蹤,就是程序推進(jìn)以下,你就可以寫個trace輸出,所以trace應(yīng)該會特別多,不過沒關(guān)系,我們可以設(shè)置最低日志級別不讓他輸出。

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

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

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

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

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

?

log4j的配置,說明:

Log4j支持兩種配置文件格式,一種是XML格式的文件,一種是properties格式的文件。一般我常用的是properties文件

1、log4j.rootLogger = [ level ] , appenderName, appenderName, …

level:是log4j的日志級別,優(yōu)先級從高到低分別是ERROR、WARN、INFO、DEBUG。

appenderName:就是指定日志信息輸出到哪個地方??赏瑫r指定多個輸出目的地。

?

2、?配置日志信息輸出目的地Appender,其語法為:

log4j.appender.appenderName = fully.qualified.name.of.appender.class

log4j.appender.appenderName.option1 = value1

log4j.appender.appenderName.option = valueN
其中,Log4j提供的appender有以下幾種:
org.apache.log4j.ConsoleAppender(控制臺),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天產(chǎn)生一個日志文件),
org.apache.log4j.RollingFileAppender(文件大小到達(dá)指定尺寸的時候產(chǎn)生一個新的文件),
org.apache.log4j.WriterAppender(將日志信息以流格式發(fā)送到任意指定的地方)

?

3、設(shè)置好appender后,針對appender的配置

也就是設(shè)置好要輸出到什么地方后,其它配置選項(xiàng)

(1).ConsoleAppender選項(xiàng)
Threshold=WARN:指定日志消息的輸出最低層次。
ImmediateFlush=true:默認(rèn)值是true,意謂著所有的消息都會被立即輸出。
Target=System.err:默認(rèn)情況下是:System.out,指定輸出控制臺

(2).FileAppender 選項(xiàng)
Threshold=WARN:指定日志消息的輸出最低層次。
ImmediateFlush=true:默認(rèn)值是true,意謂著所有的消息都會被立即輸出。
File=mylog.txt:指定消息輸出到mylog.txt文件。
Append=false:默認(rèn)值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內(nèi)容。

(3).DailyRollingFileAppender 選項(xiàng)
Threshold=WARN:指定日志消息的輸出最低層次。
ImmediateFlush=true:默認(rèn)值是true,意謂著所有的消息都會被立即輸出。
File=mylog.txt:指定消息輸出到mylog.txt文件。
Append=false:默認(rèn)值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內(nèi)容。
DatePattern=’.’yyyy-ww:每周滾動一次文件,即每周產(chǎn)生一個新的文件。當(dāng)然也可以指定按月、周、天、時和分。即對應(yīng)的格式如下:
1)’.’yyyy-MM: 每月
2)’.’yyyy-ww: 每周
3)’.’yyyy-MM-dd: 每天
4)’.’yyyy-MM-dd-a: 每天兩次
5)’.’yyyy-MM-dd-HH: 每小時
6)’.’yyyy-MM-dd-HH-mm: 每分鐘

(4).RollingFileAppender 選項(xiàng)
Threshold=WARN:指定日志消息的輸出最低層次。
ImmediateFlush=true:默認(rèn)值是true,意謂著所有的消息都會被立即輸出。
File=mylog.txt:指定消息輸出到mylog.txt文件。
Append=false:默認(rèn)值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內(nèi)容。
MaxFileSize=100KB: 后綴可以是KB, MB 或者是 GB. 在日志文件到達(dá)該大小時,將會自動滾動,即將原來的內(nèi)容移到mylog.log.1文件。
MaxBackupIndex=2:指定可以產(chǎn)生的滾動文件的最大數(shù)。

?

4. 配置日志信息的布局,其語法為:

log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1

log4j.appender.appenderName.layout.option = valueN
其中,Log4j提供的layout有以下幾種:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以靈活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串),
org.apache.log4j.TTCCLayout(包含日志產(chǎn)生的時間、線程、類別等等信息)

?

關(guān)于additivity

log4j.additivity.zhangsanLog = false

這個additivity也是很有意思的選項(xiàng)。

它是 子Logger 是否繼承 父Logger 的 輸出源(appender) 的標(biāo)志位。具體說,默認(rèn)情況下子Logger會繼承父Logger的appender,也就是說子Logger會在父Logger的appender里輸出。若是additivity設(shè)為false,則子Logger只會在自己的appender里輸出,而不會在父Logger的appender里輸出。
效果如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 log4j.rootLogger=WARN,A2,A3 log4j.logger.test=DEBUG log4j.appender.A2=org.apache.log4j.RollingFileAppender log4j.appender.A2.File=../logs/test.log log4j.appender.A2.Encoding=UTF-8 log4j.appender.A2.Append=true log4j.appender.A2.MaxFileSize=2MB log4j.appender.A2.MaxBackupIndex=5 log4j.appender.A2.layout=org.apache.log4j.PatternLayout log4j.appender.A2.layout.ConversionPattern=%-5p %d [%t] %c{3}.%M - %m%n log4j.additivity.test.xml=false log4j.logger.test.xml=DEBUG,A3 log4j.appender.A3=org.apache.log4j.RollingFileAppender log4j.appender.A3.File=../logs/test-xml.log log4j.appender.A3.Encoding=UTF-8 log4j.appender.A3.Append=true log4j.appender.A3.MaxFileSize=2MB log4j.appender.A3.MaxBackupIndex=5 log4j.appender.A3.layout=org.apache.log4j.PatternLayout log4j.appender.A3.layout.ConversionPattern=%-5p %d [%t] %c{3}.%M - %m%n

配置文件中有

log4j.logger.test=DEBUG

log4j.additivity.test.xml=false

log4j.logger.test.xml=DEBUG,A3

這個實(shí)例中,通過log4j.additivity.test.xml=false這一句取消了繼承關(guān)系,這樣XML的log就只會在A3中輸出;而不會在再

?

還有一個需求,

不考慮日志級別,a.java, b.java, c.java 分別調(diào)用自己的logger,將日志分別寫入到不同的文件中。

這個需求主要是在配置文件中,給appender取個名字

然后在調(diào)用時,使用名稱的方式調(diào)用,就可以了。

public static Logger loggerA = Logger.getLogger(“Alog”);

public static Logger loggerB = Logger.getLogger(“Blog”);

public static Logger loggerC = Logger.getLogger(“Clog”);

總結(jié)

以上是生活随笔為你收集整理的Java中使用log4j记录日志的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。