2011-07-31 2 views
2

MSDNと他のいくつかのサイトで見つかった例に基づいて、さまざまなスレッド間で使用する単純なロギングクラスを作成しました。問題は、ファイルログファイルを作成しますが、実際には何も書き込まないことです(ただし、コンソールに正しく書き込むことはできません)。.NETロギングクラスが書き込みをしない

私のプログラムでは以下のことを行っています。

static void Main(string[] args) 
{ 
    Logger log = Logger.GetInstance(); 
    log.OpenFile("app.log"); 

    log.LogMessage("Starting App..."); 
+2

この問題は解決していませんが、具体的なクラスではなくインターフェイスにログを記録することを強くお勧めします。あるいは、NLogのようなロギングライブラリを使うこともできます。それはセットアップに要する時間がほんのわずかです。なぜなら、ごくわずかな初期作業で多くの柔軟性が得られるからです。 –

+0

log4netやNLogのようなロギングフレームワークの使用を強くお勧めします。 – Zebi

+0

私の場合、非常に単純なログファイルが必要です。代わりにこれらの1つを使用することをお勧めします。 –

答えて

2
writer.WriteLine(dt + message); 
writer.Flush(); 

か、writerがtrueにAutoFlushを設定すると宣言:

writer = new StreamWriter(file, true); 
writer.AutoFlush = true; 

編集:またをあなたに書き込む前lockを使用する必要がありますので、あなたのクラスは、マルチスレッドからアクセスされますので、 StreamWriterインスタンスがスレッドセーフではないため、ストリーム:

private readonly object _writerLocker = new object(); 

lock (_writerLocker) 
{ 
    writer.WriteLine(dt + "ERROR: " + error); 
} 
+0

ありがとうございました! –

+0

@Brettあなたはいつでも歓迎します;) –

1

コメントであなたの質問に答える:代わりにこれらのうちの1つ(Log4Net、NLog)を使用することをお勧めしますか?

  • 既にデバッグされているためです。
  • Jalaalが指しているマルチスレッド書き込みアクセスなどの厄介なバグを避けるためです。
  • ロギングを変更する必要がある日(またはロギングを取り除きたい!)なので、プログラムを再コンパイルする必要はありません。それは単にapp.configの設定の問題です。
  • このようなロギングフレームワークを使用することを学ぶと、他のプロジェクトやコンテキストで非常に簡単に再利用できるようになるため、より高度な要件があります。
  • 使いやすさと使いやすさが実感できたら、プログラムを作成することなく、より強力なログを追加することができます。

私の+1はNLogです。

関連する問題