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. 新型编译器将原生代码转换为JavaScript

    导读:Emscripten C/C++到JavaScript项目利用来自LLVM的后端构建起更具速度与针对性优势的编译方案. 在当初刚刚公布时,Emsripten听起来完全像是个冲劲十足的技术笑谈:一 ...

  2. jquery层级原则器(匹配后代元素div)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. mybatis xml 中的特殊符转义字符号和模糊查询

    xml特殊符号转义写法 < < 小于 <= <= 小于或等于 > > 大于 >= >= 大于或等于 <> <> 不等于 & ...

  4. 根据商品名称、价格区间检索商品的SQL语句

    如果名称和价格为空会检索出所有的数据 select * from TblProduct where (@proName='' or chvProName like '%'+@proName+'%') ...

  5. Oracle 数据库基础学习 (五) 多表查询

    多表查询:查询结果需要用到两个或者以上表,此时需要多表连接,产生多表查询 1.内连接(等值连接) 示例:将两个表内容连接显示 select * from dept d, emp e where d.d ...

  6. ANDROID学习书单

    Skip to content PersonalOpen sourceBusinessExplore Sign upSign in PricingBlogSupport   This reposito ...

  7. Rotating Image Slider - 图片旋转切换特效

    非常炫的图片旋转滑动特效,相信会给你留下深刻印象.滑动图像时,我们会稍稍旋转它们并延缓各元素的滑动.滑块的不寻常的形状是由一些预先放置的元素和使用边框创建.另外支持自动播放选项,鼠标滚轮的功能. 在线 ...

  8. JSCapture – 基于 HTML5 实现的屏幕捕捉库

    JSCapture 是用纯 JavaScript 和 HTML5 实现的屏幕捕捉库.它可以让从您的浏览器中截图和记录在桌面的视频.JSCapture 使用 getUserMedia 来实现屏幕捕获.目 ...

  9. css笔记图

    1.css3选择器 2.css3动画 3.flex 4.自适应 5.边距图

  10. swift学习笔记之-高级运算符

    //高级运算符 import UIKit /*高级运算符(Advanced Operators):位运算符.溢出运算符.优先级和结合性.运算符函数.自定义运算符 位运算符: 1.位运算符可以操作数据结 ...