ASP.NETでTraceListenerでログをファイル出力する

ASP.NET/VB2008でアプリケーションログを出力するためTextWriterTraceListenerを使用する。

検証環境

web.config
TRACE コンパイラ ディレクティブが true に設定されていない場合、空ファイルができるだけでトレース出力されないので注意!太字の部分を「compilerOptions="/d:Trace=true"」を追加する。




compilerOptions="/d:Trace=true"
type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
warningLevel="4">






App_Code/Log.vb
Singletonパターンを応用したLogクラス。Writeメソッドは「Shared」(静的関数)なのでクラスのインスタンス無しで呼べる。というかコンストラクターが「Private」なのでインスタンスは作れない。

Imports Microsoft.VisualBasic
Imports System.Diagnostics
Imports System.IO

Namespace LogTest

'Singleton Log Class:
Public Class Log

'Singleton log object
Private Shared myLog As Log
Private Shared strLogPath As String

'Log level constant
Public Shared ReadOnly LOG_LVL_INFO As String = "I"
Public Shared ReadOnly LOG_LVL_WARN As String = "W"
Public Shared ReadOnly LOG_LVL_ERR As String = "E"

'*******************
'Private Constructor
'*******************
Private Sub New()
'Set log directory
strLogPath = String.Format("{0}\\{1}.log", ConfigurationManager.AppSettings("DirLog"), DateTime.Now.ToString("yyyyMM"))
End Sub

'*******************
'Static Write Method
'*******************
Public Shared Sub Write(ByVal msg As Object, ByVal strLogLevel As String)

'Create an object if not instantiated
If myLog Is Nothing Then
myLog = New Log()
End If

Dim strLogLine As String
Dim strTimestamp As String
Dim strBranch As String

strTimestamp = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss:fff")
strLogLine = strTimestamp + " " + strLogLevel + " " + msg.ToString()

Using myFile As Stream = File.Open(strLogPath, FileMode.Append)

Trace.Listeners.Add(New TextWriterTraceListener(myFile))
Trace.WriteLine(strLogLine)
Trace.Flush()
Trace.Listeners.Clear()

End Using
End Sub

End Class
End Namespace

test.vb.aspx
使い方: 「Log.Write("")」関数でログを書き込む。

Imports LogTest

Public Class LogTestPage : Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Log.Write("ログ書き込み: 情報", Log.LOG_LVL_INFO)
Log.Write("ログ書き込み: 警告", Log.LOG_LVL_WARN)
Log.Write("ログ書き込み: エラー", Log.LOG_LVL_ERR)
End Sub

End Class