2013-08-21 63 views
0

我必须对程序进行日志记录,并且发现了类似的代码,但仍然不知道如何对其进行编码。 日志文件的代码:程序的记录(记录)事件

Option Explicit 

Public Enum LogTypeEnum 
ltInfo = 1 
ltWarning = 2 
ltError = 3 
End Enum 

Public Enum LogProgramDomainEnum 
lpdRole = 1 
lpdCinnosti = 2 
End Enum 

Private mWinAdLogCol As New EMWinAdLog.WinAdLogCol 
Private mFrmLog As New EMWinAdLog.WinadLogFrm 

Public Sub WinADLogInit(cfg As EMACTIVEXLib.EMCONFIG, ByVal ProgramID As Integer) 
mWinAdLogCol.Init cfg, ProgramID 

mFrmLog.AddLogType LogTypeEnum.ltInfo, "Info" 
mFrmLog.AddLogType LogTypeEnum.ltWarning, "Warning" 
mFrmLog.AddLogType LogTypeEnum.ltError, "Error" 

mFrmLog.AddProgramDomain LogProgramDomainEnum.lpdRole, "Role" 
mFrmLog.AddProgramDomain LogProgramDomainEnum.lpdCinnosti, "Activity" 

mFrmLog.Init cfg, ProgramID 
End Sub 

Public Sub WriteLog(LogProgramDomain As LogProgramDomainEnum, LogType As 
LogTypeEnum,Description1 As String, Optional Description2 As String = "") 
mWinAdLogCol.xAdd LogProgramDomain, LogType, Description1, Description2 
End Sub 

Public Sub ShowLog() 
mFrmLog.Show 0 
End Sub 

Public Sub Done() 
mFrmLog.Done 
Set mFrmLog = Nothing 
Set mWinAdLogCol = Nothing 
End Sub 

和〔实施例我有一个事件:

 Private Sub cmAdd_Click() 
     Load frmAddrolu 
     frmAddrolu.Show vbModal, Me 
     If frmAddrolu.Nazov <> "" Then 
     Dim LokRola As TRola 
     Set LokRola = Role.xAdd(frmAddrolu.Nazov) 
     ZobrazRoleToLst cmbRole, Role 
     SetCmbItem cmbRole, LokRola.RolaID 
     If cmbRole.ListIndex >= 0 Then 
     ZobrazSkupiny AllSkupiny, RolaProgramPristup, treeSkup, True 
     treeSkup_NodeClick treeSkup.SelectedItem 
     End If 
     End If 
     End Sub 

我只是写例子,因为我不知道该怎么做。 感谢您的示例或解释或您的任何帮助。

+0

没有人帮助的记录? – John

+1

编写一个函数'Log(message as String)',它打开一个文件进行追加,写入日志消息,然后关闭文件。然后在你的代码中使用这个函数来将日志条目添加到你的日志文件中。如果您需要,可以使用更多功能对其进行增强。 – MicSim

回答

1

MicSim是正确的,这并不难。我的基本日志记录Sub下面是随意采取它并使用它或改变它以适应您的特定需求。我在应用程序的.bas文件中使用它。这里还有一些代码可以让你限制文件大小。

Public Sub WriteDebugFile(ByVal DebugString As String, Optional ByRef ShowDateTime As Boolean = True, Optional sAltFileName As Variant, _ 
Optional ByVal lMaxFileSize As Long) 

Dim hFile As Integer 
Dim hTmpFile As Integer 
Dim sFileName As String 
Dim sTmpFile As String * 255 
Dim lfilesize As Long 
Dim sFBuffer As String * 100 
Dim lRtn As Long 

On Error GoTo 0 'turn off error checking 

If IsMissing(sAltFileName) Then 
    sFileName = AppPath() & App.ProductName & "dbg.log" 
Else 
    If InStr(sAltFileName, "\") > 0 Then 'the name appears to have a path 
     sFileName = sAltFileName 
    Else 
     sFileName = AppPath() & sAltFileName 
    End If 
End If 

'check and adjust the file size? lMaxFileSize must be greater than the 1k to reduce file by 
If lMaxFileSize >= Len(sFBuffer) And FileExists(sFileName) = True Then 
    If FileLen(sFileName) > lMaxFileSize Then 
     sFBuffer = Space$(Len(sFBuffer)) 'initialize the buffer 
     lRtn = GetTempFilename(AppPath(), "dbg", 0, sTmpFile) 
     'remove 1k from the top of the file 
     hFile = FreeFile 
     Open Trim$(sFileName) For Binary As hFile Len = Len(sFBuffer) 'the original file 
     DoEvents 
     hTmpFile = FreeFile 
     Open sTmpFile For Binary As hTmpFile Len = Len(sFBuffer) 'the new file 
     Get #hFile, , sFBuffer 
     Do Until EOF(hFile) = True 
      Get #hFile, , sFBuffer 'forget the first len(buffer) 
      If InStr(1, sFBuffer, Chr$(0), vbBinaryCompare) Then 
       Put #hTmpFile, , Left$(sFBuffer, InStr(1, sFBuffer, Chr$(0), vbBinaryCompare) - 1) 
      Else 
       Put #hTmpFile, , sFBuffer 
      End If 
     Loop 
     Close #hFile 
     Close #hTmpFile 
     Kill sFileName 
     Name sTmpFile As sFileName 
    End If 
End If 

'free to continue 
hFile = FreeFile 
Open sFileName For Append As hFile 

If ShowDateTime Then 
    DebugString = "[" & Format$(Date$, "M-D-YYYY") & " " & Format$(Time$, "Hh:Nn:ss") & "]" _ 
    & Chr$(9) & DebugString 
End If 

Print #hFile, DebugString 
Close #hFile 

End Sub 

ShowDateTime,sAltFileName和lMaxFileSize参数是可选的。要使用这种方法,你可以从任何你想写消息到日志的地方调用它。 WriteDebugFile "The code just did something."

或者如果你喜欢使用Call声明,Call WriteDebugFile("The code just did something.")