log4j教程

1. 简介
2. 安装
3. log4j基本概念
3.1. Logger
3.2. Appender
3.2.1. 使用ConsoleAppender
3.2.2. 使用FileAppender
3.2.3. 使用WriterAppender
3.3. Layout
3.4. 基本示例
3.4.1. SimpleLayout和FileAppender
3.4.2. HTMLLayout和WriterAppender
3.4.3. PatternLayout和ConsoleAppender
4. 使用外部配置文件
5. 参考资料 (以及一些有参考价值的连接)

使用log4j大概涉及3个主要概念:app

日志记录器(Logger)是日志处理的核心组件。log4j具备5种正常级别(Level)。 日志记录器(Logger)的可用级别Level (不包括自定义级别 Level), 如下内容就是摘自log4j API (http://jakarta.apache.org/log4j/docs/api/index.html):

  • static Level DEBUG

    DEBUG Level指出细粒度信息事件对调试应用程序是很是有帮助的。

  • static Level INFO

    INFO level代表 消息在粗粒度级别上突出强调应用程序的运行过程。

  • static Level WARN

    WARN level代表会出现潜在错误的情形。

  • static Level ERROR

    ERROR level指出虽然发生错误事件,但仍然不影响系统的继续运行。

  • static Level FATAL

    FATAL level指出每一个严重的错误事件将会致使应用程序的退出。

另外,还有两个可用的特别的日志记录级别: (如下描述来自log4j APIhttp://jakarta.apache.org/log4j/docs/api/index.html):

  • static Level ALL

    ALL Level是最低等级的,用于打开全部日志记录。

  • static Level OFF

    OFF Level是最高等级的,用于关闭全部日志记录。

日志记录器(Logger)的行为是分等级的。

有不少方法能够建立一个日志记录器(Logger),下面方法能够取回root日志记录器:

Logger logger = Logger.getRootLogger();

还能够这样建立一个新的日志记录器:

Logger logger = Logger.getLogger("MyLogger");

比较经常使用的用法,就是根据类名实例化一个静态的全局日志记录器:

static Logger logger = Logger.getLogger(test.class);

全部这些建立的叫"logger"的日志记录器均可以用下面方法设置级别:

logger.setLevel((Level)Level.WARN);

可使用7个级别中的任何一个; Level.DEBUG, Level.INFO, Level.WARN, Level.ERROR, Level.FATAL, Level.ALL and Level.OFF.

Appender 控制日志怎样输出。下面列出一些可用的Appender(log4j API中所描述的http://jakarta.apache.org/log4j/docs/api/index.html):

  1. ConsoleAppender:使用用户指定的布局(layout) 输出日志事件到System.out或者 System.err。默认的目标是System.out。

  2. DailyRollingFileAppender 扩展FileAppender,所以多个日志文件能够以一个用户选定的频率进行循环日志记录。

  3. FileAppender 把日志事件写入一个文件

  4. RollingFileAppender 扩展FileAppender备份容量达到必定大小的日志文件。

  5. WriterAppender根据用户的选择把日志事件写入到Writer或者OutputStream。

  6. SMTPAppender 当特定的日志事件发生时,通常是指发生错误或者重大错误时,发送一封邮件。

  7. SocketAppender 给远程日志服务器(一般是网络套接字节点)发送日志事件(LoggingEvent)对象。

  8. SocketHubAppender 给远程日志服务器群组(一般是网络套接字节点)发送日志事件(LoggingEvent)对象。

  9. SyslogAppender给远程异步日志记录的后台精灵程序(daemon)发送消息。

  10. TelnetAppender 一个专用于向只读网络套接字发送消息的log4j appender。

还能够实现 Appender 接口,建立以本身的方式进行日志输出的Appender。

FileAppender能够用这种方式建立:

FileAppender appender = null;
try {
appender = new FileAppender(new PatternLayout(),"filename");
} catch(Exception e) {}

上面用到的构造函数:

FileAppender(Layout layout, String filename)
实例化一个FileAppender而且打开变量"filename"指定的文件。

另外一个有用的构造函数是:

FileAppender(Layout layout, String filename, boolean append)
实例化一个FileAppender而且打开变量"filename"指定的文件。

这个构造函数还能够选择是否对指定的文件进行追加的方式输出。若是没有指定值,那么默认的方式就是追加。

这里是一个很是简单的例子,程序实现了SimpleLayout和FileAppender:

import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.SimpleLayout;
import org.apache.log4j.FileAppender;
public class simpandfile {
static Logger logger = Logger.getLogger(simpandfile.class);
public static void main(String args[]) {
SimpleLayout layout = new SimpleLayout();
FileAppender appender = null;
try {
appender = new FileAppender(layout,"output1.txt",false);
} catch(Exception e) {}
logger.addAppender(appender);
logger.setLevel((Level) Level.DEBUG);
logger.debug("Here is some DEBUG");
logger.info("Here is some INFO");
logger.warn("Here is some WARN");
logger.error("Here is some ERROR");
logger.fatal("Here is some FATAL");
}
}

你能够下载: simpandfile.java。 还能够查看它的输出: output1.txt.

这里是一个很是简单的例子,程序实现了 HTMLLayout和WriterAppender:

import java.io.*;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.HTMLLayout;
import org.apache.log4j.WriterAppender;
public class htmlandwrite {
static Logger logger = Logger.getLogger(htmlandwrite.class);
public static void main(String args[]) {
HTMLLayout layout = new HTMLLayout();
WriterAppender appender = null;
try {
FileOutputStream output = new FileOutputStream("output2.html");
appender = new WriterAppender(layout,output);
} catch(Exception e) {}
logger.addAppender(appender);
logger.setLevel((Level) Level.DEBUG);
logger.debug("Here is some DEBUG");
logger.info("Here is some INFO");
logger.warn("Here is some WARN");
logger.error("Here is some ERROR");
logger.fatal("Here is some FATAL");
}
}

你能够下载: simpandfile.java. 还能够查看它的输出:output1.txt.

这里是一个很是简单的例子,程序实现了PatternLayout和ConsoleAppender:

import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.ConsoleAppender;
public class consandpatt {
static Logger logger = Logger.getLogger(consandpatt.class);
public static void main(String args[]) {
// Note, %n is newline
String pattern = "Milliseconds since program start: %r %n";
pattern += "Classname of caller: %C %n";
pattern += "Date in ISO8601 format: %d{ISO8601} %n";
pattern += "Location of log event: %l %n";
pattern += "Message: %m %n %n";
PatternLayout layout = new PatternLayout(pattern);
ConsoleAppender appender = new ConsoleAppender(layout);
logger.addAppender(appender);
logger.setLevel((Level) Level.DEBUG);
logger.debug("Here is some DEBUG");
logger.info("Here is some INFO");
logger.warn("Here is some WARN");
logger.error("Here is some ERROR");
logger.fatal("Here is some FATAL");
}
}

你能够下载:simpandfile.java. 还能够查看它的输出: output2.txt.

Log4j常常与外部日志文件联合使用,这样不少可选项没必要硬编码在软件中。使用外部配置文件的优势就是修改可选项不须要从新编译程序。惟一的缺点就是,因为用到io 指令,速度稍微有些减慢。

有两个方法能够用来指定外部配置文件:文本文件或者XML文件。既然如今全部事情都写成XML文件,那么该教程就重点讲解XML文件方法,可是也包含相关文本文件的例子。首先,看看下面的XML配置文件示例:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.SimpleLayout"/>
</appender>
<root>
<priority value ="debug" />
<appender-ref ref="ConsoleAppender"/>
</root>
</log4j:configuration>

文件以标准的XML声明做为开始,后面跟着指出DTD(文档类型定义)的DOCTYPE声明,它定义了XML文件的结构,例如,什么元素能够嵌入在其余元素中等等。上面文件在log4j发行版的src/java/org/apache/log4j/xml目录中。 接着看看封装全部元素的 log4j:configuration 元素,它在DOCTYPE声明中被指定为根元素。嵌入在根元素中有两个结构:

<appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.SimpleLayout"/>
</appender>

这里建立一个名叫"ConsoleAppender"的 Appender,注意,你能够选择任何名字,该示例之因此选择"ConsoleAppender",彻底是为了示例的设计。接着这个appender类以全名形式给出,常常用规范(fully qualified)类名。 Appender必须具备一个指定的 nameclass。嵌入在 Appender以内的是 layout元素,这里它被指定为SimpleLayout。 Layout 必须具备一个 class属性。

<root>
<priority value ="debug" />
<appender-ref ref="ConsoleAppender"/>
</root>

root元素必须存在且不能被子类化。示例中的优先级被设置为"debug",设置appender饱含一个appender-ref元素。还有更多的属性或元素能够指定。查看log4j发行版中的src/java/org/apache/log4j/xml/log4j.dtd以了解关于XML配置文件结构的更多信息。能够用下面这种方法把配置信息文件读入到Java程序中:

DOMConfigurator.configure("configurationfile.xml");

DOMConfigurator 用一棵DOM树来初始化log4j环境。这里是示例中的XML配置文件:plainlog4jconfig.xml。这里是执行该配置文件的程序: files/externalxmltest.java:

import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;
public class externalxmltest {
static Logger logger = Logger.getLogger(filetest.class);
public static void main(String args[]) {
DOMConfigurator.configure("xmllog4jconfig.xml");
logger.debug("Here is some DEBUG");
logger.info("Here is some INFO");
logger.warn("Here is some WARN");
logger.error("Here is some ERROR");
logger.fatal("Here is some FATAL");
}
}

这里是一个实现带有PatternLayoutFileAppender的日志记录器Logger的XML配置文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="appender" class="org.apache.log4j.FileAppender">
<param name="File" value="Indentify-Log.txt"/>
<param name="Append" value="false"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %p - %m%n"/>
</layout>
</appender>
<root>
<priority value ="debug"/>
<appender-ref ref="appender"/>
</root>
</log4j:configuration>

你能够从这里下载示例: xmllog4jconfig2.xml。 想要获得更多的使用XML文件配置log4j环境的例子,请查看log4j发行版的目录src/java/org/apache/log4j/xml/examples/

这就是上面讨论的文本文件形式的配置文件:

# initialise root logger with level DEBUG and call it BLAHlog4j.rootLogger=DEBUG,
BLAH# add a ConsoleAppender to the logger BLAHlog4j.appender.BLAH=
org.apache.log4j.ConsoleAppender# set set that layout to be SimpleLayoutlog4j.appender.BLAH.layout=
org.apache.log4j.SimpleLayout

从这里能够下载: plainlog4jconfig.txt。这就是执行该配置文件的程序:

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class externalplaintest {
static Logger logger = Logger.getLogger(externalplaintest.class);
public static void main(String args[]) {
PropertyConfigurator.configure("plainlog4jconfig.xml");
logger.debug("Here is some DEBUG");
logger.info("Here is some INFO");
logger.warn("Here is some WARN");
logger.error("Here is some ERROR");
logger.fatal("Here is some FATAL");
}
}

你能够下载使用该配置文件的示例: externalplaintest.java。想要得到更多的使用文本文件配置log4j环境的例子,请查看log4j发行版中的目录examples

使用外部配置文件的例子就简单的讨论到这里,如今应该能够确定你已经有能力独立学习更多的log4j发行版和测试版中提供的例子。

 

文章转自: http://www.blogjava.net/hellxoul/archive/2011/11/30/365181.html
相关文章
相关标签/搜索