Java Se: Logging 框架说明
Java Logging
用惯了log4j等日志工具,竟然不知Java还自带了个log工具。今天有空了就来了解一下。
先来看一个简单的例子:
public class SystemTest { private final Logger logger = Logger.getLogger("alias"); @Test public void showSystemProperty() { Properties props = System.getProperties(); Enumeration<Object> keysIter = props.keys(); System.out.println(logger.getName()); while (keysIter.hasMoreElements()) { Object key = keysIter.nextElement(); logger.info(key + " \t\t: " + props.getProperty(key.toString())); } } }
这个例子可以说是Logging的最简单的用法了。这个看起来和Log4J使用没什么差别呀。
此外,在使用log4j时,需要配置一个Log4j.properties,指定Adpater,指定日志的Pattern,那logging中有没有类似的功能呢?log4j支持命名空间的继承,logging是否支持呢?
1、Logging的基本知识
基本的知识网上很多:
1)JDK官方文档
2)http://www.vogella.com/tutorials/Logging/article.html
3)http://en.wikipedia.org/wiki/Java_logging_framework
2、日志环境初始化
所谓的日志环境初始化,其实就是LogManager初始化。通过源码阅读,LogManager初始化的过程是:
1.1通过类加载器,加载LogManager
可以自定义LogManager,自定义的LogManager要继承java.util.logging.LogManager。如果没有自定义的LogManager类,就加载默认的LogManager。
可以通过配置系统属性java.util.manager
1.2通过反射机制创建LogManager对象
1.3创建RootLogger,并从配置文件中读取日志的属性
RootLogger其实是一个Logger的子类。它的name是“”,默认级别是INFO。
并且还要读取配置文件,配置文件可以是一个配置类,也可以是一个属性文件。
下面就单说属性文件这种配置文件。
属性文件的位置是通过系统属性来指定,它的系统属性名是:java.util.logging.config.file
如果没有自定义配置文件,就从JAVA_HOME\lib目录下读取logging.properties文件。
下面可以看看默认的配置:
############################################################
# Default Logging Configuration File
#
# You can use a different file by specifying a filename
# with the java.util.logging.config.file system property.
# For example java -Djava.util.logging.config.file=myfile
############################################################ ############################################################
# Global properties
############################################################ # "handlers" specifies a comma separated list of log Handler
# classes. These handlers will be installed during VM startup.
# Note that these classes must be on the system classpath.
# By default we only configure a ConsoleHandler, which will only
# show messages at the INFO and above levels.
handlers= java.util.logging.ConsoleHandler # To also add the FileHandler, use the following line instead.
#handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler # Default global logging level.
# This specifies which kinds of events are logged across
# all loggers. For any given facility this global level
# can be overriden by a facility specific level
# Note that the ConsoleHandler also has a separate level
# setting to limit messages printed to the console.
.level= INFO ############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################ # default file output is in user's home directory.
java.util.logging.FileHandler.pattern = %h/java%u.log
java.util.logging.FileHandler.limit = 50000
java.util.logging.FileHandler.count = 1
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter # Limit the message that are printed on the console to INFO and above.
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter ############################################################
# Facility specific properties.
# Provides extra control for each logger.
############################################################ # For example, set the com.xyz.foo logger to only log SEVERE
# messages:
com.xyz.foo.level = SEVERE
3、添加Logger对象
可以使用Logger的构造器创建对象,也可以使用Logger.getLogger(name)来创建对象。
添加logger对象时,会根据配置文件来设置日志级别,相关Handler的。
4、记录日志的流程
1) 根据消息内容创建LogRecord对象。
2) 使用Logger的过滤器filter进行过滤。
3)使用与该Logger对象所有相关的Handler进行日志处理并写到相应的位置。
这篇笔记写的偏向总结化,这些都是我通过源码查看得知的,不想戰源码充篇幅。上面给出的链接中有相关的例子。
Java Se: Logging 框架说明的更多相关文章
- JAVA SE——集合框架
1.首先根据业务场景选择哪种集合类型. set(无序,并且不包含重复元素),list(有序,并且允许重复元素),map(key-value,)
- Java程序日志:java.util.logging.Logger类
一.Logger 的级别 比log4j的级别详细,全部定义在java.util.logging.Level里面.各级别按降序排列如下:SEVERE(最高值)WARNINGINFOCONFIGFINEF ...
- 5个强大的Java分布式缓存框架推荐
在开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓存策略考虑进去,或者并没有选择更优的 缓存策略,那么到时候重构起来将会是一个噩梦.本文主要是分享了 ...
- java.util.logging.Logger 使用详解
概述: 第1部分 创建Logger对象 第2部分 日志级别 第3部分 Handler 第4部分 Formatter 第5部分 自定义 第6部分 Logger的层次关系 参考 第1部分 创建Logger ...
- java.util.logging.Logger使用详解
一.创建Logger对象 static Logger getLogger(String name) 为指定子系统查找或创建一个 logger. static Logger ge ...
- Java SE 6 新特性: 对脚本语言的支持
2006 年底,Sun 公司发布了 Java Standard Edition 6(Java SE 6)的最终正式版,代号 Mustang(野马).跟 Tiger(Java SE 5)相比,Musta ...
- Java分布式缓存框架
http://developer.51cto.com/art/201411/457423.htm 在开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓 ...
- DynamicMBean(Java SE 6 新特性: JMX 与系统管理)
Dynamic MBean 是一种在运行时定义其管理接口的 MBean.例如,配置 MBean 可以通过解析 XML 文件来确定它所公开的属性名称和类型. 任何实现 DynamicMBean 接口的类 ...
- java之集合类框架的简要知识点:泛型的类型擦除
这里想说一下在集合框架前需要理解的小知识点,也是个人的肤浅理解,不知道理解的正不正确,请大家多多指教.这里必须谈一下java的泛型,因为它们联系紧密,我们先看一下这几行代码: Class c1 = n ...
随机推荐
- 使用NISI制作.Net程序服务安装包
1.开篇之前先说一说NISI是什么. NSIS(Nullsoft Scriptable Install System)是一个开源的 Windows 系统下安装程序制作程序.它提供了安装.卸载.系统设置 ...
- 不用插件 让Firefox 支持网页翻译
1.进入http://labs.microsofttranslator.com/bookmarklet/ 2.在语言选择框的下拉列表中选择“简体中文” 3.右键点击“翻译”按钮,选择“将此链接加为书签 ...
- Bash脚本实现批量作业并行化
http://jerkwin.github.io/2013/12/14/Bash%E8%84%9A%E6%9C%AC%E5%AE%9E%E7%8E%B0%E6%89%B9%E9%87%8F%E4%BD ...
- 一个奇葩常见的问题 nginx 403 forbidden错误
今天安装dedecms,配置Nginx,然后生成一键生成静态页面,然后就没有然后了,所有栏目页面都显示nginx 403 forbidden. 一般来说nginx 的 403 Forbidden er ...
- HTML 限制文本框只能输入特定字符(比如数字 onkeyup+onafterpaste)
正则表达式1 <td><asp:TextBox ID="TextBox_username" Width="250" runat="s ...
- ASP.NET MVC下使用文件上传
这里我通过使用uploadify组件来实现异步无刷新多文件上传功能. 1.首先下载组件包uploadify,我这里使用的版本是3.1 2.下载后解压,将组件包拷贝到MVC项目中 3. 根目录下添加新 ...
- velocity-tools-beta1.jar与velocity-tools.jar不兼容
今天在升级了某些依赖jar的版本启动一项目后,velocity中的有些定义在common.vm中变量居然变成了null,没能include进来导致,而没升级的环境是ok的,经过反查,最后发现是将vel ...
- I am back
2012年11月13日,博客园最后一篇日志,三年半,i am back.
- 推荐10个适合初学者的 HTML5 入门教程
HTML5 作为下一代网站开发技术,无论你是一个 Web 开发人员或者想探索新的平台的游戏开发者,都值得去研究.借助尖端功能,技术和 API,HTML5 允许你创建响应性.创新性.互动性以及令人惊叹的 ...
- 微软正开发Office Reader和Office Lens
据熟知微软Office计划的消息人士透露,微软目前正开发新Windows 8风格的Office应用程序,该应用程序代号被微软称为Office Reader,而为Windows Phone开发的应用程序 ...