- import?java.io.IOException; ??
- import?java.io.InputStream; ??
- import?java.util.logging.Logger; ??
- ??
- public?class?LogManager?{ ??
- ??
- ????//?初始化LogManager ??
- ????static?{ ??
- ????????//?读取配置文件 ??
- ????????ClassLoader?cl?=?LogManager.class.getClassLoader(); ??
- ????????InputStream?inputStream?=?null; ??
- ????????if?(cl?!=?null)?{ ??
- ????????????inputStream?=?cl.getResourceAsStream("log.properties"); ??
- ????????}?else?{ ??
- ????????????inputStream?=?ClassLoader ??
- ????????????????????.getSystemResourceAsStream("log.properties"); ??
- ????????} ??
- ????????java.util.logging.LogManager?logManager?=?java.util.logging.LogManager ??
- ????????????????.getLogManager(); ??
- ????????try?{ ??
- ????????????//?重新初始化日志属性并重新读取日志配置。 ??
- ????????????logManager.readConfiguration(inputStream); ??
- ????????}?catch?(SecurityException?e)?{ ??
- ????????????System.err.println(e); ??
- ????????}?catch?(IOException?e)?{ ??
- ????????????System.err.println(e); ??
- ????????} ??
- ????} ??
- ??
- ????/** ?
- ?????*?获取日志对象 ?
- ?????*?@param?clazz ?
- ?????*?@return ?
- ?????*/??
- ????public?static?Logger?getLogger(Class?clazz)?{ ??
- ????????Logger?logger?=?Logger ??
- ????????????????.getLogger(clazz.getName()); ??
- ????????return?logger; ??
- ????} ??
- ??
- }??
import java.io.IOException; import java.io.InputStream; import java.util.logging.Logger; public class LogManager { // 初始化LogManager static { // 读取配置文件 ClassLoader cl = LogManager.class.getClassLoader(); InputStream inputStream = null; if (cl != null) { inputStream = cl.getResourceAsStream("log.properties"); } else { inputStream = ClassLoader .getSystemResourceAsStream("log.properties"); } java.util.logging.LogManager logManager = java.util.logging.LogManager .getLogManager(); try { // 重新初始化日志属性并重新读取日志配置。 logManager.readConfiguration(inputStream); } catch (SecurityException e) { System.err.println(e); } catch (IOException e) { System.err.println(e); } } /** * 获取日志对象 * @param clazz * @return */ public static Logger getLogger(Class clazz) { Logger logger = Logger .getLogger(clazz.getName()); return logger; } }
?
? 2.在需要记录日志的地方,通过LogManager.getLogger()方法得到Logger对象,然后调用其记录日志的方法记录日志。这里,我记录错误堆栈信息是用的 log(Level level, String msg, Throwable thrown) 。
贴出我的properties配置文件内容,其中handlers属性一定别忘了,我就因为缺少这个属性花费了很多时间找原因。
- #Level的五个等级SEVERE(最高值)?、WARNING?、INFO?、CONFIG?、FINE?、FINER?、FINEST(最低值)??。这个不同于log4j ??
- ??
- #为?Handler?指定默认的级别(默认为?Level.INFO)。? ??
- java.util.logging.ConsoleHandler.level=INFO ??
- #?指定要使用的?Formatter?类的名称(默认为?java.util.logging.SimpleFormatter)。? ??
- java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter ??
- ??
- #?为?Handler?指定默认的级别(默认为?Level.ALL)。? ??
- java.util.logging.FileHandler.level=INFO ??
- #?指定要使用的?Formatter?类的名称(默认为?java.util.logging.XMLFormatter)。? ??
- java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter ??
- #?指定要写入到任意文件的近似最大量(以字节为单位)。如果该数为?0,则没有限制(默认为无限制)。? ??
- java.util.logging.FileHandler.limit=1024000??
- #?指定有多少输出文件参与循环(默认为?1)。? ??
- java.util.logging.FileHandler.count=1??
- #?为生成的输出文件名称指定一个模式。有关细节请参见以下内容(默认为?"%h/java%u.log")。? ??
- java.util.logging.FileHandler.pattern=C:/SSLog%u.log ??
- #?指定是否应该将?FileHandler?追加到任何现有文件上(默认为?false)。? ??
- java.util.logging.FileHandler.append=true??
- ??
- ??
- ??
- handlers=?java.util.logging.ConsoleHandler,java.util.logging.FileHandler??
?
这样配置后还有一个缺陷,日志文件累积到指定的大小时,将会被重新创建,也就是之前的日志信息会丢失,但是不设置大小的话会导致单个文件过大。关于这个问题还没有花时间去细究,以下这篇博文应该能解决这一问题。