物理の駅 Physics station by 現役研究者

テクノロジーは共有されてこそ栄える

C# WPFでTraceListenerを使ってみる

初心者なので、使い方間違ってたらご教授ください。

クラスライブラリで以下のようなコードを書く。プロジェクト名も MyLogger とした

using System;
using System.Diagnostics;
using System.IO;

namespace MyLogger
{
    public class MyLogger : TraceListener
    {
        public MyLogger()
        {
            var dirname = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "ProgramName");
            if (!Directory.Exists(dirname))
            {
                Directory.CreateDirectory(dirname);
            }
            LogFileName = Path.Combine(dirname, DateTime.Now.ToString("yyyyMMdd") + ".txt");
        }
        string LogFileName;


        public override void WriteLine(string message)
        {
            throw new NotImplementedException();
        }
        public override void WriteLine(string message, string category)
        {
            File.AppendAllText(LogFileName, string.Format("{0} {1} {2}" + Environment.NewLine,
                DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), category, message));
        }

        public override void Write(string message)
        {
            throw new NotImplementedException();
        }
    }
}

WPFプロジェクトの参照から、 MyLogger を追加する。

WPFプロジェクトの App.config 内の <configuration>内に

  <system.diagnostics>
    <trace autoflush="true" indentsize="4">
      <listeners>
        <add name="dbgListener" type="MyLogger.MyLogger,MyLogger" />
      </listeners>
    </trace>
  </system.diagnostics>

を追加する。

type="MyLogger.MyLogger,MyLogger"type="名前空間.クラス名,DLL名=プロジェクト名" を意味する。

適当な場所で

Trace.WriteLine("message", "category");

という感じで使う。