我正在使用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);
}
答案 0 :(得分:1)
记录器主要用于捕获日志文件中的调试语句,信息或错误消息。
理想情况下,您不应在Web应用程序的任何位置使用System.out.println(“message”),只能使用记录器,例如log4j。
try-catch块中捕获的所有错误消息都应记录为
if(log.isErrorEnabled()){ log.error(“错误消息”); }
用于调试应用程序或在日志中打印某些开发信息的语句可写为:
if(log.isDebugEnabled()){ log.debug(“debug message”); }
或
if(log.isInfoEnabled()) {
log.info("debug message");
}
在代码中添加上述格式的记录器后, 您可以通过在Log4j配置(属性或XML文件)中设置日志记录级别来启用 - 禁用它们在日志中打印,而无需重新编译源代码。
例如,
如果日志记录级别是DEBUG - >调试,信息和错误消息将记录在日志文件中。
如果日志记录级别为INFO - >只有信息和错误消息将记录在日志文件中(无调试消息)。
如果日志记录级别为ERROR - >只会在日志文件中记录错误消息(没有深度信息或信息消息)。
理想情况下,在生产中我们将记录器级别设置为ERROR,并且在开发记录器级别设置为DEBUG或INFO。
Log4j比我上面写的更强大,更有用。 有关详细信息,请参阅Log4j manual。