package democreen.log4jexamples2;
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("src/democreen/log4jexamples2/output2.html");
appender = new WriterAppender(layout, output);
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");
} catch (Exception e) {
}
}
}
运行文件后,output2.html文件
Logger
日志记录器(Logger)是日志处理的核心组件。log4j具有5种正常级别(Level)。
Ø DEBUG:指出细粒度信息事件对调试应用程序是非常有帮助的。
Ø INFO: 消息在粗粒度级别上突出强调应用程序的运行过程。
Ø WARN:表明会出现潜在错误的情形。
Ø ERROR:指出虽然发生错误事件,但仍然不影响系统的继续运行。
Ø FATAL:指出每个严重的错误事件将会导致应用程序的退出。
两个可用的特别的日志记录级别:
Ø ALL:是最低等级的,用于打开所有日志记录。
Ø OFF:是最高等级的,用于关闭所有日志记录。
Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。
日志记录器(Logger)的行为是分等级的。
***日志记录器(Logger)将只输出那些级别高于或等于它的级别的信息。如果没有设置日志记录器(Logger)的级别,那么它将会继承最近的祖先的级别。因此,如果在包com.foo.bar中创建一个日志记录器(Logger)并且没有设置级别,那它将会继承在包com.foo中创建的日志记录器(Logger)的级别。如果在com.foo中没有创建日志记录器(Logger)的话,那么在com.foo.bar中创建的日志记录器(Logger)将继承root 日志记录器(Logger)的级别,root日志记录器(Logger)经常被实例化而可用,它的级别为DEBUG。
有很多方法可以创建一个日志记录器(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 控制日志怎样输出。
Ø WriterAppender: 根据用户的选择把日志事件写入到Writer或者OutputStream。
使用WriterAppender
WriterAppender可以用这种方式创建:
WriterAppender appender = null;
try {
appender = new WriterAppender(new PatternLayout(),new FileOutputStream("filename"));
} catch(Exception e) {}
这个WriterAppender使用的构造函数带有PatternLayout和OutputStream参数,在这种情况下, FileOutputStream用于向一个文件输出。
Layout
Appender必须使用一个与之相关联的 Layout,这样它才能知道怎样格式化它的输出。当前,log4j具有三种类型的Layout:
Ø HTMLLayout 格式化日志输出为HTML表格。
Ø PatternLayout 根据指定的 转换模式格式化日志输出,或者如果没有指定任何转换模式,就使用默认的转换模式。
Ø SimpleLayout 以一种非常简单的方式格式化日志输出,它打印级别 Level,然后跟着一个破折号“-“ ,最后才是日志消息。