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 框架说明的更多相关文章

  1. JAVA SE——集合框架

    1.首先根据业务场景选择哪种集合类型. set(无序,并且不包含重复元素),list(有序,并且允许重复元素),map(key-value,)

  2. Java程序日志:java.util.logging.Logger类

    一.Logger 的级别 比log4j的级别详细,全部定义在java.util.logging.Level里面.各级别按降序排列如下:SEVERE(最高值)WARNINGINFOCONFIGFINEF ...

  3. 5个强大的Java分布式缓存框架推荐

    在开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓存策略考虑进去,或者并没有选择更优的 缓存策略,那么到时候重构起来将会是一个噩梦.本文主要是分享了 ...

  4. java.util.logging.Logger 使用详解

    概述: 第1部分 创建Logger对象 第2部分 日志级别 第3部分 Handler 第4部分 Formatter 第5部分 自定义 第6部分 Logger的层次关系 参考 第1部分 创建Logger ...

  5. java.util.logging.Logger使用详解

    一.创建Logger对象   static Logger getLogger(String name)           为指定子系统查找或创建一个 logger. static Logger ge ...

  6. Java SE 6 新特性: 对脚本语言的支持

    2006 年底,Sun 公司发布了 Java Standard Edition 6(Java SE 6)的最终正式版,代号 Mustang(野马).跟 Tiger(Java SE 5)相比,Musta ...

  7. Java分布式缓存框架

    http://developer.51cto.com/art/201411/457423.htm 在开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓 ...

  8. DynamicMBean(Java SE 6 新特性: JMX 与系统管理)

    Dynamic MBean 是一种在运行时定义其管理接口的 MBean.例如,配置 MBean 可以通过解析 XML 文件来确定它所公开的属性名称和类型. 任何实现 DynamicMBean 接口的类 ...

  9. java之集合类框架的简要知识点:泛型的类型擦除

    这里想说一下在集合框架前需要理解的小知识点,也是个人的肤浅理解,不知道理解的正不正确,请大家多多指教.这里必须谈一下java的泛型,因为它们联系紧密,我们先看一下这几行代码: Class c1 = n ...

随机推荐

  1. Extjs中全键盘操作,回车跳到下一单元格

    listeners: { afterRender: function (thisForm, options) { var els = Ext.DomQuery.select('input[type!= ...

  2. 不可或缺 Windows Native (25) - C++: windows app native, android app native, ios app native

    [源码下载] 不可或缺 Windows Native (25) - C++: windows app native, android app native, ios app native 作者:web ...

  3. Genymotion无法下载OVA文件

    百度 下载Genymotion离线OVA文件(http://pan.baidu.com/s/1jIe5pjC ) 将OVA离线文件放到这个目录下:C:\Users\Administrator\AppD ...

  4. SQL join中on与where区别

    本文导读: 数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户.例如在使用left jion时,on条件是在生成临时表时使用的条件,它不管on中的条件是否 ...

  5. jQuery Layer mobile 弹出层

    layer mobile是为移动设备(手机.平板等webkit内核浏览器/webview)量身定做的弹层支撑,采用Native JavaScript编写,完全独立于PC版的layer,您需要按照场景选 ...

  6. 值得 Web 开发人员收藏的20个 HTML5 实例教程

    当开始学习如何创建 Web 应用程序或网站的时候,最流行的建议之一就是阅读教程,并付诸实践.也有大量的 Web 开发的书,但光有理论没有实际行动是无用的.现在由于网络的发展,我们有很多的工具可以用于创 ...

  7. [DeviceOne开发]-轮播图和多模板的简单示例

    一.简介 这个例子是利用Slideview组件实现循环轮播的效果,同时这个slideview作为一个listview的最上面的一行数, 1. listview有2个模板,一个是以slideview为核 ...

  8. 从零开始,做一个NodeJS博客(二):实现首页-加载文章列表和详情

    标签: NodeJS 0 这个伪系列的第二篇,不过和之前的几篇是同一天写的.三分钟热度貌似还没过. 1 静态资源代理 上一篇,我们是通过判断请求的路径来直接返回结果的.简单粗暴,缺点明显:如果url后 ...

  9. CRM 2013 中业务流程的

    在CRM 2013 中有一个新功能就业务流程,它可以引导用户在既定好的业务规则下操作表单,实现业务之前的衔接.并且让衔接可以视化,能清楚定位到当前的流程在那个节点.我们在配置视图的时候可以将流程阶段放 ...

  10. 如何对sharepoint图片库的文件夹的图片按照时间排序并分页显示

    /// <summary> /// 获取图片库第一层文件夹--根据文件夹名称排序 /// </summary> /// <param name="siteUrl ...