`
zy19982004
  • 浏览: 663387 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
F6f66edc-1c1a-3859-b76b-a22e740b7aa7
Hadoop学习
浏览量:252313
社区版块
存档分类
最新评论

Java日志学习三:Apache Log4j源码浅析

 
阅读更多

一.Apache Log4j

  1. http://logging.apache.org/log4j/2.x/
  2. 本文只讲初始化Logger的过程。

二.Apache Log4j里的几个核心类

  1. Logger:日志类。getLogger()交给LogManager去实现。
  2. Level:八个级别。 #OFF,FATAL,ERROR,WARN,INFO,DEBUG,TRACE,ALL。
  3. LogManager:Use the LogManager  class to retreive  Logger instances or to operate on the current
     LoggerRepository。
  4. RepositorySelector:该接口只有一个方法LoggerRepository getLoggerRepository()。LogManager有一个RepositorySelector对象。
  5. LoggerRepository:创建和管理Logger。
  6. Hierarchy:实现LoggerRepository, RendererSupport,是最重要的一个数据结构,维护着整个日志树。调用LoggerFactory产生Logger。
  7. LoggerFactory:该接口只有一个方法 Logger makeNewLoggerInstance(String name)。DefaultCategoryFactory实现这个接口,最终就是这里new Logger(name)。
  8. ObjectRenderer:该接口只有一个方法String doRender(Object o)。Log4J中,对传入的message实例,如果是非String类型,会先使用注册的ObjectRender(在LogRepository中查找注册的ObjectRender信息)处理成String后返回,若没有找到相应的ObjectRender,则使用默认的ObjectRender,它只是调用该消息实例的toString()方法。比喻log4j.porperties里的log4j.renderer.com.jyz.study.jdk.logger.User=com.jyz.study.jdk.logger.UserRenderer,UserRenderer就是一个ObjectRender。但是这个东西实际开发中很少用到。
  9. Appender:该接口定义了日志的输出方式,如经常用的两个Appender
    #输出到控制台
    log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
    #输出到DailyRolling文件
    log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender
     

三.Logger初始化

      Logger logger = Logger.getLogger(Log4jTest.class)将发生以下事情。

     LogManager静态代码块里:

  1. 以DEBUG等级创建一个RootLogger,然后以RootLogger为参数创建一个Hierarchy类的实例。
  2. 以Hierarchy为参数创建一个DefaultRepositorySelector类的实例,就是我们上面说的“LogManager有一个RepositorySelector对象。”
  3. 读取配置文件。

     正式进入LogManager.getLogger(name)

  1. 静态代码块完后LogManager.getLogger(name)由getLoggerRepository().getLogger(name)去实现。

  2. getLoggerRepository()会调用上面的DefaultRepositorySelector.getLoggerRepository(),也就是Hierarchy。
  3. Hierarchy.getLogger(name)最终由LoggerFactory.makeNewLoggerInstance(name)实现。

 

     单独说一下配置文件的读取,最终会进入PropertyConfigurator的doConfigure(Properties properties, LoggerRepository hierarchy)方法。

  1. 解析log4j.reset,看hierarchy是否需要重置。
  2. 解析log4j.threshold。Threshold是个全局的过滤器,它将把低于所设置的level的信息过滤不显示出来。
  3. 解析log4j.rootCategory。设置日志级别和初始化所有appender。
  4. 解析og4j.loggerFactory。可以自定义lLoggerFactory类,要实现LoggerFactory接口。
  5. 解析log4j.category.     log4j.logger.     log4j.renderer.。前两者有什么区别?
    #指定com.neusoft包下的所有类的等级为DEBUG,对不同的类输出不同的文件
    log4j.logger.org.apache.commons=ERROR test1appender
    #指定com.jyz包下的所有类的等级为INFO,对不同的类输出不同的文件
    log4j.category.com.jyz=INFO test1appender
    #指定日志输出User对象,使用UserRenderer
    log4j.renderer.com.jyz.study.jdk.logger.User=com.jyz.study.jdk.logger.UserRenderer
     

 

分享到:
评论
1 楼 haaarySun 2016-11-29  
虽然是三年前的帖子,但还是想回复博主,logger是继承了category的,只是在log4j 1.2.17就已过时了,因此category可以看成是logger

相关推荐

    apache-log4j-extras-1.2.17-API文档-中文版.zip

    标签:apache、extras、log4j、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译...

    apache-log4j-2.0-rc1-src

    深入研究“apache-log4j-2.0-rc1-src”源码,你可以学习到如何设计一个高性能的日志系统,理解其内部的事件处理机制,以及如何实现自定义的日志处理器和过滤器。这对于Java开发者来说,无论是优化现有应用的日志性能...

    Java日志学习一:Log4j和commons-logging的关系

    首先,Log4j是由Apache组织开发的一个强大的日志处理库,它提供了丰富的日志级别(如DEBUG、INFO、WARN、ERROR和FATAL),灵活的日志配置,以及多种输出格式。Log4j的核心在于其灵活性,开发者可以通过配置文件改变...

    Apache Log4j2紧急缓解措施.docx

    Apache Log4j2 是一个流行的 Java 日志记录工具,但最近出现了严重的安全漏洞, Apache Log4j2 紧急缓解措施旨在帮助开发者尽快修复该漏洞,避免攻击者的攻击。 一、修改启动脚本 在启动 Java 应用程序时,添加一...

    log4j源码 log4j源码

    Log4j是Apache的一个开源项目,它为Java应用程序提供了一个灵活的日志系统。这个系统能够帮助开发者记录程序运行过程中的各种信息,包括调试、错误、警告等,从而提高软件的可维护性和稳定性。Log4j的源码是公开的,...

    log4j 源码包 日志包 2.11.0

    Log4j,作为Java领域最常用的日志框架之一,其2.11.0版本的发布为开发者提供了更加强大、高效和灵活的日志处理能力。源码包的获取,对于开发者深入理解其工作原理、定制化需求以及性能优化至关重要。本文将围绕Log4j...

    apache-log4j-1.2.16.rar_apache log4j 1.2.16_log4j source code_lo

    Apache Log4j是Java平台上的一个著名日志记录框架,广泛应用于各种Java应用程序中,包括服务器、Web应用、企业级软件等。Log4j 1.2.16是该框架的一个版本,提供了丰富的日志功能,允许开发者灵活地控制日志信息的...

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

    标签:apache、logging、log4j、core、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译...

    apache-log4j-2.3-bin和commons-logging-1.2

    Apache Log4j 2.3 和 Commons Logging 1.2 是两个在Java Web开发中广泛使用的日志处理库。这两个库对于记录应用程序的运行时信息、调试错误和监控系统状态至关重要。 **Apache Log4j 2.3** Log4j 是 Apache 组织...

    apache-log4j-2.17.0-bin.tar.gz

    Apache Log4j是Java平台上的一个著名日志记录框架,广泛应用于各种企业级软件系统中。这个"apache-log4j-2.17.0-bin.tar.gz"文件是一个压缩包,其中包含了Log4j 2.17.0版本的二进制文件,通常包括可执行的JAR文件和...

    Apache Log4j 2 源代码( apache-log4j-2.17.1-src.zip)

    Apache Log4j 2 源代码( apache-log4j-2.17.1-src.zip) 是对 Log4j 的升级,它比其前身 Log4j 1.x 提供了重大改进,并提供了 Logback 中可用的许多改进,同时修复了 Logback 架构中的一些固有问题。修复了安全漏洞...

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

    标签:apache、logging、log4j、slf4j、impl、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和...

    apache-log4j-2.17.2-bin.tar

    Log4j 是 Apache 组织开发的一个广泛使用的Java日志框架,它允许开发者在应用程序中实现灵活的日志记录。此次发布的binaries版本包含了编译后的二进制文件,适用于那些不希望从源码编译但需要快速部署和更新Log4j的...

    Apache Log4j 2 (apache-log4j-2.17.1-bin.zip)

    Apache Log4j 2 (apache-log4j-2.17.1-bin.zip)是对 Log4j 的升级,它比其前身 Log4j 1.x 提供了重大改进,并提供了 Logback 中可用的许多改进,同时修复了 Logback 架构中的一些固有问题。修复了安全漏洞 CVE-...

    Apache Log4j2 远程代码执行漏洞检测工具

    Apache Log4j2 是一个广泛使用的Java日志框架,它为开发者提供了强大的日志记录功能。然而,在2021年12月初,一个严重的安全漏洞(CVE-2021-44228)被公开,这个漏洞被称为"Log4Shell",允许攻击者通过注入恶意的...

    Pro Apache Log4j second edition

    Apache Log4j是一个开源的日志框架,用于Java应用程序的日志记录。它提供了强大的功能来控制日志的输出级别、格式化以及目的地(如控制台、文件等)。Log4j的设计目标是灵活且易于配置,以便开发者能够轻松地定制其...

    apache-log4j-1.2.17源码

    Apache Log4j是Java平台上的一个著名日志记录框架,其1.2.17版本是该框架的一个历史版本。Log4j为开发者提供了一种灵活、高效且可扩展的日志记录解决方案,使得应用程序的调试、监控和问题排查变得更加简单。在深入...

    apache-log4j-2.8.2-bin.tar

    Apache Log4j 是一个广泛使用的Java日志框架,它的版本2.8.2是一个重要的更新,提供了许多功能改进和安全修复。这个压缩包文件“apache-log4j-2.8.2-bin.tar”包含了Log4j 2.8.2的二进制发行版,适用于那些希望快速...

    apache-log4j-2.9.0-src.zip

    Apache Log4j是Java平台上的一个著名日志记录框架,广泛应用于各种企业级软件系统中。这个zip文件"apache-log4j-2.9.0-src.zip"包含了Log4j 2.9.0版本的源代码,允许开发者深入理解其内部工作原理,进行定制化开发或...

    Pro Apache Log4j Second Edition .pdf

    **Apache Log4j**是一款流行的Java日志框架,由Apache软件基金会开发维护。它提供了一种灵活的日志记录机制,允许开发者在应用程序中加入日志记录功能。Log4j具有高度可配置性,支持多种输出格式(如控制台、文件、...

Global site tag (gtag.js) - Google Analytics