自力でログファイルを出力するサンプルを作ってみました。今まではlog4netを使用していましたが、
毎回、log4netを使用するための手続きをするのが面倒だったので自作した方が良いと思いました。
log4netを使用したサンプルも載せて置きます。log4netを使用したサンプルは以下の手続きが必要です。
1.log4net.dllをダウンロードする(Webで検索すればすぐに見つかると思います)
2.log4net.dllを参照設定で追加する。
3.アセンブリ情報ファイル(AssemblyInfo.vb)に次の行を追加する。
<Assembly: log4net.Config.XmlConfigurator(Watch:=True)>
4.アプリケーション構成ファイル(app.config)をプロジェクトに追加して編集する。
サンプルソース参照。
5.log4netの宣言をする。
Private Shared ReadOnly Logger As log4net.ILog = log4net.LogManager.GetLogger( _
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)
C#.NET版は ログファイルを出力するサンプル(C#.NET) です。
関連情報:PC起動ログやログインログを出力するサンプル(VB.NET)
★フォームモジュール(Form1.vb) − log4netを使用しないサンプル
Public Class Form1
Private Sub Button1_Click( _
ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Button1.Click
Dim stt As StackTrace = New StackTrace(False)
Dim cls As String = stt.GetFrame(0).GetMethod().ReflectedType.FullName
Dim mth As String = stt.GetFrame(0).GetMethod().Name
Try
WriteTraceLog(cls & "." & mth & "開始")
' ゼロ割り算Exceptionを発生させる
Dim a As Integer = 0
a = a / 0
WriteTraceLog(cls & "." & mth & "終了")
Catch ex As Exception
WriteTraceLog(cls & "." & mth & "でエラーが発生しました", ex)
End Try
End Sub
''' <summary>
''' ログ出力
''' </summary>
''' <param name="msg">メッセージ</param>
''' <param name="ex">Exception(無指定の場合はメッセージのみ出力)</param>
''' <remarks></remarks>
Private Shared Sub WriteTraceLog( _
ByVal msg As String, Optional ByVal ex As Exception = Nothing)
Try
' ログフォルダ名作成
Dim dt As DateTime = Now
Dim logFolder As String = System.AppDomain.CurrentDomain.BaseDirectory & "Log"
' ログフォルダ名作成
System.IO.Directory.CreateDirectory(logFolder)
' ログファイル名作成
Dim logFile As String = logFolder & "\TraceLog" & dt.ToString("dd") & ".log"
' 翌日分のログファイル削除(1ヶ月分のログファイルしか保存しないようにするため)
Dim logNext As String = _
logFolder & "\TraceLog" & dt.AddDays(1).ToString("dd") & ".log"
System.IO.File.Delete(logNext)
' ログ出力文字列作成
Dim logStr As String
logStr = dt.ToString("yyyy/MM/dd HH:mm:ss") & vbTab & msg
If ex Is Nothing = False Then
logStr = logStr & vbCrLf & ex.ToString
End If
' Shift-JISでログ出力
Dim sw As IO.StreamWriter = Nothing
Try
sw = New IO.StreamWriter(logFile, True, _
System.Text.Encoding.GetEncoding("Shift-JIS"))
sw.WriteLine(logStr)
Catch ex2 As Exception
Finally
If sw Is Nothing = False Then sw.Close()
End Try
Catch ex2 As Exception
End Try
End Sub
End Class
★フォームモジュール(Form1.vb) − log4netを使用したサンプル
Public Class Form1
''' <summary>
''' ログ出力
''' </summary>
''' <remarks></remarks>
Private Shared ReadOnly Logger As log4net.ILog = log4net.LogManager.GetLogger( _
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)
Private Sub Button1_Click( _
ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Button1.Click
Dim stt As StackTrace = New StackTrace(False)
Dim cls As String = stt.GetFrame(0).GetMethod().ReflectedType.FullName
Dim mth As String = stt.GetFrame(0).GetMethod().Name
Try
Logger.Info(cls & "." & mth & "開始")
' ゼロ割り算Exceptionを発生させる
Dim a As Integer = 0
a = a / 0
Logger.Info(cls & "." & mth & "終了")
Catch ex As Exception
Logger.Fatal(cls & "." & mth & "でエラーが発生しました", ex)
End Try
End Sub
End Class
★アプリケーション構成ファイル(app.config)
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<appender name="RollingLogFileAppender"
type="log4net.Appender.RollingFileAppender">
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="3" />
<param name="MaximumFileSize" value="10KB" />
<param name="RollingStyle" value="date" />
<param name="StaticLogFileName" value="false" />
<param name="File" value="Log/Log4Net" />
<param name="DatePattern" value='"_"dd".log"' />
<layout type="log4net.Layout.PatternLayout">
<param name="Header" value="[Header] " />
<param name="Footer" value="[Footer] " />
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
</configuration>
|