1、LOG4J是怎么工作的?
JDK提供的new throwable.getStackTrace() 方法获得当前运行栈的层次结构,然后对调用栈进行分析,返回调用该类的名称。Log能把代码运行时间,类名,方法名全部打印出来。
2、log4j的配置文件
log4j的configure文件就是用来设置记录器的级别,存放器和布局的。我们在配置文件中,可以初始化指定的 Logger ,并且对指定的 Logger 进行一些相关的配置,如设置如何进行输出,以及如何将输出进行布局等。
配置文件示例:
log4j.properties:
//配置根,debug表示级别,stdout表示是AppenderName
log4j.rootLogger=debug, stdout, R
//配置信息的输出地Appender,log4j中,包含ConsoleAppender,FielAppender(文件)DarieyRollingFileAppender(每天产生一个日志文件) RollingFileAppender(当文件大小到达一定的时候,产生新文件)
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
//日志输出格式,有htmlLayout,PatternLayout(任意布局),simpleLayout(包含日志信息级别的字符串)
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
//打印参数
Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,如下:
%m 输出代码中的指定的消息
%p 输出优先级,即GEBUG,INFO,WARN ERROR FATAL
%r输出从应用程序启动到输出log信息的毫秒数
%c输出所属的类名
%t 输出产生该日志事件的线程名
%n 输出回车换行符
%d 输出日志时间(可以指定格式)
[配置文件]
log4j.rootLogger=debug , 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{ABSOLUTE} %5p %c{1 }:%L - %m%n
### 输出到日志文件 ###
log4j.appender.D= org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File= logs/log.log
log4j.appender.D.Append= true
log4j.appender.D.Threshold= DEBUG ## 输出DEBUG级别以上的日志
log4j.appender.D.layout= org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%t:%r ] - [ %p ] %m%n
### 保存异常信息到单独文件 ###
log4j.appender.D= org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File= logs/error.log ## 异常日志文件名
log4j.appender.D.Append= true
log4j.appender.D.Threshold= ERROR ## 只输出ERROR级别以上的日志!!!
log4j.appender.D.layout= org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%t:%r ] - [ %p ] %m%n
[代码中使用]
public static void main(String[] args) {
PropertyConfigurator.configure("D:/Co
Logger logger = Logger.getLogger(TestLog4j.class);
logger.debug("debug " );
logger.error("error " );
}
}