5 строк кода

Как писать приложения на MS Access

Функции для логирования

Комментариев нет

Представляю вам набор функций для логирования:

  • CM_LogMsg() — записать сообщение
  • CM_LogErrForm() — записать сообщение об ошибке в форме
  • CM_LogErr() — записать сообщение об ошибке
  • CM_LogCheckSize() — проверяет размер файла лога. Обычно используется только при запуске приложения.
  • CM_LogGetPathFile() — формирует путь к файлу лога
  • CM_LogErrDAO() — записать ошибки, возникшие при работе с данными. Только при использовании библиотеки DAO.

«Живут» эти функции в модуле: mc_Log.

Текст функций:

' функции для ведения лога в текстовый файл

'-- имя файла лога
Private Const c_imFileLog As String = "Log.txt"

Public Sub CM_LogMsg(ByRef stMsg As String)
' <Скоков С.А.> 2005-04-05

' запись в файл сообщения
' вход:
'       stMsg - строка сообщения

On Error Resume Next '-- нет обработки ошибок

    Dim iNomFile As Integer
    
    '-- получаем свободный номер файла
    iNomFile = FreeFile
    
    Open CM_LogGetPathFile() For Append As #iNomFile
    Print #iNomFile, "m"; Spc(1); Date; Spc(1); Time; Spc(1); stMsg
    Close #iNomFile
End Sub

Public Sub CM_LogErrForm(ByRef frm As Form _
                , ByVal imFunc As String _
                , Optional ErrNom As Variant _
                , Optional ErrDescription As Variant)
' <Скоков С.А.> 2010-03-28
    
    If frm Is Nothing Then
        imFunc = "Nothing::" & imFunc
    Else
        imFunc = frm.Name & "::" & imFunc
    End If
    
    Call CM_LogErr(imFunc, ErrNom, ErrDescription)
End Sub

Public Sub CM_LogErr(ByRef imFunc As String _
                , Optional ErrNom As Variant _
                , Optional ErrDescription As Variant)
' <Скоков С.А.> 2005-04-05

' запись в файл сообщения об ошибке
' вход:
'       imFunc - имя функции
'       ErrNom - номер ошибки. если пропущено, то данные берутся из Err.Nuber
'       ErrDescription - строка сообщения/описания ошибки
'                        если пропущено, то данные берутся из Err.Description

    Dim iNomFile As Integer
    
    '-- обработка входных параметров
    If IsMissing(ErrNom) Then
        ErrNom = Err.Number
    End If
    
    If IsMissing(ErrDescription) Then
        ErrDescription = Err.Description
    End If

On Error Resume Next '-- нет обработки ошибок
    
    '-- получаем свободный номер файла
    iNomFile = FreeFile
    
    Open CM_LogGetPathFile() For Append As #iNomFile
    Print #iNomFile, "e"; Spc(1); Date; Spc(1); Time; Spc(1); _
                    imFunc; Spc(1); "Err: "; ErrNom; Spc(1); ErrDescription
    Close #iNomFile
End Sub

Public Sub CM_LogCheckSize(Optional ByVal lLenMax As Double = 1048576)
' Скоков С.А. 2006-12-07
' проверяет размер файла лога и удаляет если он превышает лимит
' lLenMax - максимальная длинна файла, по умолчанию 1 Мб
    Dim oFSO As Object, oFile As Object
    Dim stPathFile As String
    
    stPathFile = CM_LogGetPathFile()
    
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set oFile = oFSO.GetFile(stPathFile)
    
    If oFile.Size >= lLenMax Then
        Kill stPathFile
    End If
End Sub

Public Function CM_LogGetPathFile() As String
' Скоков С.А. 2006-12-07
' возвращает путь с именем файла лога
    Dim Db As DAO.Database
    
    Set Db = CurrentDb
    CM_LogGetPathFile = Left(Db.Name, Len(Db.Name) - Len(Dir(Db.Name))) + c_imFileLog
End Function

Public Sub CM_LogErrDAO(ByRef imFunc As String, Optional ByRef errs As DAO.Errors = Nothing)
' <Скоков С.А.> 2006-12-07

' запись в файл сообщения об ошибке
' вход:
'       imFunc - имя функции
'       ErrNom - номер ошибки. если пропущено, то данные берутся из Err.Nuber
'       ErrDescription - строка сообщения/описания ошибки
'                        если пропущено, то данные берутся из Err.Description
'

On Error Resume Next '-- нет обработки ошибок
    Dim iNomFile As Integer
    Dim errTek As DAO.Error
    '-- получаем свободный номер файла
    iNomFile = FreeFile
    
    If errs Is Nothing Then
        Set errs = DAO.Errors
    End If
    
    Open mc_Log.CM_LogGetPathFile() For Append As #iNomFile
    For Each errTek In errs
        Print #iNomFile, "e"; Spc(1); Date; Spc(1); Time; Spc(1); _
                        imFunc; Spc(1); errTek.Source; " Err: "; errTek.Number; Spc(1); errTek.Description
    Next errTek
    Close #iNomFile
End Sub

До встречи!

(с) Скоков Сергей

Подписаться на: RSS или e-mail рассылку или добавить в ЖЖ друзья.

Written by Сергей Скоков

Март 14th, 2011 at 12:18 пп

Leave a Reply