2010-12-08 57 views
3

我通過執行以下代碼創建Java中的記錄:記錄在Java中

 

private static final String logFile = "." + File.separator + "Log Files" + File.separator + "Log_" + Long.toString(System.currentTimeMillis()); 
private static Logger logger = Logger.getLogger("JCS_Logger"); 
static 
{ 
    try 
    { 
     logger.addHandler(new FileHandler(logFile)); 
    } 
    catch (Exception e) 
    { 
     System.err.println("Could not return a static logger"); 
    } 
} 
 

如果我用這個記錄,將其寫入不僅System.err的,而且該文件。最後,我要配置的記錄器,以允許它寫:」

  1. 兩個System.err的和文件
  2. 無論System.err的和文件
  3. 只是System.err的
  4. 不僅僅是文件

我知道調用logger.setLevel(Level.OFF)會關閉所有日誌記錄,但我不確定如何爲上面的列表執行此操作。它是通過Level類完成的嗎?任何想法或建議將不勝感激。編輯: 感謝您的回覆。我使用此代碼解決了這個問題:

 

    /** 
    * If debug should be turned on 
    */ 
    static boolean debug = true; 
    /** 
    * If writing debug to file 
    */ 
    static boolean writeLogToFile = false; 
    /** 
    * If writing debug to System.err 
    */ 
    static boolean writeLogToStdErr = true; 

    /** 
    * Location for the temp file 
    */ 
    private static final String logFile = "." + File.separator + "Log Files" + File.separator + "Log_" + Long.toString(System.currentTimeMillis()); 
    /** 
    * Instance of the logger 
    */ 
    private static Logger logger = Logger.getLogger("JCS_Logger"); 
    /** 
    * Handler for System.err 
    */ 
    private static Handler consoleHandler; 
    /** 
    * Handler for the log file 
    */ 
    private static Handler fileHandler; 

    static 
    { 
     try 
     { //if not debuggin at all   
      if(debug == false) 
      { 
       logger.setLevel(Level.OFF); 
      } 
      //if not writing to the file 
      if(writeLogToFile == true) 
      { 
       fileHandler = new FileHandler(BCApp.getLogFileHandlerPath()); 
       logger.addHandler(fileHandler); 
      } 
      //if not writing to System.err 
      if(writeLogToStdErr == false) 
      { 
       consoleHandler = logger.getParent().getHandlers()[0]; 
       logger.getParent().removeHandler(consoleHandler); 
      } 
     } 
     catch (Exception e) 
     { 
      System.err.println("Could not return a static logger"); 
     } 
    } 
 

感謝您的幫助

回答

2

您可以添加處理程序只對有用的物品,在記錄啓動時間做出選擇;或者,您可以添加所有處理程序,並通過記錄閾值調整每個處理程序。

要調處理程序的日誌記錄的閾值,使用handler.setLevel(...);

需要注意的是啓動時已經配置的默認處理程序。您可能需要以編程方式刪除該處理程序,或將其調整爲根據您希望實施的日誌處理程序「處理」的哪種技術來處理任何內容。

1

請參閱該類的API文檔:Logger (Java Platform SE 6)

您可以通過removeHandler(Handler)方法刪除處理程序,所以如果您只想輸出到控制檯,例如,您可以調用此方法來刪除FileHandler。

還有其他的方法。您可以採取不同的方法,併爲每個處理程序設置過濾器,這會丟棄不應該輸出的消息。也許玩格式化。

+0

謝謝,你的答案同樣有幫助。 – user489041 2010-12-08 22:17:10

0

您甚至可以在不編寫任何代碼的情況下實現所需的配置。操作方法如下: 瀏覽到系統上安裝java的目錄。

  1. 轉到jre/lib(或windows中的jre \ lib)子目錄,並查找文件「logging.properties」。如果它不存在,可以創建它。

  2. 編輯線具有內容 「的處理程序=」 TO

    -For兩者System.err的和文件

    "handlers = java.util.logging.ConsoleHandler, java.util.logging.FileHandler" 
    

    -For既不繫統。ERR和文件

    Simply comment that line by adding # in the beginning of the line. 
    

    - 對於剛剛System.err的

    "handlers = java.util.logging.ConsoleHandler" 
    

    - 對於剛剛文件

    "handlers = java.util.logging.FileHandler" 
    

完成!你很好去開始日誌:)