我有一个初始化我的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);
}
答案 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();
}
可能你有更好的吗? 非常感谢!