NonSoft

ログファイルを出力するサンプル(VB.NET)


 サンプル(ソース/コード)
自力でログファイルを出力するサンプルを作ってみました。今までは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]&#13;&#10;" />
        <param name="Footer" value="[Footer]&#13;&#10;" />
        <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
      </layout>
    </appender>

    <root>
      <level value="INFO" />
      <appender-ref ref="RollingLogFileAppender" />
    </root>
  </log4net>
</configuration>