log4j輸出日志到指定文件並定時備份


og4j可以通過配置文件來控制項目日志的輸出,所以web項目中經常會用到log4j。

        使用log4j時,一般是寫在log4j.xml或者log4j.properties配置文件中,在代碼里使用getLogger的時候,它會去自動尋找配置,先找log4j.xml,然后log4j.properties。當然,除了xml和properties以外還有其他的配置文件種類,但是不推薦使用。

使用log4j.jar之前,要先配置監聽器。不配置監聽器,就不能把日志輸出到文件中。這需要在項目的Web.xml中增加如下配置:

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

這次我使用的是log4j.properties。配置如下:

#########################
log4j.rootLogger = info, stdout, D

log4j.appender.stdout =org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout =org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern= [test] %d{ABSOLUTE} %5p %c{1}:%L - %m%n

log4j.appender.D =org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File =${catalina.home}/logs/test/hanyetest.log
log4j.appender.D.DatePattern='.'yy-MM-dd
log4j.appender.D.Append = true
log4j.appender.D.Threshold = INFO
log4j.appender.D.layout =org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern =[test] %-d{yyyy-MM-dd HH:mm:ss} [%t:%r] - [%p] %m%n

#########################

一開始的log4j.rootLogger=info,stout,D中,log4j.rootLogger是根,“=info”指Log日志級別為info,所有級別小於info的日志都不會輸出。日志級別排序如下:

OFF > FATAL > ERROR > WARN > INFO> DEBUG > ALL

日志輸出配置分兩部分,前一部分是stdout作為標准輸出,log4j.appender.stdout.Target = System.out指按系統默認的方式輸出日志,一般會輸出到tomcat/logs/catalina.out中。

后一部分的配置,可以讓日志輸出到一個文件中,並且每天自動輸出備份一次。所謂備份,就是重新建了一個文件,把這一天的日志分離出去成為一個單獨的文件而已。它可以通過log4j的DailyRollingFileAppender實現。並且,通過設置DailyRollingFileAppender的屬性,可以讓日志讓自己的意願來輸出。下面我就詳細說一下它的每條屬性:

log4j.appender.D.File:指日志輸出的路徑及文件。${catalina.home}指tomcat的根目錄,所以這個日志是保存在tomcat/logs/test/ 文件夾下的hanyetest.log文件下。但是,我們的日志每天保存一份的,如果都叫hanyetest.log,那就不能區分了,所以,下面一條屬性。

log4j.appender.D.DatePattern=’_’yy-MM-dd:在DailyRollingFileAppender中,可以指定按月、周、天、半天(沒錯,半天!)、小時、分鍾來備份日志。它們的配置是:

    *yyyy-MM,對應monthly(每月)

    *yyyy-ww,對應weekly(每周)

    *yyyy-MM-dd,對應daily(每天)

    *yyyy-MM-dd-a,對應half-daily(每半天)

    *yyyy-MM-dd-HH,對應hourly(每小時)

    *yyyy-MM-dd-HH-mm,對應minutely(每分鍾)

並且這個日期會加到前面說的日志名后面,所以,按上面的配置,最后的日志名會是“hanyetest.log_xx-xx-xx”,前面的‘_‘可以替換,后面的xx-xx-xx是指日期。

log4j.appender.D.Threshold:指定了日志的最低輸出級別。

log4j.appender.D.layout.ConversionPattern:指定了日志的輸出格式。可使用的格式如下:

%c 輸出日志信息所屬的類的全名

%d 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },輸出類似:2002-10-18-22:10:28

%f 輸出日志信息所屬的類的類名

%l 輸出日志事件的發生位置,即輸出日志信息的語句處於它所在的類的第幾行

%m 輸出代碼中指定的信息,如log(message)中的message

%n 輸出一個回車換行符,Windows平台為“rn”,Unix平台為“n”

%p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL。如果是調用debug()輸出的,則為DEBUG,依此類推

%r 輸出自應用啟動到輸出該日志信息所耗費的毫秒數

%t 輸出產生該日志事件的線程名


配置好以后,在代碼中加入日志:

private static Logger logger =LoggerFactory.getLogger(log4jTest.class);

在想要打印的地方加上日志打印就可以了:

logger.info("日志測試。");

運行程序,跑一遍打印日志的代碼,你就可以看到生成的日志了。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com