主题:正确使用java.util.logging包
 楼主 admin 发表于2010-10-9 15:27:51
正确使用java.util.logging包

java.util.logging包提供了强大的日志输出功能,正确和有效的使用这些功能需要一些技巧:

1.了解不同的Level,Level.FINE,LEVEL.FINER,LEVEL.FINEST用来调试和跟踪程序,比如打印一些调试信 息,异常等。Level.INFO将打印信息到控制台。

2.使用Logger.isLoggable(Level)方法检测当前的Level,以此来判断是否输出日志,日志也应该遵循需要时才输出的原 则,避免生成大量的调试信息字符串,占用系统内存,影响性能。

3.必要时程序化的打开和关闭日志,例如在开发程序时开启大部分日志,为了查错和调试程序,在程序发布时关闭大部分日志,避免影响客户和影响程序 性能。

4.必要时可以针对一个模块使用唯一的Logger,也就是创建Logger时传入子模块的名字,所有类使用同一个Logger,避免生成太多的 Logger实例。

5.下边是使用日志工具的一段代码:

package javatest;

 

import java.io.IOException;

import java.util.logging.ConsoleHandler;

import java.util.logging.FileHandler;

import java.util.logging.Level;

import java.util.logging.Logger;

import java.util.logging.SimpleFormatter;

 

/**

 */

public class LoggerTest {

    // 构建Logger

    private static Logger log = Logger.getLogger(LoggerTest.class.getName());

 

    /** Creates a new instance of LoggerTest */

    public LoggerTest() {

         // 使用此方法避免生成需要输出的字符串

         if(log.isLoggable(Level.FINE)) {

             log.log(Level.FINE, "start constructing...");

         }

   }

   /**

    * 设置指定包的日志输出级别.

    *

    * @param packageName 指定的包

    * @param fileName 指定日志的输出文件

    * @param level 日志输出级别

    */

   private static void setLogLevel(String packageName, String fileName, Level level) {

        try {

            FileHandler fileHandler = new FileHandler("%h/"+fileName+"%u.log");

            fileHandler.setFormatter(new SimpleFormatter());

            ConsoleHandler consoleHandler = new ConsoleHandler();

            consoleHandler.setLevel(level);

            Logger.getLogger(packageName).addHandler(fileHandler);

            Logger.getLogger(packageName).addHandler(consoleHandler);

            Logger.getLogger(packageName).setLevel(level);

        } catch (SecurityException ex) {

            ex.printStackTrace();

        } catch (IOException ex) {

            ex.printStackTrace();

        }

   }

   public static void main(String[] args) {

        // 启用当前包的全部日志输出

        String packageName = "javatest";

        setLogLevel(packageName, packageName, Level.ALL);

        LoggerTest test = new LoggerTest();

   }

}

 

 1 guaiguai2128 发表于2011-6-10 7:50:43

不错,介绍的很详细。

奇新云平台
切换