2012-06-07 29 views
2

我是新来的java,并试图通过示例学习如何记录异常。我发现下面的示例代码在这里:在java中记录异常时,指定文件名和路径的位置?

http://www.kodejava.org/examples/447.html

不过,我看不到指定日志文件的文件名是在哪里。当我在Google上研究问题时,通常人们会参考用于编程java的框架来确定日志文件的存储位置。但是,我没有使用框架。我只是从命令行使用VIM编辑器创建我的java文件。 java文件位于Linux CentOS应用程序服务器上,并从客户端的浏览器中调用。

问题1:是否可以修改下面的示例以包含文件名和日志记录路径?或者,我是否以这个问题为基础?

问题2:即使我登录了异常,它是否仍会传播到客户端供用户查看?希望它会,否则用户不会知道发生了错误。

package org.kodejava.example.util.logging; 

import java.util.logging.Logger; 
import java.util.logging.Level; 
import java.util.Date; 
import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.text.ParseException; 

public class LoggingException { 
private static Logger logger = Logger.getLogger(LoggingException.class.getName()); 

public static void main(String[] args) { 
    DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); 
    df.setLenient(false); 

    try { 
     // 
     // Try to parsing a wrong date. 
     // 
     Date date = df.parse("12/30/1990"); 

     System.out.println("Date = " + date); 
    } catch (ParseException e) { 
     // 
     // Create a Level.SEVERE logging message 
     // 
     if (logger.isLoggable(Level.SEVERE)) { 
      logger.log(Level.SEVERE, "Error parsing date", e); 
     } 
    } 
} 
} 
+0

对于问题2--出于好奇,这是如何从用户的浏览器中调用的?您的代码不会呈现任何浏览器都能理解的HTML ...... –

回答

2

试试这个:

try { 
    FileHandler handler = new FileHandler("myLogFile.log", true); 
    Logger logger = Logger.getLogger(LoggingException.class.getName()); 
    logger.addHandler(handler); 
} catch (IOException e) { 
    logger.log(Level.SEVERE, "Error parsing date", e); 
} 

默认情况下,文件处理程序将覆盖每次日志文件的内容,它被建造。您可能还需要在FileHandler构造函数中附加日志文件,您需要指定true作为第二个参数。

希望这会有所帮助。

编辑:

package org.kodejava.example.util.logging; 

import java.util.logging.Logger; 
import java.util.logging.Level; 
import java.util.Date; 
import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.text.ParseException; 

public class LoggingException { 
private static Logger logger = Logger.getLogger(LoggingException.class.getName()); 

public static void main(String[] args) { 
    DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); 
    df.setLenient(false); 
    FileHandler handler = new FileHandler("myLogFile.log", true); 
    logger.addHandler(handler); 
    try { 
     // 
     // Try to parsing a wrong date. 
     // 
     Date date = df.parse("12/30/1990"); 

     System.out.println("Date = " + date); 
    } catch (ParseException e) { 
     // 
     // Create a Level.SEVERE logging message 
     // 
     if (logger.isLoggable(Level.SEVERE)) { 
      logger.log(Level.SEVERE, "Error parsing date", e); 
     } 
    } 
    } 
} 

这应该工作。我没有测试它。 更有效的方法是创建一个方法来初始化记录器并为其添加处理程序。但我会主要推荐你考虑使用log4j。建立和广泛使用的日志框架很容易。

+0

感谢Paulius,这个代码在上面的例子中被放置在哪里?例如,它是否替换'catch(ParseException e){...}'块中的所有内容?此外,一旦记录,错误将传播给用户来查看它,或者当我声明函数时需要使用'throws Exception'(如果是的话,它是否会改变你的答案中的任何内容)? – ggkmath

+0

我编辑了我的答案。看一看。如果你想在控制台中查看异常,你还需要指定ConsoleHandler。消息将被记录到文件中并进入控制台。 –

1

您需要连接到日志,您可以手动添加的地方在初始化,或者用一个属性文件配置日志记录的FileHandler。

(PS在这个例子中isLoggable调用是多余的,只是涨大的代码)

相关问题