文章目录
import org.apache.log4j.Logger;
import org.junit.Test;
public class Test {
// 构造记录器,形参是记录器所在的类,表示要在该类做日志
private static Logger log = Logger.getLogger(Test.class.getClass());
@Test
public void testLog(){
// 记录下各种级别的信息,这些信息放在哪儿,以哪种方式存放,在log4j.properties文件中配置.
log.debug("debug");
log.error("error");
}
}
### set log levels ###
log4j.rootLogger = info,stdout , D , E
###
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 = [%d{MM-dd HH:mm:ss}] [%p] [%c:%L] %m%n
### 输出到日志文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File =D:/logs/log.log
log4j.appender.D.DatePattern= _yyyy-MM-dd-HH'.log'
log4j.appender.D.Append = true
log4j.appender.D.Threshold = info
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = [%d{MM-dd HH:mm:ss}] [%p] [%c:%L] %m%n
log.log(工程目录下)
log.log_2012-08-13.log——年-月-日
log.log_2012-08-14-18.log——年-月-日-时
总结:
DatePattern='_'yyyy-MM-dd'.log':每天滚动一次文件,即每天产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下:
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: 每分钟
生成文件名有日期的文件
用log4j生成日志,担心天长日久如果生成到一个文件里面有很大,考虑每天都生成当天的日志文件,文件名有当天的日期。
但是在测试的时候怎么也出不来想要的类似“log.2012-07-24”这样的日志文件,老是只有一个"log.log"的文件,后来发现24日(今天)生成的日志是以”log“的形式存储的,当到25日(明天)的时候是把24日生成的log.log文件加入24日的日期(log.20120724)保存起来,然后在创建一个25日的log.log文件,依次类推。
所以在测试的时候需要修改系统时间才能看到生成的日志.例如:我配置了log4j.appender.D.DatePattern=
_yyyy-MM-dd’.log’,以年-月-日来生成新的日志文件的配置时,12日的日志会存在log.log里边,等到13日再有新的日志时,就会生成一个log.log_2019-11-12.log新的日志文件(图中2019-11-12-18是因为之前设置的是yyyy-MM-dd-HH’.log),把13日的日志存到新的log.log里边
同理,如果我们把日期时间放宽,比如:log4j.appender.D.DatePattern=
_yyyy-MM-dd-HH’.log’,精确到年-月-日-时,就有图中log.log_2019-11-12-18.log,的效果
一些坑:
最好不要把日志时间设置太小,如果精确到分钟,跑一次程序十分钟的话,就会生成十个日志文件,这样查看起来很不友好