`
coolbi
  • 浏览: 86310 次
  • 性别: Icon_minigender_1
  • 来自: 重庆&南京
社区版块
存档分类
最新评论

(原创连载)LOG4J文档翻译

阅读更多

这是Log4j(版本:log4j-1.2.9)的官方英文文档,打算利用下班时间把它翻译一下,如果有翻译不对的地方,还请各位网友给小弟指出,谢谢大家

Loggers, Appenders and Layouts(记录器,渲染器,样式)

Log4j 有三大组件:Loggers,Appenders and layouts(记录器,渲染器,样式),这三种组件组成在一起使开发人员能够通过日志类型和日志级别来记录日志。并控制日志在运行时显示的格式和显示的位置。

Logger hierarchy (日志层次结构)

任何日记API最主要的优点都是可以控制最简单的System.out.println()显示和不显示,这种实现假定一种空白日志,也就是说,不记录一些日志语句,也就是通过开发者选择的某种标准来记录日志,观察了这种需求后。在以前会我们我们选择Category作为包的核心部分,然而,在log4j 1.2版本以后。Logger 类就已经替代了Category类,但是这些和先前的log4j版本相似。Logger类可以看作是Category类的一个别名。

记录器(Logger)被叫做实体。记录器(Logger)的名字是大小写敏感并且有以下的层次规则:

命名层次

如果一个记录器的名字带有点并且是其它记录器的前缀,那么这个记录器就叫祖先记录器。父记录器是指在一个祖先记录器和子记录器之间不在有其它祖先记录器。

例如,一个叫“com.foo”的记录器是一个“com.foo.Bar”的父记录器,同样地,“java”是一个"java.util"和"java.util.Vector"的祖先。这种命名模式对于大多数程序员来说是熟悉的。

root logger位于所以记录器之上,有二种特性:

1.总是存在

2.不能用名字重新取得

调用Logger.getRootLogger的静态方法得到。其它的记录器用Logger.getLogger静态方法实体化或得到,此方法接收一个想要得到的记录器名字。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);
}

 可以为记录器指定一个级别,一系列可以指定的级别是定义在org.apache.log4j.Level类中的: DEBUG, INFO, WARN, ERROR and FATAL ,你可以通过继承Leverl类来定义自己的级别,但是我们不鼓励你这么做,我们一会要解释一种更好的方案。

如果一个给定的记录器没有指定级别,他将从最进的祖先继承,更正式地:

日志继承层次:

  给定的一个记录器C的通过继承得到的记录级别和第一个不为空的记录器级别相同。 从C开始向上推进一直达到根记录器(root logger)

 

 为了确保所有的记录器都持有一个日志记录级别,那么总是要指定根记录器的日志记录级别。

以下四个表格是通过以上规则列出的各种指定日志级别和继承日志级别

Logger
nameAssigned
levelInherited
level Example 1
root Proot Proot
X none Proot
X.Y none Proot
X.Y.Z none Proot

上面的例子1中,只有根记录器指定了日志级别,它的值是,Proot,将被记录器X,X.Y和X.Y.Z继承

Logger
nameAssigned
levelInherited
level Example 2
root Proot Proot
X Px Px
X.Y Pxy Pxy
X.Y.Z Pxyz Pxyz

在例子2中,所有的记录器被指定了一个日志级别,就没有必要继承了。

Logger
nameAssigned
levelInherited
level Example 3
root Proot Proot
X Px Px
X.Y none Px
X.Y.Z Pxyz Pxyz

在例子3中,根记录器(root),X和X.Y.Z分别指定了记录级别Proot,Px和Pxyz。记录器从X.Y从你记录器X继承日志记录级别

Logger
nameAssigned
levelInherited
level Example 4
root Proot Proot
X Px Px
X.Y none Px
X.Y.Z none Px

在例子4中,根记录器(root)和X记录器分别被指定了记录器Proot和Px。记录器X.Y和X.Y.Z从他们最近的指定了记录级别的父记录器X继承了这个日志记录级别

日志请求(注:即记录日志)调用记录器实例的打印方法,这些打印方法是:debug,info,warn,error,fatal和log。

更精确的说,打印方法决定了日志的记录级别。例如,如果C是一个记录器实例,那么语句 c.info("...")是一个INFO级别的记录请求。

为了能够记录日志,日志请求级别一定要打于或等于记录器级别,否则,日志不能够记录,如果记录器没有指定日志记录级别,它会按层次继承一个日志记录级别。规律总结如下:

基本选定规则:

日志请求级别为P(指定或继承的都可以)日志记录器级别为Q,如果P>=Q则可以记录日志

这是Log4j的内在规则,这种级别是已经定义好了的,标准的级别是这样的:DEBUG<INFO<WARN<ERROR<FATAL

下面是这种规则的一个例子:

   // 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会返回同一个日志对象的引用

例如: 

   Logger x = Logger.getLogger("wombat");
   Logger y = Logger.getLogger("wombat");

x和y引用同一个日志(Logger)对象

因此,当你配置一个记录器后就可以在代码的任何地方引用它,而不必到处传递这个对象引用。Log4j记录器与生物上的父在子之前原理相反,你可以在任何地方配置和创建,事实上,父记录器将找到并连接到他的子孙,即便子孙在父记录器之后创建。

配置Log4j的配置是在应用程序初始化的时候,首选的方式是读取一个配置文件,马上将要讨论。

通过Log4j你可以很方便的用软件的组件来给记录器命名,用和类名相同的记录器名,就可以在各个类中静态的建立一个记录器实例,这是一种直接并易用的方式来定义记录器,这样日志就要按照记录器的名字来生成,这种命名策阅很容易定义日志的起源,然而,这只是一种可行的方法,虽然常用,但是Log4j并不限定开发者定义自己的记录器。开发者可以取自己期望的任何一个记录器。 

然而,通过类来给命名记录器是到现在最好的一种命名策略。

Appenders and Layouts(渲染器和样式)

让用户能够控制显示或不显示日志只是log4j的一部份功能,log4j把日志输出到不同的地方,用log4j的说法,输出地叫做渲染器(Appender),当前的渲染器有:控制台(console),文件(files),图形组件,远程套节字服务器(remote socket server),JMS,NT Event Loggers,和remote UNIX Syslog daemons,也呆以异步记录日志。

可以为一个记录器指定多个Appender

给一个记录器添加一个Appender的方法是addAppender,一次日志请求会输出到记录器所指定的所有Appender以及层次关系中继承的Appender。

 

分享到:
评论

相关推荐

    log4j配置文档log4j配置文档

    log4j配置文档log4j配置文档log4j配置文档log4j配置文档log4j配置文档log4j配置文档log4j配置文档log4j配置文档log4j配置文档log4j配置文档log4j配置文档log4j配置文档

    老生常谈Log4j和Log4j2的区别(推荐)

    下面我们将从配置文件类型、核心JAR包、文件渲染和Log调用四个方面来比较Log4j和Log4j2的区别。 配置文件类型 Log4j通过一个.properties文件作为主配置文件,而Log4j2则弃用了这种方式,采用的是.xml、.json或者....

    log4j文档及使用

    《深入理解log4j:文档与实践》 在Java编程中,日志记录是不可或缺的一部分,它有助于开发者追踪程序运行状态,排查错误,优化性能。Log4j作为一款广泛使用的开源日志框架,因其高效、灵活的特性而备受青睐。本文将...

    Log4J文档.doc

    Log4J文档.doc Log4J文档.doc Log4J文档.doc Log4J文档.doc

    log4j-api-2.17.1-API文档-中文版.zip

    包含翻译后的API文档:log4j-api-2.17.1-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.logging.log4j:log4j-api:2.17.1; 标签:apache、logging、api、log4j、jar包、java、中文文档; 使用方法:...

    若依框架使用的log4j2.16.0,修复log4j漏洞log4j2下载最新log4j2.16.0下载

    Log4j是一个广泛使用的Java日志记录框架,它允许开发者在应用程序中轻松地记录各种级别的日志信息,如DEBUG、INFO、WARN、ERROR等。在2021年底,一个重大的安全漏洞(CVE-2021-44228)被发现在Log4j2的早期版本中,...

    log4j-to-slf4j-2.17.1-API文档-中文版.zip

    包含翻译后的API文档:log4j-to-slf4j-2.17.1-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.logging.log4j:log4j-to-slf4j:2.17.1; 标签:apache、slf4j、logging、log4j、jar包、java、中文文档; ...

    Log4J文档

    使用Log4J进行日志操作

    logging-log4j2-log4j-2.15.0-rc2.zip maven 资源库

    针对Log4j 2 远程代码执行漏洞,需要用到的升级资源包,适用于maven资源库,包括log4j,log4j-core,log4j-api,log4j-1.2-api,log4j-jpa等全套2.15.0 maven资源库jar包。如果是maven本地仓库使用,需要将zip包解压...

    Log4j2学习用到的jar包及apache-log4j-2.19.0-bin.zip

    分别有disruptor-3.3.4.jar(Log4j2异步日志的底层实现)、log4j-api-2.19.0.jar(log4j门面)、log4j-core-2.19.0.jar(log4j实现)、log4j-slf4j-impl-2.19.0.jar(SLF4J与Log4j绑定)、slf4j-api-1.7.30.jar(SLF...

    log4j-api-2.12.1-API文档-中文版.zip

    包含翻译后的API文档:log4j-api-2.12.1-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.logging.log4j:log4j-api:2.12.1; 标签:apache、logging、log4j、api、中文文档、jar包、java; 使用方法:...

    log4j-over-slf4j-1.7.33-API文档-中文版.zip

    包含翻译后的API文档:log4j-over-slf4j-1.7.33-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.slf4j:log4j-over-slf4j:1.7.33; 标签:over、slf4j、log4j、jar包、java、中文文档; 使用方法:解压翻译后的...

    log4j.jar各个版本

    apache-log4j-1.2.15.jar, apache-log4j-extras-1.0.jar, apache-log4j-extras-1.1.jar, apache-log4j.jar, log4j-1.2-api-2.0.2-javadoc.jar, log4j-1.2-api-2.0.2-sources.jar, log4j-1.2-api-2.0.2.jar, log4j-...

    Log4j2简介及与Log4j效率对比

    ### Log4j2简介 Log4j2是Apache软件基金会推出的日志框架,它是Log4j 1.x的重构版本,旨在提供更为高效且灵活的日志解决方案。与Log4j 1.x相比,Log4j2在设计上进行了重大改进,并解决了Logback等其他日志框架中...

    log4j-slf4j-impl-2.17.1-API文档-中英对照版.zip

    包含翻译后的API文档:log4j-slf4j-impl-2.17.1-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.apache.logging.log4j:log4j-slf4j-impl:2.17.1; 标签:apache、logging、log4j、slf4j、impl、中英...

    log4j-to-slf4j-2.12.1-API文档-中文版.zip

    包含翻译后的API文档:log4j-to-slf4j-2.12.1-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.logging.log4j:log4j-to-slf4j:2.12.1; 标签:apache、logging、log4j、slf4j、中文文档、jar包、java; ...

    log4j帮助文档及实例

    本文将深入探讨Log4j的帮助文档及实例,帮助你更好地理解和应用Log4j。** **一、Log4j简介** Log4j是一个开源的日志记录工具,最初由Ceki Gülcü设计。它的主要目标是为Java应用程序提供灵活、高效和可配置的日志...

Global site tag (gtag.js) - Google Analytics