2012-06-07 44 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調用是多餘的,只是漲大的代碼)

相關問題