中华网络安全联盟 作者:jacoo 来源:本站原创 时间:2006-4-18
说明: 尽管JAVA类库和其他工具提供了不少的纪录程序运行状态的日志类,我发觉也 不是万能的,有时需要根据自己调试和跟踪需要,最好自己也要学会写日志类来 操作自己的日志,以跟踪程序的错误或其他信息。
下面,我就以我在WEB开发中根据自己的错误跟踪需要写了个日志类。
package myproject.logs;
import java.text.SimpleDateFormat; import java.io.RandomAccessFile; import java.io.*;
public class CreateLogs { private static final String CREATE_LOG_FILE_FOR_WINDOWS = "c:\\javalogs.txt"; private static final String CREATE_LOG_FILE_FOR_LINUX = "/var/javalogs.txt";
public static void createLog(Exception e, String className) { String rootPath = CREATE_LOG_FILE_FOR_WINDOWS; if (File.separator.equals("/")) { rootPath = CREATE_LOG_FILE_FOR_LINUX; } try { java.util.Date date = new java.util.Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String exceptionDate = dateFormat.format(date);
//将异常输出到指定的文件下面 RandomAccessFile raf = new RandomAccessFile(rootPath, "rw"); raf.seek(raf.length()); raf.writeBytes("errorTime is " + exceptionDate + " errorClassName is " + className + "\n errorException is " + e.toString() + "\n"); raf.close(); } catch (Exception e1) { e1.printStackTrace(); } } }
以下以一个访问数据库的方法中来演示这个日志类的使用:
public class Dboperation{ ...//要用到的其他属性和方法 public boolean userIsExist(String strUser) {//判断用户是否存在 boolean isExist = false; DBConnect dbc = null; //DBConnect是一个专门负责连接数据库的类 try { dbc = new DBConnect(); dbc.prepareStatement( "select department from address where username = ?"); dbc.setBytes(1, strUser.getBytes("gb2312")); rs = dbc.executeQuery(); if (rs.next()) { isExist = true; } } catch (Exception e) { CreateLogs.createLog(e,"Dboperation"); } finally { try { if (rs != null) { rs.close(); rs = null; } dbc.close(); } catch (Exception e) { CreateLogs.createLog(e,"Dboperation"); } } return isExist; }
这个日志类也没有特别的,但我觉得方便之处在于,可以准确定位 出现异常的的位置,当出现异常时,我可以很快找到出现错误的地方然后 找出问题的根因并解决掉问题。这个类也可以用在JSP中,这个时候 createLog(Exception e, String className)中的类名就是JSP的页面 名称了。
|