对抛出的异常
我有一个被定义为方法记录方法...对抛出的异常
公共静态无效myMethod的抛出IOException异常....
我如何使用Logger类的日志引发的异常到一个名为“test.log”的文件。我听说过使用logger.throwing ...但它似乎不工作。任何人都可以给我一步一步的提示如何做到这一点?我只是基本上需要记录抛出的异常(我没有使用try catch)。非常感谢!
您需要添加一个catch子句。以下是使用java.util.logging.Logger的一个开始。请注意,许多项目使用一个更强大和更复杂的Apache记录器。比方说,你有一个类com.myCompany.Foo读取某些文件的东西
通常,在静态字段声明的类的开始,你将有
private static final Logger LOGGER = Logger.getLogger("com.myCompany.Foo");
那么,当你有一个方法抛出异常(这是一个愚蠢的方法!)
int readFirstCharOfFile(File f) throws IOException {
FileReader reader = null;
try {
reader = new FileReader(f);
return reader.read();
}
catch (IOException ioe) {
// You have a lot of possibilities here, but this seems most reasonable
LOGGER.log(Level.SEVERE, ioe.getMessage(), ioe);
// whether you rethrow the Exception "depends" on the contract, but, in our case
// the method declaration says that we do, so we do.
throw ioe;
}
finally {
if (reader != null)
reader.close();
}
}
比较困难的部分是配置记录器写在那里你想要的。 IIRC,默认情况下它会发生标准错误。那里有很多“魔术”,我从来没有完全理解,所以我无法解释所有的错综复杂。
不应该在您的示例中重新抛出异常吗? – 2012-01-17 20:10:14
@daniel kullmann好的,赶上!将修改...并且我接受了您的编辑。 – user949300 2012-01-17 20:12:42
如果你想比user949300给出一个更自动化的方法,你可以看看面向方面编程(AOP),它允许你用的只是一点点的所有方法做异常记录的代码。只需谷歌aspectj log exceptions或java aop log exceptions。
参见问题Audit Java: system to detect exceptions thrown/caught (aop?)
尝试使用jcabi-aspects及其@LogException
注释:
public class Resource {
@LogExceptions
public String load(URL url) {
return url.openConnection().getContent();
}
}
你在哪里要登录?到控制台?一份文件?数据库? – Yogu 2012-01-17 17:40:28
你打算如何记录异常而不捕捉任何地方? – 2012-01-17 17:42:08
我想登录到名为“test.log”的文件。 – user941401 2012-01-17 18:53:50