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("日志测试。");

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值