2012-01-17 48 views
1

我有一个被定义为方法记录方法...对抛出的异常

公共静态无效myMethod的抛出IOException异常....

我如何使用Logger类的日志引发的异常到一个名为“test.log”的文件。我听说过使用logger.throwing ...但它似乎不工作。任何人都可以给我一步一步的提示如何做到这一点?我只是基本上需要记录抛出的异常(我没有使用try catch)。非常感谢!

+0

你在哪里要登录?到控制台?一份文件?数据库? – Yogu 2012-01-17 17:40:28

+3

你打算如何记录异常而不捕捉任何地方? – 2012-01-17 17:42:08

+0

我想登录到名为“test.log”的文件。 – user941401 2012-01-17 18:53:50

回答

2

您需要添加一个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,默认情况下它会发生标准错误。那里有很多“魔术”,我从来没有完全理解,所以我无法解释所有的错综复杂。

你可以谷歌获取信息,这里有一些我发现的有用的链接。 link1link2

+0

不应该在您的示例中重新抛出异常吗? – 2012-01-17 20:10:14

+0

@daniel kullmann好的,赶上!将修改...并且我接受了您的编辑。 – user949300 2012-01-17 20:12:42

0

尝试使用jcabi-aspects及其@LogException注释:

public class Resource { 
    @LogExceptions 
    public String load(URL url) { 
    return url.openConnection().getContent(); 
    } 
}