log4j 学习笔记

 
关于log4j的介绍大都从三个组件:Category、Appender和layout开始。

一、介绍Category

Logger定义了一组写日志的方法。但是,Logger的魅力并不仅限于此。要理解Logger,需掌握如下三点:
1、  Logger的分层结构
可以定义多个Logger,不同Logger用一个简单的原则分成继承层次。
例如,类别“com.foo”是类别“com.foo.Bar”的parent。“java”是“java.util”的parent。根(root)位于继承级别的最上层。
获得根级别实例的方法是:
 Logger loggerRoot = Logger. getRootLogger();
 
获得一个名为com.foo的实例方法是:
 
Logger logger = Logger.getLogger("com.foo");
 
getRootLogger和getLogger分别是Logger的两个静态方法,用于创建Logger的实例。通常,用静态方法getLogger在每一个类里定义一个logger,令logger的名字等于类名的全局名。就像如下代码:
 
import org.apache.log4j.Logger;
import org.apache.log4j.BasicConfigurator;
 
 public class MyApp {
   // Define a static logger variable so that it references the
   // Logger instance named "MyApp".
   static Logger logger = Logger.getLogger(MyApp.class);
 
   public static void main(String[] args) {
      ……
   }
 }
 
2、  分级日志输出。
     log4j为日志定义了从低到高的五个级别,分别是:DEBUG、INFO、WARN、ERROR、FATAL。
如果为一个Logger指定了日志级别,那么这个Logger将屏蔽低于当前级别的输出。
     例如:
          //设置了logger的级别
          logger.setLevel(Level.INFO);
          //不被输出
          logger.debug("Starting search for nearest gas station.");
          //将被输出的log
          logger.info("Located nearest gas station.");
          logger.warn("Exiting gas station search");
 
3、基于Logger的分层结构,下级的Logger自动继承上级Logger的输出级别。
   在log4j简明手册里面有一个很好的例子:
   // 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");
 
最后,总结Logger的常用方法:
  package org.apache.log4j;
  public class Logger {
    // Creation & retrieval methods:
    public static Logger getRootLogger();
    public static Logger getLogger(String name);
    // printing methods:
    public void debug(Object message);
    public void info(Object message);
    public void warn(Object message);
    public void error(Object message);
    public void fatal(Object message);
    // generic printing method:
    public void log(Level l, Object message);
}
 

二、介绍Appender

Appender定义了日志的输出目标。Log4j定义了如下目标:
  • l         console(控制台)
  • l         files(文件)
  • l         GUI components(图形组件)
  • l         remote socket servers(基于socket的服务器)
  • l         JMS(java信息服务)
  • l         NT Event Loggers(Windows的事件日志)
  • l         remote UNIX Syslog daemons(远程UNIX的后台日志服务)。
 
一个logger可以有一个或多个appender。Logger的appender可以从Logger的继承层次中继承。
 

三、介绍layout

layout日志内容的输出格式。Layout通常保存在配置文件中。
%m
输出代码中指定的消息
%p
输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r
输出自应用启动到输出该log信息耗费的毫秒数
%c
输出所属的类目,通常就是所在类的全名
%t
输出产生该日志事件的线程名
%n
输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
%d
输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
%l
输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
 

四、log4j的配置文件

log4j支持支持xml和java properties(key=value)文件两种格式,从内容上两者是等价的。
    下面这段代码进行快速简单的Log4j的设置(不读取配置文件)。配置的结果是加入一个ConsoleAppender到根logger,且根root的日志级别是DEBUG。输出将被采用了"%-4r [%t] %-5p %c %x - %m%n"模式的PatternLayout所格式化。
 
    BasicConfigurator.configure();
 
       执行下面代码将从配置文件中读取log4j的设置,设置的结果取决于配置文件的内容。
 
PropertyConfigurator.configure(args[0]);

       执行下面代码将从XML文件中读取log4j的设置,设置的结果取决于文件的内容。
 
       DOMConfigurator.configure(args[0]);
 

五、拾遗

log4j可以按照一定时间产生日志文件,比如,每天备份一个文件。
log4j可以根据日志文件大小自动产生新日志文件,比如,每100k产生一个新的日志文件。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值