現在進めているプロジェクトでのロギングには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があるのですが出力される情報がイマイチだったので使わないで実装しました。
まだあまり使ってないのでバグってたりするかもしれません。
コードを修正したらここも修正するということで。
Tags: VB