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

Java日志学习五:JDK Logger源码

 
阅读更多

一.JDK Logger

     JDK从1.4版本开始有了自己的日志系统,相比log4j slf4j jcl,JDK Logger显得简单明了,它没有像其它几个框架,都想去做门面,它只是简单的做了自己的事情。下一篇文章将详细比较这四个日志以及相互之间的桥接。在此不啰嗦。

 

二.JDK Logger核心类

  1. Logger:日志类。
  2. LogManager:日志管理类,读取配置文件,创建日志,缓存日志都有它完成了。类似于Log4j的LogManager。
  3. LogRecord:日志信息类。
  4. Level:日志级别。六个单词的国际化资源在sun.util.logging.resources.logging.properties里。
        public static final Level OFF = new Level("OFF",Integer.MAX_VALUE, defaultBundle);
    
         public static final Level SEVERE = new Level("SEVERE",1000, defaultBundle);
    
        public static final Level WARNING = new Level("WARNING", 900, defaultBundle);
    
        public static final Level INFO = new Level("INFO", 800, defaultBundle);
    
        public static final Level CONFIG = new Level("CONFIG", 700, defaultBundle);
    
        public static final Level FINE = new Level("FINE", 500, defaultBundle);
    
        public static final Level FINER = new Level("FINER", 400, defaultBundle);
    
         public static final Level FINEST = new Level("FINEST", 300, defaultBundle);
    
        public static final Level ALL = new Level("ALL", Integer.MIN_VALUE, defaultBundle);
     
  5. Formatter:格式化LogRecord。JDK Logging支持两种类型的FormatterSimpleFormatterXMLFormatter,默认采用SimpleFormatter,它先打印日期和时间、LoggerNamesource ClassName、方法名称,然后换行,在打印日志级别、本地化后的消息,然后换行,打印异常信息。而XMLFormatter实现getHead()getTail()方法,并且将每条记录写成一条<record></record>记录
  6. Handler:实现将日志写入指定目的地,如ConsoleHandlerFileHandlerSocketHandler即对应将日志写入控制台、文件、Socket端口。类似于Log4J中的Appender

    默认JDK Logging实现了StreamHandler,而StreamHandler有三个子类:ConsoleHandlerFileHandlerSocketHandlerStreamHandler支持的配置有:

    java.util.logging.StreamHandler.level 设置当前Handler支持的级别,默认为FINE

    java.util.logging.StreamHandler.filter 设置当前HandlerFilter,默认为null

    java.util.logging.StreamHandler.formatter 设置当前HandlerFormatter类,默认为SimpleFormatter

    java.util.logging.StreamHandler.encoding 设置当前Handler的编码方式,默认为null

三.Logger初始化

     Logger.getLogger(JavaLoggerTest.class.getName())开始

  1. LogManager manager = LogManager.getLogManager()。
      1. LogManager先进入静态初始化块,看系统变量里有没有定义java.util.logging.manager,有就实例化它作为LogManager,没有就创建一个LogManager,并为之设置rootLogger。
      2. 然后进入getLogManager方法,这里提供了一个用户自定义配置的方法
        1. 读取系统变量java.util.logging.config.class并实例化,我们可以在这个class的构造函数里做些事情。
        2. 读取系统变量java.util.logging.config.class定义的配置文件。
        3. 1 2 都没有的话,读取${java.home}/lib/logging.properties文件作为配置文件。
          1. reset,Reset the logging configuration, set initializedGlobalHandlers = true
          2. 读取config,并对属性值实例化,这里我们可以定义一些自己的操作。
          3. 读取.level,设置全局日志级别。
          4. 读取结束后就要开始初始化GlobalHandlers了,这个时候把initializedGlobalHandlers设置为false。
  2. 然后调用这个manager的demandLogger(String name)方法返回一个Logger对象。
    1. 检查缓存,有直接返回,这个是必然的。
    2. 没有就实例化一个Logger,然后放到缓存里去。这个时候会做以下事情
        1. 读取name+".level",设置这个日志的日志级别。
        2. 读取name+".handlers",为这个日志设置指定的Handler。
        3. 为此日志设置父日志,把父日志的配置应用到此日志上。

 

四.logging.properties配置文件

  1.  .level:全局日志级别。
  2. <name>.level:某个日志的日志级别。
  3. <handlerName>.level:某个Handler的日志级别。
  4. handlers:全局Handler设置。
  5. <name>.handlers:某个日志使用的Handler。
  6. config:自定义类。

 

分享到:
评论

