TickZoomは、独自の並列化ライブラリと複数のO / Sスレッドを使用して、マルチコアコンピューターをスムーズに利用できる非常に高性能なアプリです。
このアプリは、ユーザーが個別のO/SスレッドからLogAppenderに情報を書き込む必要があるというボトルネックにぶつかります。
FileAppenderはMinimalLock機能を使用して、各スレッドがファイルをロックして書き込み、次のスレッドが書き込むためにファイルを解放できるようにします。
MinimalLockが無効になると、log4netは、ファイルが別のプロセス(スレッド)によってすでにロックされているというエラーを報告します。
log4netがこれを行うためのより良い方法は、FileAppenderへの書き込みを処理する単一のスレッドを持ち、他のスレッドは単にメッセージをキューに追加することです。
このようにして、MinimalLockを無効にして、ロギングのパフォーマンスを大幅に向上させることができます。
さらに、アプリケーションはCPUを集中的に使用する作業を多く行うため、ファイルへの書き込みに別のスレッドを使用することでパフォーマンスが向上し、CPUがI/Oの完了を待機することがなくなります。
問題は、log4netがすでにこの機能を提供しているのかということです。もしそうなら、どのようにしてファイルへのスレッド書き込みを有効にしますか?おそらく、別のより高度なアペンダーはありますか?
そうでない場合は、log4netがすでにプラットフォームにラップされているため、TickZoomコードでこの目的のために別のスレッドとキューを実装することができます。
よろしくお願いいたします。ウェイン
編集:
おかげで、答えはおそらく何らかの方法でlog4netの拡張として独自のソリューションを開発することを示しているようです。そして、log4netがこの種のことを行わないことを明確に示しています。
さらに、重要なイベントの通知や情報のデバッグのために、主に人間が読めるメッセージを対象としたロギングシステムを「悪用」している可能性があることに気づきました。ソフトウェア出力のこの特定の部分は、システムの精度を検証する自動ツールにのみ実際に使用されます。
もちろん、デバッグや警告などの「通常の」方法でlog4netも使用します。
ただし、これらはデバッグログやユーザー通知ログというよりも「トランザクションログ」に似ています。具体的には、これらのログを直接人間が読める形式にする必要はありません。必要に応じて、ある種の「ビューア」がコンテンツをASCII形式で表示できます。
したがって、これらのトランザクションタイプのログを高速バイナリストレージに書き込むことを計画します。
おかげで、以下の両方の答えは、私たち自身のソリューションを開発するための素晴らしいナッジだったようです。