参照を追加し、App.config に構成を追加し、AssemblyInfo.cs にロード エントリを追加して、C# WinForms アプリケーションに log4net をセットアップしました。構成は、すべてのレベルをキャッチするように設定されています。
私の Program.cs では、すべてのエラーをキャッチできるようにしています。
私は現在これを持っています:
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
private static readonly ILog log = LogManager.GetLogger(typeof(Program));
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
try
{
log.Info("this works");
Application.Run(new Forms.Main());
}
catch (Exception e)
{
log.Info("nothing here", e);
}
}
}
実際にログファイルに書き込めることをテストするために「これは機能します」を入れました。これはログに表示されます:
2012-09-30 23:00:53,959 [INFO ] - this works
私のlog4netもイミディエイトウィンドウに書き込むように設定されているため、意図的にいくつかのエラーを作成しました。これがウィンドウに表示されるものです。
ContractManagement.Program: 2012-09-30 23:08:09,177 [INFO ] - this works
A first chance exception of type 'System.Data.SqlServerCe.SqlCeException' occurred in System.Data.SqlServerCe.dll
ログにも 2 番目のエラーが表示されることを期待していましたが、その兆候はありません :(
キース・ニコラスのコメントに続いて、私はこれを行いました:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
log.Info("this works");
throw new System.ArgumentException("Keith Nicholas Test");
//Application.Run(new Forms.Main());
}
ログファイルには次のように表示されます。
2012-09-30 23:19:12,090 [INFO ] - this works
System.ArgumentException: Keith Nicholas Test
at ContractManagement.Program.Main() in c:\ContractManagement\ContractManagement\Program.cs:line 25