C#Windowsサービス用にlog4netを構成する方法
-
05-07-2019 - |
質問
app.configファイルとlog4net.configファイルが別々のWindowsサービスがあります。ロギングが機能していません。
app.configファイルでは、セクションに次のものがあります:
<add key="log4net.Config" value="log4net.config"/>
これは、値にlog4net.configファイルへの絶対パスを指定した場合に機能します。
log4net.congへの絶対パスを指定する必要がありますか? log4net.configファイルとapp.configファイルは両方とも、実行可能ファイルと同じフォルダーにあります。
アイデアはありますか
パラグラフ
解決
これは役に立つかもしれません( web.configからLog4Net設定を削除するASP.NET 2.0 Webサイトで。)。
ここにあなたが興味があるかもしれない部分があります:
構成するアプリケーションを教えてください この設定ファイルを使用してlog4net。そこ これには本当に2つのスポットがあります。最初、 global.asaxおよび2番目 assemblyInfo.csファイル。注意してください、そのほとんど で始まる時間の すべてのコードを含むglobal.asaxファイル 列をなして。何らかの理由で、唯一の これを機能させる方法は global.asaxを分割して使用します コードビハインドしてから assemblyInfo.csファイル。それで終わります このように見えます。
global.asax: <!> lt;%@ Application Language = <!> quot; C#<!> quot; Inherits = <!> quot; GlobalAsax <!> quot; %<!> gt; global.asax.cs(App_Codeフォルダー内):
using System;
using System.Web;
public class GlobalAsax : HttpApplication
{
// you may have lots of other code here
void Application_Start(object sender, EventArgs e)
{
log4net.Config.XmlConfigurator.Configure();
}
}
これでアプリケーションができました log4netの構成を呼び出すと、 アセンブリに属性を設定できます log4netがどこへ行くかを知るための情報 構成ファイルを探します。
AssemblyInfo.cs
(App_Code
フォルダー):
[assembly:log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
監視フラグは、log4netに 構成ファイルに注目 潜在的な変化。これは次の場合に役立ちます 構成を変更したい すべてのログからエラーまでのみ テストの途中で。
log4net.config
が常にそこにあることを確認するには、log4net.configをcsprojectに追加し、CopyAlways
に設定します。デバッグフォルダーに表示する必要があります。
スクリプトを使用してすべてをリリースフォルダーにコピーするか、MSセットアッププロジェクトを使用している場合は、そのファイルをプロジェクトに手動で追加します。その後、参照が追加されます。
他のヒント
Windowsサービスの場合、現在のディレクトリはWindows \ system32です。XmlConfigurator.Configure()はFileInfoを使用して、現在のディレクトリに対する相対パスを処理します。そのため、log4netはWindows \ system32で設定ファイルを探しています。
一方、XmlConfiguratorAttributeはアプリケーションのBaseDirectoryを使用します。これが常に機能する理由です。
別の方法として、XmlConfigurator.Configure()を呼び出す前に次のことを実行できます。
System.IO.Directory.SetCurrentDirectory (AppDomain.CurrentDomain.BaseDirectory);