标签:
Log4J是Apache的一个开放源代码的项目。通过使用Log4J,程序员可以控制日志信息输送的目的地,包括控制台,文件,GUI组件和NT事件记录器,也可以控制每一条日志的输出格式,或通过定义每一条日志信息的级别,更加细致地控制日志的生成过程。
Log4j的组成:    
Log4j由三个重要的组成构成:日志记录器(Loggers),输出端(Appenders)和日志格式化器(Layout)。     
Appender、Layout分别是输出端和日志格式化器的祖先,下图显示了他们的对应关系。     
日志记录器Logger:控制要输出哪些日志记录语句,并对日志信息进行级别限制。      
Logger可以通过两种方式获取对象:Logger.getLogger(Class clazz);或Logger.getRootLogger();     
其中getRootLogger()获取的是根Logger,是所有Logger的祖先,它有如下属性:     
1、总是存在。     
2、不可通过名称获取(配置文件情况下)。     
调用Logger.getLogger(Class clazz)是目前获取logger对象最理想的方法。
日志级别Level:     
每个Logger都将指定一个日志级别(log level),用来控制日志信息的输出。日志级别从高到低分为:     
A:off         最高等级,用于关闭所有日志记录。     
B:fatal       指出每个严重的错误事件将会导致应用程序的退出。     
C:error      指出虽然发生错误事件,但仍然不影响系统的继续运行。     
D:warm     表明会出现潜在的错误情形。     
E:info        一般和在粗粒度级别上,强调应用程序的运行全程。     
F:debug     一般用于细粒度级别上,对调试应用程序非常有帮助。     
G:all          最低等级,用于打开所有日志记录。     
上面这些级别是定义在org.apache.log4j.Level类中。Log4j只建议使用4个级别,优先级从高到低分别是error,warn,info和debug。通过使用日志级别,可以控制应用程序中相应级别日志信息的输出。例如,如果指定了info级别,则应用程序中所有低于info级别的日志信息(如debug)将不会被打印出来。
输出端Appenders:指定了日志输出位置,例如:控制台、文件、数据库等等。      
Appender用来指定日志信息输出到哪个地方,可以同时指定多个输出目的地。Log4j允许将信息输出到许多不同的输出设备中,一个log信息输出目的地就叫做一个Appender。     
每个Logger都可以拥有一个或多个Appender,每个Appender表示一个日志的输出目的地。可以使用Logger.addAppender(Appender app)为Logger增加一个Appender,也可以使用Logger.removeAppender(Appender app)为Logger删除一个Appender。     
以下为Log4j几种常用的输出目的地。     
a:org.apache.log4j.ConsoleAppender:将日志信息输出到控制台。     
b:org.apache.log4j.FileAppender:将日志信息输出到一个文件。     
c:org.apache.log4j.DailyRollingFileAppender:将日志信息输出到一个日志文件,并且每天输出到一个新的日志文件。     
d:org.apache.log4j.RollingFileAppender:将日志信息输出到一个日志文件,并且指定文件的尺寸,当文件大小达到指定尺寸时,会自动把文件改名,同时产生一个新的文件。     
e:org.apache.log4j.WriteAppender:将日志信息以流格式发送到任意指定地方。     
f:org.apache.log4j.jdbc.JDBCAppender:通过JDBC把日志信息输出到数据库中。
日志格式化器Layout:控制日志信息的显示格式。     
一个Appender只能指定一种layout输出格式。     
常用日志格式化器有三种:     
1、HTMLLayout:格式化日志输出为HTML表格形式。     
2、SimpleLayout:以一种非常简单的方式格式化日志输出,它打印两项内容:级别-信息。例如:INFO – this is info     
3、PatternLayout:根据指定的转换模式格式化日志输出,或者如果没有指定任何转换模式,就使用默认的转化模式格式。
实例程序:     
package com.alfred.log.helloworld; import java.io.IOException; import org.apache.log4j.BasicConfigurator; import org.apache.log4j.ConsoleAppender; import org.apache.log4j.FileAppender; import org.apache.log4j.HTMLLayout; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.PatternLayout; import org.apache.log4j.SimpleLayout; public class HelloWorld { public static void main(String[] args) { Logger logger = Logger.getLogger(HelloWorld.class); // 使用默认的配置信息 BasicConfigurator.configure(); // 设置日志输出级别为warn,这将覆盖配置文件中设置的级别 logger.setLevel(Level.WARN); logger.addAppender(new ConsoleAppender(new SimpleLayout())); try { logger.addAppender(new FileAppender(new HTMLLayout(), "f://log.html", true)); logger.addAppender(new FileAppender(new PatternLayout( "%d{HH:mm:ss} %p %C-%M [%m]%n"), "f://log.txt", true)); } catch (IOException e) { e.printStackTrace(); } // 下面的消息中级别大等于warn的将被输出 logger.info("helloworld info"); logger.warn("helloworld warn"); logger.error("helloworld error"); logger.fatal("helloworld fatal"); } }
控制台输出结果: 
    
 
    
log.html输出结果: 
    
 
    
log.txt输出结果: 
    ![]()
PropertyConfigurator.configure()方法: 
  
当使用以下语句生成Logger对象时: 
  
static Logger logger = Logger.getLogger(mycalss.class);
PropertyConfigurator.configure("classes/my.properties");
标签:
原文地址:http://www.cnblogs.com/alfredinchange/p/3150737.html