独自のLoggerクラス作成する
http://blogs.yahoo.co.jp/dk521123/20151544.htmlで、試しに作ったが、http://www.atmarkit.co.jp/fdotnet/dotnettips/146debugonfile/debugonfile.html
で乗ってた「DefaultTraceListener」を使用した方がよさそうなので、いっちょ作ってみる。 # 本当は、フレームワーク(log4netとか)で、実装したかったがVS2010対応してそうにないので。 # (できた! ↓ )http://blogs.yahoo.co.jp/dk521123/20264938.html
サンプル
独自のLoggerクラス
public class Logger { public const string DEFAULT_DAY_FORMAT_FOR_LOG_FILENAME = "yyyyMMdd"; public const string DEFAULT_DATE_FORMAT = "yyyy/MM/dd HH:mm:ss"; public const string DEFAULT_LOG_FILE_NAME = "logger_{0}.log"; string dateFormate = DEFAULT_DATE_FORMAT; public Logger() : this(string.Format( DEFAULT_LOG_FILE_NAME, System.DateTime.Now.ToString( DEFAULT_DAY_FORMAT_FOR_LOG_FILENAME)) , System.IO.Path.GetDirectoryName( System.Windows.Forms.Application.ExecutablePath) , DEFAULT_DATE_FORMAT) { } public Logger(string logFileName, string path, string date) { System.Diagnostics.DefaultTraceListener dtl = (System.Diagnostics.DefaultTraceListener) System.Diagnostics.Debug.Listeners["Default"]; dtl.LogFileName = System.IO.Path.Combine( path, logFileName); this.dateFormate = date; } public void Write(string message) { System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace(true); string msg = string.Format("{0} [{1}.{2}() : Line {3}] : {4}" , System.DateTime.Now.ToString(this.dateFormate) , stackTrace.GetFrame(1).GetMethod().ReflectedType.FullName , stackTrace.GetFrame(1).GetMethod().Name , stackTrace.GetFrame(1).GetFileLineNumber().ToString() , message ); System.Diagnostics.Debug.WriteLine(msg); } }
呼び出し例
private void button1_Click(object sender, EventArgs e) { Logger log = new Logger(); log.Write("Start"); log.Write("End"); }
出力例:
2010/11/14 22:32:00 [Test.Form1.button1_Click() : Line 0] : Start 2010/11/14 22:32:00 [Test.Form1.button1_Click() : Line 0] : End
問題点
(1) 文字コードはUTF-8であること。詳細は、以下、参照。http://www.atmarkit.co.jp/fdotnet/dotnettips/146debugonfile/debugonfile.html
(2) ソースの行番号がうまく表示してくれないこと(VS2010環境)
=> 『StackTrace(true)』と『GetFileLineNumber()』で解決
参考資料
http://dobon.net/vb/dotnet/programing/tracelisteners.htmlhttp://homepage2.nifty.com/nonnon/SoftSample/CS.NET/SampleTraceLog.html