1

我正在使用 Servlet/JSP 开发一个演示应用程序,并使用来自http://logging.apache.org/log4j/1.2/的名为 log4j 的 apache 记录 JAR

我的问题与在哪里使用日志记录有关。任何最佳实践。?

1 -应该在 try/catch 中记录错误消息并抛出异常。看下面的例子?

2 -应该在我们需要使用 System.out.println("message") 进行调试或打印信息的地方使用它吗?

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);
        }
4

1 回答 1

1

记录器主要用于捕获日志文件中的调试语句、信息或错误消息。

理想情况下,您不应在 Web 应用程序的任何地方使用 System.out.println("message"),而应仅使用记录器,例如 log4j。

  1. 在 try-catch 块中捕获的所有错误消息都应记录为

    if(log.isErrorEnabled()) { log.error("错误信息"); }

  2. 用于调试应用程序或在日志中打印一些开发信息的语句可以写成:

    if(log.isDebugEnabled()) { log.debug("调试信息"); }

或者

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

在代码中添加上述格式的记录器后,您可以通过在 Log4j 配置(属性或 XML 文件)中设置日志记录级别来启用或禁用它们在日志中打印,而无需重新编译源代码。

例如,

如果日志记录级别为 DEBUG -> 调试,则信息和错误消息将记录在日志文件中。

如果日志记录级别为 INFO -> 日志文件中将仅记录信息和错误消息(无调试消息)。

如果日志记录级别为 ERROR -> 日志文件中将仅记录错误消息(没有调试或信息消息)。

理想情况下,在生产中我们将记录器级别设置为错误,而在开发中记录器级别设置为调试或信息。

Log4j 比我上面写的更强大和有用。有关更多详细信息,请参阅Log4j 手册

于 2012-08-07T18:52:00.287 回答