log4j教程
log4j技术
log4j案例
Log4j2技术
log42j案例
Logback技术
Logback案例

log4j日志记录级别

log4j日志记录级别

为了方便对于日志信息的输出显示,对日志内容进了分级管理。日志级别由高到低级别如下:org.apache.log4j.Level类提供以下级别,但也可以通过Level类的子类自定义级别。

Level

描述

ALL

各级包括自定义级别

DEBUG

指定细粒度信息事件是最有用的应用程序调试

ERROR

错误事件可能仍然允许应用程序继续运行

FATAL

指定非常严重的错误事件,这可能导致应用程序中止

INFO

指定能够突出在粗粒度级别的应用程序运行情况的信息的消息

OFF

这是最高等级,为了关闭日志记录

TRACE

指定细粒度比DEBUG更低的信息事件

WARN

指定具有潜在危害的情况

为什么要对日志进行分级呢?

无论是将日志输出到控制台,还是文件,其输出都会降低程序的运行效率。但由于调试、运行维护的需要,客户的要求等等原因,需要进行必要的日志输出。这时就必须要在代码中加入日志的输出语句。

这些输出语句若在程序运行时全部输出,则势必会降低程序运行效率。例如,使用System.out.println()将信息输出到控制台,则所有的该输出语句均将执行。就会大大降低程序的执行效率。而要使其不输出,唯一的办法就是将这些语句只能一个一个的全部删除。这是个费时费力的过程。

将日志信息进行分级管理,便可方便的控制信息输出内容及输出的位置:哪些信息需要输出,哪些信息不需要输出,只需要在一个日志输出控制文件中稍加修改即可。而代码中的输出语句不用做任何的修改。

从这个角度来说,代码中的日志编写,其实就是写大量的输出语句。只不过这些输出语句比较特殊,它们具有级别,在程序运行期间不一定被执行。它们的执行是需要由另外一个文件来控制。

log4j日志级别是如何工作?

级别p的级别使用q,在记录日志请求时,如果p>=q启用。这条规则是log4j的核心。它假设级别是有序的。对于标准级别它们关系如下:ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF。

下面的例子明确指出如何可以过滤所有的DEBUG和INFO消息。这个程序使用记录并执行setLevel(Level.X)方法来设置所需的日志记录级别:

这个例子将打印,除了调试和信息的所有消息:

import org.apache.log4j.*;

public class LogClass {

   private static org.apache.log4j.Logger log = Logger

                                    .getLogger(LogClass.class);

   public static void main(String[] args) {

      log.setLevel(Level.WARN);

      log.trace("Trace Message!");

      log.debug("Debug Message!");

      log.info("Info Message!");

      log.warn("Warn Message!");

      log.error("Error Message!");

      log.fatal("Fatal Message!");

   }

}

当编译并运行LogClass程序会产生以下结果:

Warn Message!

Error Message!

Fatal Message!

用配置文件设置log4j日志级别级别:

Log4j提供这些可以让程序员自由更改源代码,改变调试级别的配置级别是基于文件设置。

以下是上面的例子使用 log.setLevel(Level.WARN)方法的配置文件与上面的例子例子功能一样。

# Define the root logger with appender file

log = /usr/home/log4j

log4j.rootLogger = WARN, FILE

# Define the file appender

log4j.appender.FILE=org.apache.log4j.FileAppender

log4j.appender.FILE.File=${log}/log.out

# Define the layout for file appender

log4j.appender.FILE.layout=org.apache.log4j.PatternLayout

log4j.appender.FILE.layout.conversionPattern=%m%n

现在,使用下面的程序:

import org.apache.log4j.*;

public class LogClass {

   private static org.apache.log4j.Logger log = Logger

                                    .getLogger(LogClass.class);

   public static void main(String[] args) {

      log.trace("Trace Message!");

      log.debug("Debug Message!");

      log.info("Info Message!");

      log.warn("Warn Message!");

      log.error("Error Message!");

      log.fatal("Fatal Message!");

   }

}

现在,编译和运行上面的程序,得到以下结果在 /usr/home/log4j/log.out 文件:

Warn Message!

Error Message!

Fatal Message!

日志输出控制文件

Log4j的日志输出控制文件,主要由三个部分构成:

  • 日志信息的输出位置:控制日志信息将要输出的位置,是控制台还是文件等。
  • 日志信息的输出格式:控制日志信息的显示格式,即以怎样的字符串形式显示。
  • 日志信息的输出级别:控制日志信息的显示内容,即显示哪些级别的日志信息。

有了日志输出控制文件,代码中只要设置好日志信息内容及其级别即可,通过控制文件便可控制这些日志信息的输出了

全部教程