【C#】ちょっとログファイル出力したいぐらいならこんな風に

コンソールに出力する要領でcatchしたエラー内容とスタックトレースをログファイルに出力できたらいいな~と思って作ったのを忘れないようにメモ。
Cドライブ直下にerrorlog20170101.txtとして作るならこんな感じ。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
 *  エラー調査用ログ出力
 *  @param ex catchしたエラー内容
 */
static public void OutputErrLog(Exception ex)
{
 // 書き込み設定
 System.IO.StreamWriter sw = new StreamWriter(
  "C:\\errorlog_" + DateTime.Now.ToString("yyyyMMdd") + ".txt",   // 出力先ファイル名
  true,                                                           // 追加書き込み
  System.Text.Encoding.GetEncoding("Shift_JIS"));                 // 文字コード
 
 // ログ出力
 Console.SetOut(sw); // 出力先(Outプロパティ)を設定
 Console.WriteLine("[" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + "] message: " + ex.Message);
 Console.WriteLine("[" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + "] stack trace: " + ex.StackTrace);
 Console.WriteLine(ex.StackTrace);
 Console.WriteLine();
 
 // ファイルを閉じる
 sw.Dispose();
}
 
// catchの中に書いて完成!
// try {
//     …
// }catch(Exception ex) {
//     OutputErrLog(ex);
// }
メソッド作らずに、何気ない場所で出したいメッセージ出すだけのデバッグ用のログなら1行でできる。
こっちのほうが使う機会多いかも。
1
System.IO.File.AppendAllText("C:\\log" + DateTime.Now.ToString("yyyyMMdd") + ".txt", "[" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + "] message: 変数i=" + i);