NonSoft

ログファイルを出力するサンプル(C#.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の宣言をする。
    public static readonly log4net.ILog Logger = log4net.LogManager.GetLogger(
        System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

C#.NET版は ログファイルを出力するサンプル(VB.NET) です。

★フォームモジュール(Form1.cs) − log4netを使用しないサンプル
public partial class Form1 : Form
{
    private void button1_Click(object sender, EventArgs e)
    {
        System.Diagnostics.StackTrace stt = new System.Diagnostics.StackTrace(false);
        String cls = stt.GetFrame(0).GetMethod().ReflectedType.FullName;
        String mth = stt.GetFrame(0).GetMethod().Name;

        try
        {
            WriteTraceLog(cls + "." + mth + "開始");
            // ゼロ割り算Exceptionを発生させる
            int a = 0;
            a = 1 / a;
            WriteTraceLog(cls + "." + mth + "終了");
        }
        catch (Exception ex)
        {
            WriteTraceLog(cls + "." + mth + "でエラーが発生しました", ex);
        }
    }

    /// <summary>
    /// ログ出力
    /// </summary>
    /// <param name="msg">メッセージ</param>
    /// <remarks></remarks>
    private static void WriteTraceLog(String msg)
    {
        WriteTraceLog(msg, null);
    }

    /// <summary>
    /// ログ出力
    /// </summary>
    /// <param name="msg">メッセージ</param>
    /// <param name="ex">Exception(無指定の場合はメッセージのみ出力)</param>
    /// <remarks></remarks>
    private static void WriteTraceLog(String msg, Exception ex)
    {
        try
        {
            // ログフォルダ名作成
            DateTime dt = DateTime.Now;
            String logFolder = System.AppDomain.CurrentDomain.BaseDirectory + "Log";

            // ログフォルダ名作成
            System.IO.Directory.CreateDirectory(logFolder);

            // ログファイル名作成
            String logFile = logFolder + "\\TraceLog" + dt.ToString("dd") + ".log";

            // 翌日分のログファイル削除(1ヶ月分のログファイルしか保存しないようにするため)
            String logNext = logFolder + "\\TraceLog" + dt.AddDays(1).ToString("dd") + ".log";
            System.IO.File.Delete(logNext);

            // ログ出力文字列作成
            String logStr;
            logStr = dt.ToString("yyyy/MM/dd HH:mm:ss") + "\t" + msg;
            if (ex != null)
            {
                logStr = logStr + "\n" + ex.ToString();
            }

            // Shift-JISでログ出力
            System.IO.StreamWriter sw = null;
            try
            {
                sw = new System.IO.StreamWriter(logFile, true, 
                    System.Text.Encoding.GetEncoding("Shift-JIS"));
                sw.WriteLine(logStr);
            }
            catch { }
            finally
            {
                if (sw != null) sw.Close();
            }
        }
        catch { }
    }
}

★フォームモジュール(Form1.cs) − log4netを使用したサンプル
public partial class Form1 : Form
{
    /// <summary>
    /// ログ出力
    /// </summary>
    /// <remarks></remarks>
    public static readonly log4net.ILog Logger = log4net.LogManager.GetLogger(
        System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

    private void button1_Click(object sender, EventArgs e)
    {
        System.Diagnostics.StackTrace stt = new System.Diagnostics.StackTrace(false);
        String cls = stt.GetFrame(0).GetMethod().ReflectedType.FullName;
        String mth = stt.GetFrame(0).GetMethod().Name;

        try
        {
            Logger.Info(cls + "." + mth + "開始");
            // ゼロ割り算Exceptionを発生させる
            int a = 0;
            a = 1 / a;
            Logger.Info(cls + "." + mth + "終了");
        }
        catch (Exception ex)
        {
            Logger.Fatal(cls + "." + mth + "でエラーが発生しました", ex);
        }
    }
}
★アプリケーション構成ファイル(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>