Log4j学习笔记

log4j使得日志管理更加方便,通过配置文件可以实现在运行时控制。

 

通过log4j,

可以在程序中指定每一条日志的级别(error,warn, debug, info),从而可以根据需求,只输出某个级别和该级别以下的日志。

可以控制日志的附加目的地(Appender),可以是多个,包括控制台、文件、远程套接字服务器,NT事件记录器和远程UNIX Syslog守护程序。

可以定制输出的日志的样式(Layout)。

 

Log4j主要包含了三个组件:loggers(对应早期版本的Category类), appenders,以及layouts。


Loggers是命名的实体,命名对大小写敏感,并遵循层次命名规则(名字为com.foo.Bar的logger是名字为com.foo的子logger)

 

根logger总是存在,并且通过Logger.getRootLogger方法得到。其它logger通过Logger.getLogger(String name)得到。

以相同的名字为参数调用Logger.getLogger(Stringname)总是得到同一个logger对象。

 

Loggers可以指定级别(TRACE, DEBUG, INFO, WARN, ERROR, FATAL)。如果没有指定级别,则是按照层级继承关系,第一个指定了级别的祖先logger对应的级别。

根logger总是指定了级别

 

日志请求(loggingrequest)可以调用不同的输出方法:debug,info, warn, error, fatal, 以及log。

日志请求称为是启用的(enabled)如果级别>=logger的级别

   // get a logger instance named "com.foo"
   Logger  logger = Logger.getLogger("com.foo");
 
   // Now set its level. Normally you do not need to set the
   // level of a logger programmatically. This is usually done
   // in configuration files.
   logger.setLevel(Level.INFO);
 
   Logger barlogger = Logger.getLogger("com.foo.Bar");
 
   // This request is enabled, because WARN >= INFO.
   logger.warn("Low fuel level.");
 
   // This request is disabled, because DEBUG < INFO.
   logger.debug("Starting search for nearest gas station.");
 
   // The logger instance barlogger, named "com.foo.Bar",
   // will inherit its level from the logger named
   // "com.foo" Thus, the following request is enabled
   // because INFO >= INFO.
   barlogger.info("Located nearest gas station.");
 
   // This request is disabled, because DEBUG < INFO.
   barlogger.debug("Exiting gas station search");


log4j提供的Appender有以下几种:(用在property配置文件中)

org.apache.log4j.ConsoleAppender(控制台),

org.apache.log4j.FileAppender(文件),

org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),

org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),

org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

 

Appender Additivity

Logger C的一条日志语句将会输出到所有C以及C的祖先的appender中,相当于appender将会继承下去。

如果C的某个祖先P将additivity标志设置为false,则C输出的appender只到P为止。

 

布局

PatternLayout可以控制输出的格式,控制的模式与C语言中的printf方法类似。

%r 时间 0 

%t 方法名 main 

%p 优先级 DEBUG/INFO/ERROR 

%c 所属类的全名(包括包名) 

%l 发生的位置,在某个类的某行 

%m 输出代码中指定的讯息,如log(message)中的message 

%n 输出一个换行符号 

 

Log4j的配置

可以直接使用log4j提供的简单的配置

BasicConfigurator.configure();

 

也可以通过XML文件或者Java properties(key = value)文件配置

Property文件例子:

# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1
 
# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender
 
# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n


property文件通过PropertyConfigurator.configure(String filename)读入

PropertyConfigurator.configure(args[0]);

 

XML文件配置例子:

<?xml version="1.0"encoding="UTF-8"?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
 
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
      <appendername="myConsole" class="org.apache.log4j.ConsoleAppender">
           <layoutclass="org.apache.log4j.PatternLayout">
                 <paramname="ConversionPattern" value="[%d{MM-dd HH:mm:ss,SSS\} %-5p][%t] %c{2\} - %m%n" />
           </layout>
      </appender>
      <root>
           <priorityvalue="info" />
           <appender-refref="myConsole" />
      </root>
</log4j:configuration>

XML配置文件通过DOMConfigurator.configure ( String filename ) 读入

 

参考:

http://logging.apache.org/log4j/1.2/manual.html

http://www.iteye.com/topic/378077

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值