很多种方法,最常用的一是用文本文件或数据库记录,二是调用API函数直接写入系统日志或应用程序日志
公司主营业务:网站制作、成都网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联推出静海免费做网站回馈大家。
缺少运行库
装上.NETframework
和带上引用的插件(工程属性那有个引用页)
吧
.
Public Sub ShowError(strModule As String, strProcedure As String, lngErrorNumber As Long, strErrorDescription As String, showMsg As String)
'
'错误处理中心过程,写数据库日志表或写日志文件
'
'strModule '模块名称
'strProcedure '过程名称
'lngErrorNumber '错误ID号
'strErrorDescription '错误描述
'showMsg '是否显示本过程内错误显示信息(值:"Y" or "N")
'Error表结构(f001 (Date)发生时间, f002 (nvarchar50)模块名称, f003 (nvarchar50)过程名称, f004 (nvarchar50)错误ID号, _
f005 (nvarchar300)错误描述,f006 (nvarchar50)版 本 号, f007 (nvarchar50)用户名称, f008 (nvarchar50)网卡地址
'ErrorCode表结构 f001 (nvarchar20)错误代码, f002 (nvarchar255)错误信息, f003 (numeric9)错误级别
' 级别说明: '10'以下,一般错误,不影响操作
' '11-20',严重错误,不能操作,程序执行退出
On Error GoTo ErrorHandle
Dim strMessage As String
Dim strCaption As String
Dim sVer As String
Dim intLogFile As Integer
Dim Res As New ADODB.Recordset
Dim ResErrorCode As New ADODB.Recordset
Dim strSQL As String
'对应错误号,从ErrorCode表中找到对应的错误信息,0-1000 错误号保留给VB
DBOpen ResErrorCode, "select * from errorcode where f001='" lngErrorNumber "'"
If Not (ResErrorCode.EOF Or ResErrorCode.BOF) Then
strMessage = ResErrorCode.Fields("f002")
If ResErrorCode.Fields("f003") 10 Then
MsgBox "产生一个严重错误,可能影响到系统的可操作性,请立即联系本系统开发人员!", vbCritical, "严重错误"
End If
End If
'写错误入文件----------------------------
intLogFile = FreeFile
Open App.Path "\" strIni.LogFile For Append As #intLogFile
Print #intLogFile, "***错误"; VBA.Now "*** " "Version:" _
str$(App.Major) "." str$(App.Minor) "." Format(App.Revision, "0000")
Print #intLogFile, "Error: " lngErrorNumber
Print #intLogFile, "Description: " strErrorDescription
Print #intLogFile, "Module: " strModule
Print #intLogFile, "Procedure: " strProcedure
Print #intLogFile, ""
Close #intLogFile
If Len(strMessage) 2 Then strErrorDescription = strMessage
strMessage = "错误: " "(" lngErrorNumber ")" strErrorDescription vbCrLf vbCrLf _
"模块:" strModule "; 过程:" strProcedure
sVer = Trim(str$(App.Major) "." str$(App.Minor) "." _
Format(App.Revision, "0000"))
strCaption = "错误 Version: " sVer
'写错误入数据库表--------------------------
strSQL = "insert into error(f001,f002,f003,f004,f005,f006,f007,f008) values(" _
DateFmtB VBA.Now DateFmtE "," _
IIf(Len(Trim(strModule)) = 0, "null", "'" strModule "'") "," _
IIf(Len(Trim(strProcedure)) = 0, "null", "'" strProcedure "'") "," _
IIf(Len(Trim(lngErrorNumber)) = 0, "null", "'" lngErrorNumber "'") "," _
IIf(Len(Trim(strErrorDescription)) = 0, "null", "'" Replace(strErrorDescription, "'", "") "'") "," _
IIf(Len(Trim(sVer)) = 0, "null", "'" sVer "'") "," _
IIf(Len(Trim(sUserName)) = 0, "null", "'" sUserName "'") "," _
IIf(Len(Trim(sVer)) = 0, "null", "'" EthernetNO "'") ")"
Cn.Execute strSQL
'是否显示未知错误信息
If Trim(UCase(showMsg)) = "Y" Then MsgBox strMessage, vbCritical, strCaption
PROC_EXIT:
Set Res = Nothing
Set ResErrorCode = Nothing
Exit Sub
ErrorHandle:
Resume Next
在程序目录下生成log目录,用于保存日志文件。
自动在log目录中,生成日志文件,文件命名用年月日定义,如20100119_log.log。
在日志文件中,每行记录一个时间点的运行内容,时间点的精度应该达到毫秒。