log4j异常处理问题

时间:2010-10-28 17:36:35

标签: java exception log4j

我有一个初始化我的log4j的类。这段代码永远不会打印或退出,我不明白为什么。

public class MyLog
{

   private static Logger log;

   static
   {
      log = Logger.getRootLogger();
      try
      {
            PropertyConfigurator.configure("somefileNameWhichDoesNotExist");
      }
      catch(Exception t)
      {
            System.out.println("oops logging cant be set, lets exit");
            System.exit(0);
      }

4 个答案:

答案 0 :(得分:3)

为什么假设文件不存在时会抛出异常?我只是快速浏览了一下API文档,他们没有说明丢失文件的处理方式 - 所以这种条件很可能会被忽略。


编辑:只是阅读你的其他评论,但事实并非如此。

确保静态块实际上正在执行。


编辑:PropertyConfigurator正在捕获异常,并在内部处理它。这就是为什么你没有看到异常。 See the source - lines 370-380

答案 1 :(得分:1)

PropertyConfigurator#configure(String configFilename)不会抛出任何已检查的Exception,因此catch(Exception t)无法捕获任何内容。检查ApiDoc,因为当你想要捕获Exception时,throws-clause中必须有一个声明的Exception。

答案 2 :(得分:0)

可能是configure方法抛出错误吗?

更改您的代码以捕获java.lang.Throwable(http://download.oracle.com/javase/6/docs/api/java/lang/Throwable.html)而不是Exception。

答案 3 :(得分:0)

你能告诉我,找到了问题的答案吗? 这对我来说非常有用。

我的解决方案是:

try
{
    Properties props = new Properties();
    props.load(new FileInputStream(propFilePath));
    PropertyConfigurator.configure(props);
}
catch (FileNotFoundException e)
{
    e.printStackTrace();
}
catch (IOException e)
{
    e.printStackTrace();
}

可能你有更好的吗? 非常感谢!