2012-08-07 71 views
1

我開發使用的Servlet/JSP中的演示應用程序日誌和錯誤信息,並通過使用阿帕奇登錄JAR所謂的log4j從http://logging.apache.org/log4j/1.2/關於在web應用程序

我的問題是有關在哪裏使用記錄。任何最佳實踐。?

1 -應該在try/catch中記錄錯誤消息,並且還會拋出異常。看下面的例子?

2 -應該在需要使用System.out.println(「消息」)進行調試或打印信息的地方使用它嗎?

3 -應該在生產中使用它還是僅在開發中使用?

如何在您的應用程序中使用它?

我是對的還是生成無用的消息?

try{ 
      con = ConnectionManager.getConnection(); 
      ps = prepareStatement(con, SQL_DELETE, false, values); 
      int affectedRows = ps.executeUpdate(); 
      if(affectedRows == 0){ 
       log.error("delete: Deleting user failed, no rows affected"); 
       throw new DAOException("Deleting user failed, no rows affected."); 
      }else{ 
       user.setId(null); 
      } 
     }catch(SQLException e){ 
      log.error("delete: " + e.getMessage()); 
      throw new DAOException(e); 
     }finally{ 
      close(con, ps); 
     } 


try{ 
      Class.forName(DRIVER); 

      try{ 
       Class.forName(DRIVER); 
       log.info("Connecting database..."); 
       con = DriverManager.getConnection(URL, USERNAME, PASSWORD); 
       log.info("Database connected!"); 

      }catch(SQLException ex){ 
       throw new RuntimeException("Cannot connect the database!", ex); 
      } 
     }catch(ClassNotFoundException e){ 
      log.error("Closing ResultSet failed: " + e.getMessage()); 
      System.exit(-1); 
     } 

回答

1

記錄儀基本上是用來捕獲調試語句,在日誌文件中的信息或錯誤信息。

理想情況下,您不應該在您的Web應用程序的任何位置使用System.out.println(「消息」),只能使用記錄器,如log4j。

  1. 夾在try-catch塊的所有錯誤消息應被記錄爲

    如果(log.isErrorEnabled()){ log.error( 「錯誤消息」);您可以使用它調試您的應用程序或打印日誌中的一些發展信息 }

  2. 語句可以寫成:

    如果(log.isDebugEnabled()){ log.debug(「調試信息」 ); }

if(log.isInfoEnabled()) { 
    log.info("debug message"); 
} 

一旦你已經在你的代碼中加入上述格式記錄儀, 您可以通過在Log4j配置設置日誌級別被打印在日誌中啓用 - 禁用它們(屬性或XML文件),而無需重新編譯源代碼。

例如

如果登錄LEVE是DEBUG - >調試,信息和錯誤信息將在日誌文件中記錄。

如果日誌級別是INFO - >只有信息和錯誤消息將被記錄在日誌文件中(沒有調試消息)。

如果日誌級別爲ERROR - >只有錯誤消息將被記錄在日誌文件中(沒有深入信息或信息消息)。

理想情況下,在生產中,我們將記錄器級別設置爲ERROR,並將開發記錄器級別設置爲DEBUG或INFO。

Log4j比我上面寫的更加強大和有用。 欲瞭解更多詳情,請參閱Log4j manual

+0

謝謝。我有屬性文件,但無法設置優先級。你可以在這裏粘貼行,在屬性文件中使用的日誌級別請。 – Pirzada 2012-08-08 00:19:09

+1

日誌記錄級別可以使用log4j.properties下列行來設置: #根記錄選項 log4j.rootLogger = INFO,由於輸出 #直接日誌消息到stdout log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out的 log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern =%d {ABSOLUTE}%5P%C {1 }:%L - %m%n這個文件的好例子可以在這裏找到 - (http://www.mkyong.com/logging/log4j-log4j-properties-examples/) – AshwinN 2012-08-08 17:27:07