user icon

VB.NETのMy.Application.Logをラッピングしたクラス作ってみた

現在進めているプロジェクトでのロギングにはmiyazakiさんに調べてもらったMy.Application.Logを使うことにしました。

が、そのままだとちょいと辛かったのでラッピングしてクラスを作ってみました。

Public Class Log
    Public Shared Sub Write(
        ByVal message As String,
        ByVal traceEventType As String,
        Optional ByVal isShowMsgBox As Boolean = False
    )
        Dim severity As System.Diagnostics.TraceEventType =
            System.Enum.Parse(GetType(System.Diagnostics.TraceEventType), traceEventType)

        My.Application.Log.WriteEntry(My.Computer.Clock.LocalTime.ToString & "> " & message, severity)
        My.Application.Log.TraceSource.Flush()
        '下記表示判定は何パターンか試した結果ですが正しいかの確認は出来ていません。
        If My.Application.Log.TraceSource.Switch.Level > severity Then
            showMsgBox(message, severity, traceEventType, isShowMsgBox)
        End If
    End Sub

    Private Shared Sub showMsgBox(
        ByVal message As String,
        ByVal severity As System.Diagnostics.TraceEventType,
        ByVal title As String,
        Optional ByVal isShowMsgBox As Boolean = False
    )
        If isShowMsgBox Then
            Dim msgBoxButtons As MsgBoxStyle
            Select Case severity
                Case Diagnostics.TraceEventType.Critical, Diagnostics.TraceEventType.Error
                    msgBoxButtons = MsgBoxStyle.Critical
                Case Diagnostics.TraceEventType.Warning
                    msgBoxButtons = MsgBoxStyle.Exclamation
                Case Else
                    msgBoxButtons = MsgBoxStyle.Information
            End Select
            MsgBox(message, msgBoxButtons, title)
        End If
    End Sub

    Public Shared Sub Verbose(
        ByVal message As String,
        Optional ByVal isShowMsgBox As Boolean = False
    )
        Log.Write(message, "Verbose", isShowMsgBox)
    End Sub

    Public Shared Sub Info(
        ByVal message As String,
        Optional ByVal isShowMsgBox As Boolean = False
    )
        Log.Write(message, "Information", isShowMsgBox)
    End Sub

    Public Shared Sub Warn(
        ByVal message As String,
        Optional ByVal isShowMsgBox As Boolean = False
    )
        Log.Write(message, "Warning", isShowMsgBox)
    End Sub

    Public Shared Sub Err(
        ByVal message As String,
        Optional ByVal isShowMsgBox As Boolean = False
    )
        Log.Write(message, "Error", isShowMsgBox)
    End Sub

    Public Shared Sub Exception(
        ByVal ex As Exception,
        ByVal message As String,
        Optional ByVal isShowMsgBox As Boolean = False
    )
        message &= System.Environment.NewLine &
            " [例外内容] " & ex.Message & System.Environment.NewLine &
            " [スタックトレース] " & System.Environment.NewLine & ex.StackTrace
        Log.Err(message, isShowMsgBox)
    End Sub
End Class

Verboseがlog4netのDebugにあたる感じで使えると思います。
メッセージボックスを表示したりも出来ます。

My.Application.Log.には例外用のメソッドWriteExceptionがあるのですが出力される情報がイマイチだったので使わないで実装しました。

まだあまり使ってないのでバグってたりするかもしれません。
コードを修正したらここも修正するということで。

Facebooktwitterlinkedintumblrmail

Tags:

Comments are closed.