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

本文介绍了如何在Java中自定义日志配置,通过LogManager类读取log.properties文件初始化日志管理器,并展示了配置文件的关键属性,如ConsoleHandler和FileHandler的设置。同时,指出了配置中可能遇到的问题,例如文件大小限制导致的日志覆盖,并提供了进一步解决问题的参考链接。
摘要由CSDN通过智能技术生成
  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  

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值