问题讨论:使用java.util.logging,每个项目使用自己的logging.properties配置文件

问题讨论:使用java.util.logging,每个项目使用自己的logging.properties配置文件

主题:logging.properties配置文件

详细描述:使用jdk的java.util.logging,项目使用自己的配置文件,而不是默认配置文件(jre/lib/logging.properties)

问题点:

1、LogManager配置文件获取

2、初始化操作的判断

解决方法讨论

1

方法:LogManager通过readConfiguration()读取默认配置文件,则可以MyLogManager继承LogManager,并重写LogManager的readConfiguration()方法:修改配置文件路径。

结论:方法可行,但是太傻

原因:由于java.util.logging类其他类都是使用LogManager,需要重写所有类2

2

方法:使用一个初始化类,初始化LogManager:readConfiguration(aimBin)

结论:方法可行,但是每次调用Logger的日志都需要做初始化判断。十分繁琐

原因:可行原因是LogManager是单例的。

3

方法:重写Logger,并添加LogManager的初始化

结论:可行

代码示例

 

package org.hh.myproj.logmanager;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.LogManager;
import java.util.logging.Logger;

/**
 * 重写Logger类,在该类中添加LogManager配置的初始化操作
 * @author
 *
 */

public class MyLogger extends Logger{
 
 static LogManager logManager ;//= LogManager.getLogManager();
 
 //优先从项目路径下的config/loggging.properties取配置,取不到则使用默认配置
 static{
  if (logManager==null){
   File userDir = new File(System.getProperty("user.dir"));
   if (!userDir.exists()) {
    throw new Error("找不到工作路径!");
   }
   File configFile = null;
   InputStream in = null;
   BufferedInputStream bin = null;
   try{
    configFile = new File(userDir.getPath()+"\\config","logging.properties");
    in = new FileInputStream(configFile);
    bin = new BufferedInputStream(in);
   }catch(Exception e){
    logManager = LogManager.getLogManager();
   }
   
   try {
    if (logManager==null) {
     logManager = LogManager.getLogManager();
     logManager.readConfiguration(bin);
    }
   } catch(Exception e){
   } finally {
       if (in != null) {
        try {
      in.close();
     } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }
       }
   }
  }
  
 }
 
 public static Logger getLogger(String name){
  return Logger.getLogger(name);
 }
 
 
 protected MyLogger(String name, String resourceBundleName) {
  super(name, resourceBundleName);
  // TODO Auto-generated constructor stub
 }

}

结果:从config/logging.properties读取配置,读取不到则使用默认配置

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值