JavaJava 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

 

 Java 1

 

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进行日志处理并写及对应的岗位。

 

 

眼看篇笔记写的偏袒总结化,这些还是本身经过源码查看得知的,不思戰源码充篇幅。上面给来的链接中有连锁的例子。

 

相关文章