說明:
盡管JAVA類庫和其他工具提供了不少的紀錄程序運行狀態的日志類,我發覺也
不是萬能的,有時需要根據自己調試和跟蹤需要,最好自己也要學會寫日志類來
操作自己的日志,以跟蹤程序的錯誤或其他信息。
下面,我就以我在WEB開發中根據自己的錯誤跟蹤需要寫了個日志類。
package myproject.logs;
import java.text.SimpleDateFormat;
import java.io.RandomAclearcase/" target="_blank" >ccessFile;
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的頁面
名稱了。