关于Web应用程序中的日志记录和错误消息

时间:2012-08-07 11:03:28

标签: java-ee servlets logging

我正在使用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);
        }

1 个答案:

答案 0 :(得分:1)

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

理想情况下,您不应在Web应用程序的任何位置使用System.out.println(“message”),只能使用记录器,例如log4j。

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

    if(log.isErrorEnabled()){    log.error(“错误消息”); }

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

    if(log.isDebugEnabled()){    log.debug(“debug message”); }

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

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

    例如,

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

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

    如果日志记录级别为ERROR - >只会在日志文件中记录错误消息(没有深度信息或信息消息)。

    理想情况下,在生产中我们将记录器级别设置为ERROR,并且在开发记录器级别设置为DEBUG或INFO。

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