相关推荐

    JDK Logger 简介

    标题 "JDK Logger 简介" 涉及到的是Java开发中日志记录的基础知识,特别是使用JDK内置的`java.util.logging`包。这个API为开发者提供了一种简单而灵活的方式来记录应用程序的运行时信息,帮助调试、监控和故障排除。...

    对JDK log日志的扩展

    通过阅读和学习这些代码,开发者可以更好地理解和掌握JDK日志的扩展技术。 总之,扩展JDK日志系统可以帮助我们构建更适合项目需求的日志框架,无论是为了满足特定的输出格式、提高日志处理效率,还是为了与其他日志...

    JDK自带的日志包简单应用

    JDK(Java Development Kit)自带了一个基础的日志框架,名为`java.util.logging`,它提供了灵活的日志处理机制。本篇将深入探讨如何利用JDK自带的日志包进行简单的日志应用。 首先,`java.util.logging.Logger`是...

    elasticsearch6.2.4修改编译源码root用户启动

    找到 if (Natives.definitelyRunningAsRoot()) 代码,将throw new RuntimeException替换为logger.warn,将异常改为警告日志即可。 进入文件夹elasticsearch-6.2.4,执行命令gradlew assemble,编译完成后,进入目录...

    Log4j工程官方源码

    Log4j是Apache组织开发的一款广泛使用的Java日志框架,它的全名是Apache Log4j 2。这个压缩包文件包含的是Log4j的官方源码,对于开发者来说,能够直接导入到Eclipse中进行学习和研究,或者进行二次开发,具有很高的...

    struts2 的类库 commons-logging-1.1 源码

    通过深入学习 Commons Logging 的源码,开发者不仅可以更好地使用 Struts2 提供的日志功能,还能提升对 Java 日志管理的理解,从而在其他项目中更有效地应用日志技术。对于希望提升 Java 开发技能,特别是对框架底层...

    java8源码-example:常见的java知识点代码示例

    日志记录器(Logger)的行为是分等级的。如下表所示: 分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。 Log4j建议只使用四个级别,优先级从高到低分别是 ERROR、WARN、INFO、DEBUG。 通过在这里...

    commons-logging-1.2源码(commons-logging-1.2-src.zip)

    在`src/main/java/org/apache/commons/logging/impl`目录下,可以看到多种具体实现,如`SimpleLog`、`Jdk14Logger`、`Log4jLogger`等。`LogFactory`会根据系统属性或类路径中的配置文件来确定使用哪种实现。 3. **...

    commons-logging-1.0.4源码

    这个版本的源码也包含了不同日志实现的适配器,如` JDK14Logger `, ` Log4JLogger `, 和 ` SimpleLog `。这些适配器让`commons-logging`能够无缝地工作在多种日志框架下。 对于学习Struts2的同学来说,`commons-...

    log4j2.zip

    总结,Apache Log4j 2.13.3作为Java开发中的重要工具,其源码提供了深入理解日志处理机制的机会,同时也展示了如何设计一个高性能、可扩展的日志框架。通过研究源码,开发者可以更好地利用Log4j 2的功能,提升日志...

    MetaModel-dbase-3.4.8.zip

    - **源代码**:gelf4j-master包含了gelf4j库的完整源码,开发者可以查看和学习其实现细节,甚至对其进行定制和扩展。 - **示例**:可能包含了一些示例代码或测试用例,帮助用户了解如何在项目中应用gelf4j。 - **...

    麓山网络整站源码(最新版)

    为了充分利用这套源码,我们需要具备一定的IT技术背景,特别是对Java和Web服务器如Tomcat的熟悉程度。 首先,为了部署和运行包含此源码的Web应用程序,我们需要准备以下软件环境: 1. **下载并安装Eclipse**:...

    jexcelapi_2_6_12.zip

    Java Excel API—用于读取、写入和修改Excel电子表格的Java API JExcelApi Java Excel API是一个成熟的开放源码Java API,允许开发...支持使用Jakarta Commons logging、log4j、JDK 1.4 Logger等进行日志记录 更多...

    Apusic AS的Web应用中调用commons-logging的流程

    在IT行业中,Apache Commons Logging(简称commons-logging)是一个广泛使用的日志抽象层,它允许开发者选择不同的日志实现框架,如Log4j、Java Util Logging(JUL)或Logback。在Apusic AS(一个基于Java的企业级...

    涵盖SpringBoot的AOP、Slf4j日志门面-springboot-in-action.zip

    SpringBoot是目前非常流行的Java开发框架,它简化了Spring应用的初始搭建以及开发过程。本教程将深入探讨SpringBoot中的两个重要概念:AOP(面向切面编程)和Slf4j日志门面。 首先,让我们来理解AOP。AOP在Spring中...

    《程序天下:J2EE整合详解与典型案例》光盘源码

    6.3.2 配置根Logger 6.3.3 指定日志输出位置 6.3.4 指定日志输出格式 6.3.5 指定日志输出优先级 6.3.6 在代码中使用Log4j 6.4 改进Log4j 6.5 小结 第七章 Ant使用指南 7.1 Ant介绍 7.1.1 Ant简介 7.1.2 为什么要使用...

    JavaEye新闻月刊 - 2008年10月 总第8期.pdf

    JDK中的日志系统Logger出现了一些问题,这可能会影响到开发者在生产环境中的使用,社区对此进行了深入讨论,寻找解决方案和工作-around。 1.9 Springside 3.0.3 Stable版发布 Springside是一个基于Spring框架的轻量...

    slf4j-1.6.1.zip

    4. `slf4j-jdk14-1.6.1.jar`:这个绑定库用于将SLF4J与Java内置的日志系统(java.util.logging)集成。 5. `README`或`RELEASE-NOTES`:这些文档通常包含了版本更新的内容、已知问题和解决方法等信息。 6. `...

    slf4J的所有相关jar

    SLF4J(Simple Logging Facade for Java)是Java日志框架的一个接口层,它提供了一个统一的日志API,允许用户在部署时插入所需的日志实现。SLF4J的主要目的是为各种日志框架,如log4j、logback、java.util.logging等...

    java ant中文教程

    - **任务(Task)**:任务是 Ant 中的基本执行单元,例如 `javac` 用于编译Java源码,`jar` 用于打包成JAR,`copy` 用于复制文件等。 - **目标(Target)**:目标是一系列任务的集合,通常代表一个完整的构建步骤...

Global site tag (gtag.js) - Google Analytics