WCF Web サービス プロジェクトで作業し、log4net を使用していますが、C:\temp などの安全なディレクトリにある外部 log4net 構成ファイルを使用してログも作成しない限り、ログに書き込むことができません。 C:\temp などの安全なディレクトリに保存します。
「安全な」ディレクトリとは、実際には C:\users または C:\inetpub\wwwroot の下にないすべてのディレクトリのことです。サービスがデプロイされているフォルダーに log4net 構成ファイルまたはログ自体を配置しようとすると、C:\inetpub\wwwroot\<projectName>
何も実行されません (エラーは発生せず、ログは作成されず、何も起こりません)。しかし、C:\temp の下にある log4net 構成ファイルから構成をロードし、ログを C:\temp に書き込むと、正常に動作します。
私は C:\temp を使用したくありませんが、サービスが展開されている inetpub にログを置き、web.config と同じ場所に置きたいと考えています。これは明らかにユーザー権限の問題であることはわかっていますが、どうすればよいでしょうか?
また、web.config ファイルから log4net 構成を読み取ることができません。そのため、最初に外部 log4j 構成ファイルを使用してみました。
ここでかなりの数の投稿を読み、その指示に従ってすべてをセットアップしました。IISでホストされているWCF Webサービスのlog4net構成を保存するためのベストプラクティスと、ログインを保存できるようにするためにできることについて、正しい方向にプッシュする必要がありますwwwroot/<myprojectfolder>
私が読んだ投稿の1つはこれでした... IIS 7.5によってホストされているWCFのlog4netログファイルの書き込みなし
これが私がこれまでに得たものです...
AssemblyInfo.cs ファイルには、次のものがあります。構成ファイルを指定する方法と、構成ファイルを指定しないで web.config を使用できるようにする方法の両方を試しました。
//[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
手動で追加する必要があった Global.asax には、次のものがあります。Configure() を呼び出すときに C:\temp のような安全なディレクトリにファイルを指定すると、動作します...
XmlConfigurator.Configure();
var logger = LogManager.GetLogger(typeof(Global));
logger.Info("Starting up services");
そして、私のサービス実装ファイルには、これがあります...
private static readonly log4net.ILog logger = log4net.LogManager.GetLogger
(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
何か案は?
編集
開発ボックスにVS2008でWindows 7 Pro x86を使用し、ローカルIISに展開しています。