log4j,该框架是专门的记录日志的框架,log4j的api包含多个对象。
在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;跟踪代码运行时轨迹,作为日后审计的依据;担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。
Maven导入log4j依赖
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
log4j对象
Logger对象:
顶级层的Logger,它提供Logger对象。Logger对象负责捕获日志信息及它们存储在一个空间的层次结构。
布局(Layout)对象:
该层提供其用于格式化不同风格的日志信息的对象。布局层提供支持Appender对象到发布日志信息之前。
布局对象的发布方式是人类可读的及可重复使用的记录信息的一个重要的角色。
Appender对象:
Appender对象负责发布日志信息,以不同的首选目的地,如数据库,文件,控制台,UNIX系统日志等。
Level对象:
级别对象定义的任何记录信息的粒度和优先级。有记录的七个级别在API中定义:OFF, DEBUG, INFO, ERROR, WARN, FATAL 和 ALL
Filter对象:
过滤对象用于分析日志信息及是否应记录或不用这些信息做出进一步的决定。
一个appender对象可以有与之关联的几个Filter对象。如果日志记录信息传递给特定Appender对象,都和特定Appender相关的Filter对象批准的日志信息,然后才能发布到所连接的目的地。
对象渲染器:
ObjectRenderer对象是一个指定提供传递到日志框架的不同对象的字符串表示。这个对象所使用的布局对象来准备最后的日志信息。
Log4j配置
通常使用配置文件进行配置,需指定日志输出级别,日志输出目的地等信息,Log4j建议只使用四个级别,优先级从高到低分别是 ERROR、WARN、INFO、DEBUG。
需要配置 3 个方面的内容:
1 、根目录(级别和目的地);
2 、目的地(控制台、文件等等);
3 、输出样式。
Logger - 日志写出器 ,供程序员输出日志信息
Appender - 日志目的地 ,把格式化好的日志信息输出到指定的地方去
Layout - 日志格式化器 ,用来把程序员的 logging request 格式化成字符串
配置根 Logger ,其语法为:
log4j.rootLogger = [ level ] , appenderName, appenderName, …(名字任意,如X,Y等)
配置日志信息输出目的地 Appender ,其语法为:
log4j.appender.appenderName = fully.qualified.name.of.appender.class. 其中, Log4j 提供的 appender 有以下几种:
1.org.apache.log4j.ConsoleAppender (控制台),
2.org.apache.log4j.FileAppender (文件),
3.org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件),
4.org.apache.log4j.RollingFileAppender (文件大小到达指定尺寸的时候产生一个新的文件)
5.org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方)
配置日志信息的格式(布局),其语法为:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
其中, Log4j 提供的 layout 有:
1.org.apache.log4j.HTMLLayout (以 HTML 表格形式布局),
2.org.apache.log4j.PatternLayout (可以灵活地指定布局模式),
3.org.apache.log4j.SimpleLayout (包含日志信息的级别和信息字符串),
4.org.apache.log4j.TTCCLayout (包含日志产生的时间、线程、类别等等信息)
例:
### set log levels ###
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
注意:文件名要使用绝对路径
Log4j执行过程
Logger logger = Logger.getLogger("MyLog");使用该方法即可追踪MyLog并产生日志,Logger会去找log4j.properties中的log4j.category.MyLog对应的Appender来写日志。
使用时,创建Logger对象,调用相应方法即可
package study;
import org.apache.log4j.Logger;
public class Log4jStudy {
//获取需要打印日志的class
static Logger logger= Logger.getLogger(Log4jStudy.class.getName());
public static void main(String[] args){
try {
logger.debug("debug信息");
}catch (Exception e){
e.printStackTrace();
}
}
}
每执行一次就可以看到在对应的控制台或文件中打印出已经配置过的输出信息。
Logger类它提供了两个静态方法获得一个 Logger 对象:
-
public static Logger getRootLogger();
-
public static Logger getLogger(String name);
通常的用法为static Logger log = Logger.getLogger(log4jExample.class.getName());
Logger类有专门用于打印日志信息下面的方法如下。
SN | 方法及描述 |
---|---|
1 | public void debug(Object message) 这种方法打印使用 Level.DEBUG 消息级别 |
2 | public void error(Object message) 这种方法打印使用 Level.ERROR 消息级别 |
3 | public void fatal(Object message); 这种方法打印使用 Level.FATAL 消息级别 |
4 | public void info(Object message); 这种方法打印使用 Level.INFO 消息级别 |
5 | public void warn(Object message); 这种方法打印使用 Level.WARN 消息级别 |
6 | public void trace(Object message); 这种方法打印使用Level.TRACE消息级别 |