Log4J学习笔记(1)---(转)

原创 2004年07月19日 16:44:00
说实话,除了log4j的功能外,我更喜欢它的logo.
  下面的这篇笔记,主要是"borrow from"Log4J的随机文档"Short introduction to log4j",由Ceki Gülcü 写于March 2002,其它参考文档见文后。

1、log4j已经被移植到C, C++, C#, Perl, Python, Ruby, Eiffel 几种语言。
2、log4j有三种主要的组件记录器,存放器,布局
3、记录器(记录器可不关心log数据存放的事哟)
  log4j允许程序员定义多个记录器,每个记录器有自己的名字,记录器之间通过名字来表明隶属关系(或家族关系)。列如,记录器a.b,与记录器a.b.c之间是父子关系,而记录器a与a.b.c之间是祖先与后代的关系,父子关系是祖先与后代关系的特例。通过这种关系,可以描述不同记录器之间的逻辑关系。
  有一个记录器叫根记录器,它永远存在,且不能通过名字检索或引用,可以通过Logger.getRootLogger()方法取得它,而一般记录器通过Logger.getLogger(String name)方法。下面是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);
}


  记录器还有一个重要的属性,就是级别。(这好理解,就象一个家庭中,成员间存在辈份关系,但不同的成员的身高可能不一样,且身高与辈份无关)程序员可以给不同的记录器赋以不同的级别,如果某个成员没有被明确值,就自动继承最近的一个有级别长辈的级别值。根记录器总有级别值。例如:
记录器名 赋予的级别值 继承的级别值
root Proot Proot
X Px Px
X.Y none Px
X.Y.Z none Px

  程序员可以自由定义级别。级别值之间存在偏序关系,如上面几种级别就有关系DEBUG   每一条要输出的log信息,也有一个级别值。
  前面的Logger类中,就预定义了 DEBUG, INFO, WARN, ERROR ,FATAL几种级别,由于与方法绑定,让人易产生误解,其实这几个方法只不过表明了要记录的log信息的级别。当调用log()方法时,log信息的级别就需要在通过参数明确指定。
  如果一条log信息的级别,大于等于记录器的级别值,那么记录器就会记录它。如果你觉得难以理解,可参考下例。
   // 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");


  有几个有趣的情况,一是当一个记录器实例化后,再一次用相同的名字调用getLogger()会返回对它的引用,这非常有利于用同一个记录器在不同代码或类中记录log信息,另一个是与自然界中祖先先于后代出现不同,一个记录器的祖先可以比后代记录出现的晚,但会自动根据名字之间的关系建立这种家族关系。

4、存放器
  在log4j中,log信息通过存放器输出到目的地。支持的存放器有console, files, GUI components, remote socket servers, JMS, NT Event Loggers, remote UNIX Syslog daemons。通过file存放器,log信息可以被输出到不同的文件中(即不同的目的地)。log信息可被异步存放。
  一个记录器可以有多个存放器,可以通过方法addAppender来增加存放器。一条blog信息如果可被这个记录器处理,则记录器会把这条信息送往每个它所拥有的存放器。
  每个记录器有一个继承开关,其开关决定记录器是/否继承其父记录器的存放器,注意,如果继承则只继承其父记录器,而不考虑更远的祖先的情况。参考下表:

记录器 增加的存放器 继承的存放器 输出的目的地 备注
root A1 not applicable A1 The root logger is anonymous but can be accessed with the Logger.getRootLogger() method. There is no default appender attached to root.
x A-x1, A-x2 TRUE A1, A-x1, A-x2 Appenders of "x" and root.
x.y none TRUE A1, A-x1, A-x2 Appenders of "x" and root.
x.y.z A-xyz1 TRUE A1, A-x1, A-x2, A-xyz1 Appenders in "x.y.z", "x" and root.
security A-sec FALSE A-sec No appender accumulation since the additivity flag is set to false.
security.access none TRUE A-sec Only appenders of "security" because the additivity flag in "security" is set to false.
  
  
5、布局
  布局负责格式化输出的log信息。log4j的PatternLayout可以让程序以类似C语言printf的格式化模板来定义格式。

