一.JDK Logger
JDK从1.4版本开始有了自己的日志系统,相比log4j slf4j jcl,JDK Logger显得简单明了,它没有像其它几个框架,都想去做门面,它只是简单的做了自己的事情。下一篇文章将详细比较这四个日志以及相互之间的桥接。在此不啰嗦。
二.JDK Logger核心类
- Logger:日志类。
- LogManager:日志管理类,读取配置文件,创建日志,缓存日志都有它完成了。类似于Log4j的LogManager。
- LogRecord:日志信息类。
- 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);
- Formatter:格式化LogRecord。JDK Logging支持两种类型的Formatter:SimpleFormatter和XMLFormatter,默认采用SimpleFormatter,它先打印日期和时间、LoggerName或source ClassName、方法名称,然后换行,在打印日志级别、本地化后的消息,然后换行,打印异常信息。而XMLFormatter实现getHead()、getTail()方法,并且将每条记录写成一条<record></record>记录
-
Handler:实现将日志写入指定目的地,如ConsoleHandler、FileHandler、SocketHandler即对应将日志写入控制台、文件、Socket端口。类似于Log4J中的Appender。
默认JDK Logging实现了StreamHandler,而StreamHandler有三个子类:ConsoleHandler、FileHandler、SocketHandler。StreamHandler支持的配置有:
java.util.logging.StreamHandler.level 设置当前Handler支持的级别,默认为FINE
java.util.logging.StreamHandler.filter 设置当前Handler的Filter,默认为null
java.util.logging.StreamHandler.formatter 设置当前Handler的Formatter类,默认为SimpleFormatter
java.util.logging.StreamHandler.encoding 设置当前Handler的编码方式,默认为null
三.Logger初始化
Logger.getLogger(JavaLoggerTest.class.getName())开始
- LogManager manager = LogManager.getLogManager()。
- LogManager先进入静态初始化块,看系统变量里有没有定义java.util.logging.manager,有就实例化它作为LogManager,没有就创建一个LogManager,并为之设置rootLogger。
- 然后进入getLogManager方法,这里提供了一个用户自定义配置的方法
- 读取系统变量java.util.logging.config.class并实例化,我们可以在这个class的构造函数里做些事情。
- 读取系统变量java.util.logging.config.class定义的配置文件。
- 1 2 都没有的话,读取${java.home}/lib/logging.properties文件作为配置文件。
- reset,Reset the logging configuration, set initializedGlobalHandlers = true
- 读取config,并对属性值实例化,这里我们可以定义一些自己的操作。
- 读取.level,设置全局日志级别。
- 读取结束后就要开始初始化GlobalHandlers了,这个时候把initializedGlobalHandlers设置为false。
- 然后调用这个manager的demandLogger(String name)方法返回一个Logger对象。
- 检查缓存,有直接返回,这个是必然的。
- 没有就实例化一个Logger,然后放到缓存里去。这个时候会做以下事情
- 读取name+".level",设置这个日志的日志级别。
- 读取name+".handlers",为这个日志设置指定的Handler。
- 为此日志设置父日志,把父日志的配置应用到此日志上。
四.logging.properties配置文件
- .level:全局日志级别。
- <name>.level:某个日志的日志级别。
- <handlerName>.level:某个Handler的日志级别。
- handlers:全局Handler设置。
- <name>.handlers:某个日志使用的Handler。
- config:自定义类。
相关推荐
开发语言:Java 框架:ssm 技术:JSP JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 服务器:tomcat7 数据库...
java JDK 源码java JDK 源码java JDK 源码java JDK 源码java JDK 源码java JDK 源码java JDK 源码
开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9
基于SSM的超市订单管理系统源码+项目说明(需要以下运行环境: Java环境: Jdk8或更高版本。 Web容器: 支持Servlet 3.0规范的容器,如Apache Tomcat7。 数据库: MySQL8.0关系型数据库管理系统).zip 基于SSM的超市...
开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9
Java并发包源码分析(JDK1.8):囊括了java.util.concurrent包中大部分类的源码分析,其中涉及automic包,locks包(AbstractQueuedSynchronizer、ReentrantLock、ReentrantReadWriteLock、LockSupport等),queue...
Java同时jdk源码剖析任务控制 Mission Control 是一个开源的 Java 生产时间分析和诊断工具。 目前可以在受支持平台上的 Oracle JDK 和 Eclipse 市场中找到 Mission Control 的构建版本。 有关任务控制的更多信息,请...
jdk 8u60 源码下载: 导入请阅读IMPORT_README Main: sun.misc.Launcher
系统环境:Windows 开发工具:Eclipse Java版本:JDK 1.7 服务器:tomcat 7.0 数据库:MySQL 5.1 系统采用技术:Servlet+Jsp+Jdbc+H-ui+EasyUI+jQuery+Ajax+面向接口编程
jdk8源码的阅读理解 导入idea步骤: 阅读顺序: 大致思路 基本类型的包装类(Character放在最后) String、StringBuffer、StringBuilder、StringJoiner、StringTokenizer(补充正则表达式的知识) CharacterIterator、...
java jdk源码学习 jdk 源码阅读项目
JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具. JDK是学好Java的第一步。不管是你要学习java...
java jdk8 源码 JDK8 Java JDK8 源码学习
jdk源码学习 JavaSourceLearn JDK源码学习 /source文件夹下放置的是JDK源码,删除了/com和/launcher文件夹 因为默认使用的jdk在编译器中打开是只读的,这样做能直接在源码上写注释,比较方便。 要注意将项目SDKs的...
很多java开发的小伙伴都会阅读jdk源码,然而确不知道应该从哪读起。以下为小编整理的通常所需阅读的源码范围。 标题为包名,后面序号为优先级1-4,优先级递减 1、java.lang 1) Object 1 2) String 1 3) ...
对Java开发者来说,对源码的理解程度决定了个人的技术水平,而JDK源码是一切任何其他Java类库 源码的基础,学好JDK,就是拿到一把好剑,在Java的18岁成人宇宙里,所向披靡,割据为王! 本人看了很多的博客和源码文章...
jdk源码学习 项目说明: 本博客是学习过程中搭建的项目,为了融合更多知识点,让博客看起来更加高大上,使用了多个框架组合,有些也是企业级项目中常用的解决方式。不够说实话,还有挺多内容缺少的,比如xss攻击预防...
java jdk1.8源码 yang-java-source jdk1.8源码学习
jdk 1.5源码 之前csdn上有看到 但是明显大小不对了 完整的应该有56M 由于大小限制 分割成4部分上传的