0

呼び出しスレッドをブロックせずにファイルにログを記録する方法を探しています。それでも、すべてのログ呼び出しを順番に実行する必要があります。

私は何かのようなことを考えていた

void Log(string msg)
{
    ThreadStart ts = new ThreadStart ()
    {

        System.IO.File.AppendAllText("log.txt", msg);
    };
    new Thread(ts).Start();
}

しかし、これはすべてを順番にログに記録することを保証しますか?

また、Log メソッドは、いつでもどのスレッドからでも呼び出せるようにする必要があります。

4

3 に答える 3

2

しかし、これはすべてを順番にログに記録することを保証しますか?

これにより、ランダムな順序でログインされます。Access Denied issue同じファイルへの同時書き込みのために作成されることもあります。

より良い方法は、ログの内部バッファーを保持し、タイマーの個別の単一スレッドで書き出すことです。これにより、アプリがクラッシュした場合にメモリ内のログが失われます (ファイルに書き込まれません)。

于 2013-01-10T17:21:24.243 に答える
2

私たちはこれ:

http://msdn.microsoft.com/en-us/library/dd267265.aspx

その後、順番にキューに押し込みます。コンカレント キューからスレッドをプルさせます。これにより、注文が保持されます。

ログを記録するときは、ログごとに新しいスレッドを開始しないでください。「ロギング」スレッドは 1 つだけです。

于 2013-01-10T17:22:04.587 に答える
0

学習のためにこれを行っていない場合。既存のロギング フレームワークの利用を検討することをお勧めします。独自のログを作成する場合、多くの潜在的な「落とし穴」があり、(ほとんどの場合) 必要なログは既に書き込まれています。

私はそれらをすべて使用したわけではありませんが、log4net が必要なことをまだ行っていない (そして私が書いたよりも優れている) 状況にあったことは一度もないと言えます。

https://stackoverflow.com/questions/126540/what-is-your-net-logging-framework-of-choice

于 2013-01-10T17:31:20.383 に答える