6、log4j可据程序员制定的标准自动提供一些log信息,这对那类需要频繁log的对象的情况很帮助。对象的自动log,具有继承性。

myBatis学习笔记(1)——快速入门

在项目中使用myBatis 导入jar包 在src下创建配置文件
  • u010837612
  • u010837612
  • 2015年05月12日 11:06
  • 891

1.zabbix学习笔记:zabbix的安装

zabbix的安装为什么需要监控随着互联网公司业务不断增长,硬件规模不断扩大,作为SA我们需要清楚每一台服务器的状态(温度、CPU使用率、内存使用率、磁盘使用率等),如果使用人为的方式将会极大增加工作...
  • linux_player_c
  • linux_player_c
  • 2015年11月13日 14:30
  • 1684

斯坦福机器学习网易公开课笔记1

之前在coursera上看了Andrew Ng的机器学习课程,那个课程比较简明,适合对机器学习有一个整体的印象,但是很多细节的内容和推导都忽略了。现在想要了解机器学习更多,所以开始看Andrew Ng...
  • zhonglj0314
  • zhonglj0314
  • 2017年02月20日 09:57
  • 528

Log4j使用学习记录

这是一篇Log4j使用教程,并不是一篇配置文件详解教程,主要的使用是按照需求来使用,所以随着我的需求增加会不断更新使用方法的.1.环境配置直接导入JAR就可以了,这里使用maven导入 ...
  • u012706811
  • u012706811
  • 2016年05月18日 23:40
  • 4241

TCP-IP学习笔记-- 浅析TCP(1)

TCP的特点 TCP报文格式 TCP可靠数据传输机制数据序号和确认号机制 特点 TCP连接的建立与终止 建立连接三次握手 终止连接四次挥手 TCP的状态转换图 TCP的流量控制 工作原理 TCP拥塞控...
  • Yvonne8_5
  • Yvonne8_5
  • 2016年02月20日 23:27
  • 919

CUDA学习笔记(1)

CUDA从入门到精通(零):写在前面 在老板的要求下,本博主从2012年上高性能计算课程开始接触CUDA编程,随后将该技术应用到了实际项目中,使处理程序加速超过1K,可见基于图形显示...
  • u011534057
  • u011534057
  • 2016年05月06日 20:24
  • 1250

Angularjs 学习笔记(一)基础

1.简介: Angular JS (Angular.JS) 是一组用来开发Web页面的框架、模板以及数据绑定和丰富UI组件。它支持整个开发进程,提供web应用的架构,无需进行手工DOM操作。 Ang...
  • qq_25178609
  • qq_25178609
  • 2016年10月02日 16:13
  • 472

Mule ESB 学习笔记(1)

1. 简介 Mule ESB是一个基于Java的轻量级企业服务总线和集成平台,允许开发人员快速便利地连接多个应用,并支持应用间的数据交换。Mule ESB支持集成现有系统而无论其底层采用何种技术...
  • canlets
  • canlets
  • 2014年06月15日 21:36
  • 988

Mule ESB 学习笔记(2)

6. 配置模式 Mule 3.0版本提供了“pattern”的机制。Pattern总结了实际使用过程中的常见场景,以简化的服务配置方式提供。 6.1 简单服务模式(simple service p...
  • canlets
  • canlets
  • 2014年06月15日 21:50
  • 1162

【机器学习笔记1】Logistic回归总结

Logistic回归总结 作者:洞庭之子 微博:洞庭之子-Bing (2013年11月) PDF下载地址:http://download.csdn.net/detail/lewsn200...
  • achuo
  • achuo
  • 2016年04月15日 11:16
  • 1115
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章: Log4J学习笔记(1)---(转)
举报原因:
原因补充:

(最多只允许输入30个字)