6

私はWinFormsアプリケーションを書いています。情報をファイルに記録する必要があります。通常、ログにはlog4netを使用しますが、制限により参照を追加できません。単一の実行可能ファイルをデプロイする必要があるため、プロジェクトに外部参照を追加できません

.NETに組み込みのログ フレームワークがあるので、外部 dll を追加せずにファイルにログインできますか?

PS: もちろん、ストリームを開いて手動で書き込みたくありません。

4

4 に答える 4

12

はい、System.Diagnostics.TraceListenerクラスです。動作させるには TRACE 定数を定義する必要がありますが、app.config の構成を通じて、組み込みの多くの tracelistener を使用できます。

ファイルに書き込みたい場合、app.config は次のようになります。追加できるフィルタが多数あります。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.diagnostics>
        <trace autoflush="false" indentsize="4">
          <listeners>
            <add name="yourName" type="System.Diagnostics.TextWriterTraceListener" initializeData="c:\mylogfile.txt" />
          </listeners>
        </trace>
    </system.diagnostics>
</configuration>

そして使用法:

Trace.TraceError("There's been an error captain: {0}", e);
Trace.TraceWarning("The system broke but don't worry.");
Trace.TraceInformation("Starting up the engines.");

個人的には、回避できるのであればテキスト ファイルには書き込みません。イベント ログは、並べ替え、フィルター処理が可能で、ログは自動パージされ、ファイル ロックの問題が発生しないため、より適切な場所です。

于 2012-07-10T08:22:21.827 に答える
8

まあ、log4net に慣れているなら、それでいいでしょう。選択したログ ツールを使用し、ビルド後にILMergeを使用して、すべての依存関係を 1 つの実行可能ファイルにマージします。

これは、まさに意図されたシナリオです。

コマンド ライン モードで使用したくない場合は、 GUIもあります。

于 2012-07-10T08:24:19.190 に答える
2

システム トレース コールを使用することもできますが、log4net のような適切なログ フレームワークの代わりにはなりません。

http://msdn.microsoft.com/en-us/library/system.diagnostics.trace.aspx

別の、おそらくより柔軟な長期的なアプローチは、すべてをコンパイルした後、ILMerge を使用してすべての外部 DLL を単一の実行可能ファイルに結合することです。

http://www.microsoft.com/en-us/download/details.aspx?id=17630

または、「単一の実行可能ファイル」の定義に応じて、もちろんすべてを MSI または clickonce パッケージとしてパッケージ化します。

于 2012-07-10T08:23:36.190 に答える
0

次のページは、XML ファイルに手動でログを記録する例を示しています。適度にシンプルに見えます。

c# ログ ファイルを作成するための最良の方法

それが役に立てば幸い。

于 2012-07-10T08:21:53.930 に答える