log4j.properties配置
日志輸出級別
- ERROR
- WARN
- INFO
- DEBUG
輸出位置
log4j.appender.appenderName = fully.qualified.name.of.appender.class
- org.apache.log4j.ConsoleAppender(控制臺)
- org.apache.log4j.FileAppender(文件)
- org.apache.log4j.DailyRollingFileAppender(每天產生一個日志文件)
- org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)
- org.apache.log4j.WriterAppender(將日志信息以流格式發送到任意指定的地方
輸出格式
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
- org.apache.log4j.HTMLLayout(以HTML表格形式布局),
- org.apache.log4j.PatternLayout(可以靈活地指定布局模式),
- org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串),
- org.apache.log4j.TTCCLayout(包含日志產生的時間、線程、類別等等信息)
PatternLayout
- -X號: X信息輸出時左對齊;
- %p: 輸出日志信息優先級,即DEBUG,INFO,WARN,ERROR,FATAL,
- %d: 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
- %r: 輸出自應用啟動到輸出該log信息耗費的毫秒數
- %c: 輸出日志信息所屬的類目,通常就是所在類的全名
- %t: 輸出產生該日志事件的線程名
- %l: 輸出日志事件的發生位置,相當于%C.%M(%F:%L)的組合,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main (TestLog4.java:10)
- %x: 輸出和當前線程相關聯的NDC(嵌套診斷環境),尤其用到像java servlets這樣的多客戶多線程的應用中。
- %%: 輸出一個"%"字符
- %F: 輸出日志消息產生時所在的文件名稱
- %L: 輸出代碼中的行號
- %m: 輸出代碼中指定的消息,產生的日志具體信息
- %n: 輸出一個回車換行符,Windows平臺為"/r/n",Unix平臺為"/n"輸出日志信息換行
可以在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。
如:
- %20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小于20的話,默認的情況下右對齊。
- %-20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小于20的話,"-"號指定左對齊。
- %.30c:指定輸出category的名稱,最大的寬度是30,如果category的名稱大于30的話,就會將左邊多出的字符截掉,但小于30的話也不會有空格。
- %20.30c:如果category的名稱小于20就補空格,并且右對齊,如果其名稱長于30字符,就從左邊較遠輸出的字符截掉。
使用問題總結
log打印兩遍問題
子Logger會繼承父Logger的輸出源,會導致某些情況下日志輸出兩次或者多次。
log4j.rootLogger=info,Console
log4j.logger.childLogger=debug,Console
如果不想繼承輸出源,可以設置additivity,如下:
log4j.additivity.childLogger=false