項目

ログの出力

概要

ログの出力は、面倒なので下記のようなクラスを用意して、汎用的に利用しています。
仕様によって、書き換えたり、使う場所を変えたりしています。

Option Compare Database
Option Explicit

'--------------------------------------------------------
' 名称    : logTest
'
' 機能    : ログの出力テスト
'--------------------------------------------------------
Sub logTest()

On Error GoTo errHandler

    'インスタンス生成
    Dim log As New Logger
    
    'ログの出力
    log.writeLog "logのテスト", "出力される内容"
    
    'エラー発生
    Err.Raise 513, "err test", "error!!!!"
    
exitHandler:
    'インスタンスの開放
    Set log = Nothing
    Exit Sub
errHandler:
    'エラー時ログの出力
    log.writeLog "エラー", Err.Number & ":" & Err.Description
    Resume exitHandler
End Sub
クラスモジュール(Logger)の内容
Option Explicit

'*******************************************************************
' 名称  : Logger
' 機能 : mdbと同じ場所に「アプリケーションタイトル_YYYYMMDD.log」の形式でログ出力
'*******************************************************************

'-------------------------------------------------------------------
' メンバ変数定義
'-------------------------------------------------------------------
Private fileNumber As Long
Private filePath   As String

'-------------------------------------------------------------------
' プロパティ
'-------------------------------------------------------------------
Public Property Get path() As String
    path = filePath
End Property

'-------------------------------------------------------------------
' 名 称 : writeLog
' 機 能 : ログ出力
' 引 数 : processing:処理名
'          message   :出力メッセージ
'          append    : True append ディフォルトでアペンド
' 戻 値 : なし
'-------------------------------------------------------------------
Public Sub writeLog(ByVal processing As String, _
                    ByVal message As String, _
                    Optional ByVal append As Boolean = True)

  'ファイルハンドル
  fileNumber = FreeFile
  'オープン
  If append Then
      Open filePath For Append As #fileNumber
  Else
      Open filePath For Output As #fileNumber
  End If
  '出力フォーマット作成
  Dim buf As String
  buf = Format(Now, "yyyy/mm/dd HH:mm:ss") '時間
  buf = buf & " [" & processing & "] "     '処理
  buf = buf & " : " & message              'メッセージ
  '出力
  Print #fileNumber, buf
  'クローズ
  Close #fileNumber

End Sub

'-------------------------------------------------------------------
' 名 称 : Class_Initialize
' 機 能 : コンストラクタ
' 引 数 : なし
' 戻 値 : なし
'-------------------------------------------------------------------
Private Sub Class_Initialize()

  'インスタンス生成時ログファイルのパスを設定する
  Dim appPath  As String
  Dim appTitle As String

  appPath = CurrentProject.path
  appTitle = CurrentProject.Name & "_" & Format(Date, "yyyymmdd")
  
  If Right$(appPath, 1) <> "\" Then appPath = appPath & "\"
 
 '「アプリケーションタイトル_YYYYMMDD.log」
  filePath = appPath & appTitle & ".log"

End Sub