浏览 1846 次
锁定老帖子 主题:jdk logger
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-06-28  

最近看了一下java的Logger类,还是有一点点小心得的,看来jdk源码还是值得学习的:

Logger.java

 

//Level.java  Log级别定义

 

OFF      一个特殊的级别,它可以关闭日记记录

SEVERE   severe级别的的信息应该描述非常重要的可能阻止程序正常执行的事件,应该清楚的描述给最终用户或者系统管理员 [si'viə] 严重的,剧烈的 1000。

WARNING  warning级别的信息应该描述最终用户或者系统管理员感兴趣的信息,或者是指明潜在的错误 900。

INFO     info级别的信息用于记录常规信息,描述最终用户或者系统管理员感兴趣的信息 800。

 

最主要是上面这三个级别,这些都是输出到控制台上面去的。

 

    再来看看LogManager.java类;

    可以看到它有一个static静态代码块,里面寻找java.util.logging.manager配置,如果有的话,则将该类作为LogManager并实例化它,否则,新建一个默认的java.util.logging.LogMangger实例;

    在getLogManager()这个方法中,负责去装载日志配置文件logging.properties中的配置,readConfiguration()。首先是从System.getProperty("java.util.logging.config.class");寻找Config的Class类,方便第三方日志框架进行重写。如果没有的话则System.getProperty("java.util.logging.config.file")寻找。还没有的话,那就使用默认的jre(java.home)目录下的lib目录下的logging.properties文件,里面会进行Logger.setLever(),所以日志级别是可以日志文件里面定义,这就是日志,相信还是比较简单的

/**
     * Reinitialize the logging properties and reread the logging configuration
     * from the given stream, which should be in java.util.Properties format.
     * A PropertyChangeEvent will be fired after the properties are read.
     * <p>
     * Any log level definitions in the new configuration file will be 
     * applied using Logger.setLevel(), if the target Logger exists.
     * 
     * @param ins	stream to read properties from
     * @exception  SecurityException  if a security manager exists and if
     *             the caller does not have LoggingPermission("control").
     * @exception  IOException if there are problems reading from the stream.
     */
    public void readConfiguration(InputStream ins) throws IOException, SecurityException {
	checkAccess();
	reset();

	// Load the properties
	props.load(ins);
	// Instantiate new configuration objects.
	String names[] = parseClassNames("config");

	for (int i = 0; i < names.length; i++) {
	    String word = names[i];
	    try {
		Class clz = ClassLoader.getSystemClassLoader().loadClass(word);
		clz.newInstance();
	    } catch (Exception ex) {
		System.err.println("Can't load config class \"" + word + "\"");
		System.err.println("" + ex);
		// ex.printStackTrace();
	    }
	}

	// Set levels on any pre-existing loggers, based on the new properties.
	setLevelsOnExistingLoggers();

	// Notify any interested parties that our properties have changed.
	changes.firePropertyChange(null, null, null);

	// Note that we need to reinitialize global handles when 
   	// they are first referenced.
	synchronized (this) {
	    initializedGlobalHandlers = false;
	}
    }
 

    参考文档:

http://dollyn.iteye.com/blog/539922

论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics