サイズ制限に基づくログ ファイルのロールオーバーをサポートする、.Net 用の優れた TraceListener を探しています。
制約
- トレース ログに組み込まれた .Net を使用
- 巨大なライブラリの一部ではない独立したクラスまたはバイナリ
- サイズに基づいてログ ファイルをロールオーバーできます
.NETFrameworkに組み込まれているMicrosoft.VisualBasic.Logging.FileLogTraceListenerを使用できます。名前空間内のVisualBasicを怖がらせないでください。必要なのは、microsoft.visualbasic.dllアセンブリを参照するだけで、C#で正常に機能するはずです。
ネットワーク トレースを実行する必要があるときはいつでも、この構成スニペットを手元に置いておきます。実行時に App.config に参照を追加することで、VB DLL への明示的な参照を追加してプロジェクトをビルドする必要はありません。
<system.diagnostics>
<sources>
<source name="System.Net">
<listeners>
<add name="System.Net"/>
</listeners>
</source>
<source name="System.Net.Http">
<listeners>
<add name="System.Net"/>
</listeners>
</source>
<source name="System.Net.Sockets">
<listeners>
<add name="System.Net"/>
</listeners>
</source>
</sources>
<switches>
<add name="System.Net" value="Verbose"/>
<add name="System.Net.Http" value="Verbose"/>
<add name="System.Net.Sockets" value="Verbose"/>
</switches>
<sharedListeners>
<add name="System.Net"
type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
traceOutputOptions="DateTime,ProcessId,ThreadId"
customLocation="c:\temp"
location="Custom"
logFileCreationSchedule="Daily"
baseFileName="NetworkTrace"/>
</sharedListeners>
<trace autoflush="true"/>
</system.diagnostics>
そして、実行時に参照を追加します
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.VisualBasic" culture="neutral" publicKeyToken="b03f5f7f11d50a3a"/>
<codeBase version="10.0.0.0" href="file://C:/Program Files (x86)/Reference Assemblies/Microsoft/Framework/.NETFramework/v4.5/Microsoft.VisualBasic.dll"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
私は log4net ( http://logging.apache.org/log4net/index.html ) の大ファンです。設定が非常に簡単で、必要なほぼすべてのログ タイプをサポートしていますが、カスタム ログ タイプも作成できます。
また、ログ レベルに応じてさまざまなアクションを実行できます。すべてのメッセージをテキスト ファイルに記録し、エラー -> 致命的な電子メールを送信します
私はNLogを使用していますが、とても満足しています。ソース コードは適切に記述されており、拡張や変更が容易です。ドキュメントは優れており、構成は非常に簡単です。
いくつかのリンク:
FileLogTraceListener は一般的な提案ですが、ファイルが指定された最大サイズを超えると、イベントをスローするか、例外をスローします。
それを拡張し、Write/WriteLine メソッドをオーバーライドするクラスを作成しました。
があり、それが発生した場合は、次のようにファイル ( )try/catch (InvalidOperationException)
を呼び出して名前を変更します ( が必要です。そうしないと、「ファイルが使用中です」というエラーが発生します)。 base.Close
FullLogFileName
base.Close
ループで末尾に番号を追加し、そのファイルが存在するかどうかを確認します。そうでない場合は を使用しFile.Move(FullLogFileName, newFileWithNumber)
、それ以外の場合は、機能するファイル名が見つかるまで番号を増やし続けます。特定のインスタンスがスレッドセーフであることを保証するロックもあります。
Log4NetとNlogの両方を使用しました。私はNLogが好きですが、実際にセットアップすると、とにかくそこにあることを忘れてしまいます(何かが壊れるまで、それがそこにあることを嬉しく思います!)。インターウェブには両方のドキュメントがたくさんあるはずです
コメントの1つに示されているように:
ローリング テキスト ファイルに書き込みます。
備考
logFileCreationSchedule で指定された日単位または週単位と同様に、maxFileSize に達したときに新しいファイルが使用されます。
各ファイルには「\(-)(-).log」という形式の名前が付けられ、日単位および週単位のローテーション用に現地の日付が含まれ、ファイルが既に存在する場合はシーケンス番号が付加されます。
Enterprise Library Logging アプリケーション ブロックを考慮する
EntLib インストーラーはデフォルトですべてのブロックをチェックするため、Logging ブロックのみをインストールしてください。