代码、参数解析
import org.apache.log4j.Logger;
public class TestLog4j {
public static void main(String[] args) {
// 根据类名称获取日志对象
Logger logger = Logger.getLogger(TestLog4j.class);
logger.info("Myname");
}
}
日志的级别
根据类名获取到日志对象后,我们可以调用这个日志对象中的各种方法去记录我们需要的日志信息(这些日志信息有DEBUG、ERROR、FATAL、INFO、WARN、TRACE、OFF、ALL几类),而这些日志信息有等级之分,使用之前先了解一下它们的级别关系。- 级别说明:
level 说明 (表来源) all 各级包括自定义级别 trace 指定细粒度比DEBUG更低的信息事件 debug 指定细粒度信息事件是最有用的应用程序调试 info 指定能够突出在粗粒度级别的应用程序运行情况的信息的消息 warn 指定具有潜在危害的情况 error 错误事件可能仍然允许应用程序继续运行 fatal 指定非常严重的错误事件,这可能导致应用程序中止 off 这是最高等级,为了关闭日志记录 - log4j 规定了默认的级别为,all < trace < debug < info < warn < error < fatal < off(如上表)。级别之间是包含关系,也就是说设置输出的级别为 info,那么大于等于 info 的消息都会输出(如果你调用了方法的话,实例程序中没有调用info以上的方法所以没输出)。
public static void main(String[] args) { // 设置需要的日志级别,这个例子将打印,除了trace和all的所有消息 log.setLevel(Level.DEBUG); log.trace("Trace Message!"); log.debug("Debug Message!"); log.info("Info Message!"); log.warn("Warn Message!"); log.error("Error Message!"); log.fatal("Fatal Message!"); }
配置文件
除了可以在代码中设置相应的输出要求,我们还可以通用过配置文件达到这么目的。配置文件可以分为两种,第一种就是上一篇例子里的 log4j.properties ,第二种还可以通过 xml 格式文件进行配置。
log4j 中有三个主要的组件,Logger、Appender、Layout。log4j 允许开发人员定义多个 Logger,每个 Logger 拥有自己的名字,Logger 之间通过名字来表明隶属关系。有一个 Logger 称为 Root,它永远 存在,且不能通过名字检索或引用,可以通过 Logger.getRootLogger() 方法获得,其它 Logger 通过 Logger.getLogger(String name) 方法。
log4j.rootLogger = [ level ] , appenderName, appenderName, ...
[ level ],设置日志输出的等级。appenderName就是指定日志信息输出到哪个地方,可以同时指定多个输出目的地。
Appender 则是用来指明将所有的 log 信息存放到什么地方,log4j 中支持多种 appender,如 console、files、GUI components、NT Event Loggers等,一个 Logger 可以拥有多个 Appender,也就是你既可以将Log信息输出到屏幕,同时存储到一个文件中。配置日志信息输出目的地Appender,其语法为:
log4j.appender.appenderName = fully.qualified.name.of.appender.class log4j.appender.appenderName.option1 = value1 log4j.appender.appenderName.option = valueN
- Log4j提供的appender有以下几种:
org.apache.log4j.ConsoleAppender(控制台), org.apache.log4j.FileAppender(文件), org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件), org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件), org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
- Log4j提供的appender有以下几种:
Layout的作用是控制Log信息的输出方式,也就是格式化输出的信息。配置日志信息的格式(布局),其语法为:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class log4j.appender.appenderName.layout.option1 = value1 log4j.appender.appenderName.layout.option = valueN
- Log4j提供的layout有以下几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局), org.apache.log4j.PatternLayout(可以灵活地指定布局模式), org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串), org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
- Log4j提供的layout有以下几种:
输出格式:log4J 采用类似 C 语言中的 printf 函数的打印格式格式化日志信息,如下:
mark 说明 %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 输出产生该日志事件的线程名
xml 格式配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration PUBLIC "-//log4j/log4j Configuration//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p %c.%M:%L - %m%n"/>
</layout>
</appender>
<!-- specify the logging level for loggers from other libraries -->
<logger name="com.opensymphony">
<level value="ERROR" />
</logger>
<logger name="org.apache">
<level value="ERROR" />
</logger>
<logger name="org.hibernate">
<level value="ERROR" />
</logger>
<!-- for all other loggers log only debug and above log messages -->
<root>
<priority value="ERROR"/>
<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>