当前位置: 代码迷 >> Web前端 >> jdk log自定义配置文件【来钦波写于20110915】
  详细解决方案

jdk log自定义配置文件【来钦波写于20110915】

热度:172   发布时间:2012-09-01 09:33:03.0
jdk log自定义配置文件【回钦波写于20110915】
  1. import?java.io.IOException; ??
  2. import?java.io.InputStream; ??
  3. import?java.util.logging.Logger; ??
  4. ??
  5. public?class?LogManager?{ ??
  6. ??
  7. ????//?初始化LogManager ??
  8. ????static?{ ??
  9. ????????//?读取配置文件 ??
  10. ????????ClassLoader?cl?=?LogManager.class.getClassLoader(); ??
  11. ????????InputStream?inputStream?=?null; ??
  12. ????????if?(cl?!=?null)?{ ??
  13. ????????????inputStream?=?cl.getResourceAsStream("log.properties"); ??
  14. ????????}?else?{ ??
  15. ????????????inputStream?=?ClassLoader ??
  16. ????????????????????.getSystemResourceAsStream("log.properties"); ??
  17. ????????} ??
  18. ????????java.util.logging.LogManager?logManager?=?java.util.logging.LogManager ??
  19. ????????????????.getLogManager(); ??
  20. ????????try?{ ??
  21. ????????????//?重新初始化日志属性并重新读取日志配置。 ??
  22. ????????????logManager.readConfiguration(inputStream); ??
  23. ????????}?catch?(SecurityException?e)?{ ??
  24. ????????????System.err.println(e); ??
  25. ????????}?catch?(IOException?e)?{ ??
  26. ????????????System.err.println(e); ??
  27. ????????} ??
  28. ????} ??
  29. ??
  30. ????/** ?
  31. ?????*?获取日志对象 ?
  32. ?????*?@param?clazz ?
  33. ?????*?@return ?
  34. ?????*/??
  35. ????public?static?Logger?getLogger(Class?clazz)?{ ??
  36. ????????Logger?logger?=?Logger ??
  37. ????????????????.getLogger(clazz.getName()); ??
  38. ????????return?logger; ??
  39. ????} ??
  40. ??
  41. }??
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属性一定别忘了,我就因为缺少这个属性花费了很多时间找原因。

Java代码 复制代码?收藏代码
  1. #Level的五个等级SEVERE(最高值)?、WARNING?、INFO?、CONFIG?、FINE?、FINER?、FINEST(最低值)??。这个不同于log4j ??
  2. ??
  3. #为?Handler?指定默认的级别(默认为?Level.INFO)。? ??
  4. java.util.logging.ConsoleHandler.level=INFO ??
  5. #?指定要使用的?Formatter?类的名称(默认为?java.util.logging.SimpleFormatter)。? ??
  6. java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter ??
  7. ??
  8. #?为?Handler?指定默认的级别(默认为?Level.ALL)。? ??
  9. java.util.logging.FileHandler.level=INFO ??
  10. #?指定要使用的?Formatter?类的名称(默认为?java.util.logging.XMLFormatter)。? ??
  11. java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter ??
  12. #?指定要写入到任意文件的近似最大量(以字节为单位)。如果该数为?0,则没有限制(默认为无限制)。? ??
  13. java.util.logging.FileHandler.limit=1024000??
  14. #?指定有多少输出文件参与循环(默认为?1)。? ??
  15. java.util.logging.FileHandler.count=1??
  16. #?为生成的输出文件名称指定一个模式。有关细节请参见以下内容(默认为?"%h/java%u.log")。? ??
  17. java.util.logging.FileHandler.pattern=C:/SSLog%u.log ??
  18. #?指定是否应该将?FileHandler?追加到任何现有文件上(默认为?false)。? ??
  19. java.util.logging.FileHandler.append=true??
  20. ??
  21. ??
  22. ??
  23. handlers=?java.util.logging.ConsoleHandler,java.util.logging.FileHandler??

?

这样配置后还有一个缺陷,日志文件累积到指定的大小时,将会被重新创建,也就是之前的日志信息会丢失,但是不设置大小的话会导致单个文件过大。关于这个问题还没有花时间去细究,以下这篇博文应该能解决这一问题。

  相关解决方案