2013-11-01 54 views
0

我試圖找到一種優雅的方式,從我的Java應用程序中刪除的代碼行額外輸出到控制檯並登錄一個命令? Java的

我的代碼單獨的線是輸出到控制檯和日誌文件象下面這樣:

catch (SQLException e) 
      { 
       e.printStackTrace(); 
       System.out.println("The Database connection failed to open check username/password and connection url are valid."); 
       logger.info("The Database connection failed to open check username/password and connection url are valid."); 
       end(2); 
      } 

我想知道是否有方法使用stdout在控制檯和日誌文件中激發它。

我認爲做一個功能,可以做到這一點,但它會太複雜決定水平,是否輸出到控制檯或不。

有沒有什麼快速和聰明的方法來實現我想要做的事情。

我想你可以說,一些額外的代碼行會損害我的程序的功能,只是試圖過度設計它。

+3

爲什麼不直接配置您的記錄,所以,它輸出到控制檯**和**文件? – qqilihq

+0

我正在使用java.util.logging,它是預編譯的 – kaleeway

+0

''java.util.logging'' afaik也提供了配置多個appender的可能性。 – qqilihq

回答

2

您可以隨時使用System.setOut()並提供PrintStream一個子類,做任何你wan't ...

如果這似乎是不必要的工作,只是把它放在一個方法...

// Warning, untested code! 

enum Level {DEBUG, INFO, WARNING, ERROR} 

public static Logger logger; // Whereever you get this one... 

public static void log(Level level, String s) { 
    System.out.println(level.name() + ": " + s); 
    switch (level) { 
     case INFO: 
      logger.info(s); 
      break; 

     // The other levels... 
    } 
} 

就個人而言,我做我自己的記錄(很簡單):

L.i("Testing logging"); 

輸出

[INFO , 12:07:41.455, utill.log.Test.main.10]: Testing logging 

它是可配置的,如果您需要將它重定向到一個文件或其他流,它真的很容易。但我認爲像self4j這樣的日誌框架也可以。

+0

好吧,我猜這意味着我將需要幾個函數,每個級別日誌 – kaleeway

+0

serupticious:嗯,你也可以給級別(枚舉或字符串)作爲參數... – tilpner

+0

serupticious:看看我的編輯。 .. – tilpner

1

你可能想要類似的東西?

import java.io.IOException; 
import java.util.logging.FileHandler; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import java.util.logging.SimpleFormatter; 

import org.junit.Test; 

public class LoggerTest { 
    Logger logger = Logger.getLogger(LoggerTest.class.getSimpleName()); 

    public LoggerTest() { 
     try { 
      FileHandler fh = new FileHandler("test.log"); 
      fh.setFormatter(new SimpleFormatter()); 
      logger.addHandler(fh); 
     } catch (SecurityException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    @Test 
    public void test() { 
     try { 
      throw new Exception("Hoppla"); 
     } catch (Exception e) { 
      logger.log(Level.SEVERE, e.getMessage(), e); 
     } 
    } 

} 

在這裏,你會發現一些更多的信息:http://www.vogella.com/articles/Logging/article.html

+0

謝謝,這是一個很好的代碼 – kaleeway

+0

沒問題,我很樂意幫助。 –

相關問題