C#でプログラミングされた2つのほぼ同じWeb APIサービスがあり、IIS 6.1の同じWindows 2008 Serverにインストールされています。私はそれらにWeb API呼び出しを行うと、彼らはうまく動作します。私はログの目的のためにlog4netを使用しています。しかし、そのうちの1つが常にログに記録されるわけではありません。なぜこのWeb APIはログにローカルWeb API呼び出しを必要としますか?
<log4net>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingLogFileAppender" />
</root>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="C:\LOGS\SomeFolder\" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<preserveLogFileNameExtension value="true" />
<rollingStyle value="Date" />
<datePattern value="'WebApi.One.'yyyy-MM-dd'.log'" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%-5level [%thread][%date{dd-MM-yy HH:mm:ss,fff}] %logger - %message%newline" />
</layout>
</appender>
</log4net>
構成の唯一の違いは、彼らはまったく同じファイルにログを記録しないように、わずかに異なる名前を持つdatePatternです:彼らの両方があり、同じ正確なlog4netの設定を、持っています。
ログが期待どおりに機能するWeb APIの場合、Web API呼び出しが着信すると、毎日新しいログファイルが作成されます。ログが機能していないWeb APIの場合、新しいログファイルは作成されません。 しかし、インストールされているのと同じサーバー上のブラウザからWeb API呼び出しを行うと、ログが開始されます。その日のロギングが開始された後も、(他のマシンからのWeb API呼び出しであっても)うまくいきます。しかし、翌日には新しいファイルは作成されません。
私は違いが何であるか分かりません。確かに、私はこれらの2つのWeb APIをロギングに関して異なった振る舞いにすることを考えていない何かがあるはずです。覚えておいて、どちらのサービスもうまくいきます。いずれかのサービスでは動作していないログだけです。
提案がありますか?
編集1:
ピーターにより示唆されるように診断を追加した後、私はパスへのアクセスが拒否されたことがわかります。
のlog4net:ERRORは作成できませんでしたAppender [RollingLogFileAppender]タイプの[log4netの.Appender.RollingFileAppender]をクリックします。報告されたエラーが続きます。 System.UnauthorizedAccessException: 'C__LOGS_WebApi.One_'パスへのアクセスが拒否されました。 System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanupでSystem.Threading.Mutex.MutexTryCodeHelper.MutexTryCodeでSystem.IO .__ Error.WinIOError(のInt32のerrorCode、文字列maybeFullPath) (ユーザ・データオブジェクト) (TryCodeコード、CleanupCode backoutCode、物体を System.Threading.Mutex..ctor(ブールinitiallyOwned、文字列の名前、ブール& createdNew、mutexSecurity mutexSecurity) でSystem.Threading.Mutex.CreateMutexWithGuaranteedCleanup(ブールinitiallyOwned、文字列の名前、ブール& createdNew、SECURITY_ATTRIBUTES secAttrs) でのuserData) System.Threading.Mutex..ctor(Boolean startsOwned、String name)でlog4net.Appender.RollingFileAppender.ActivateOptions()にある at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.ParseAppender(XmlElement appenderElement) log4net:エラー[RollingLogFileAppender]という名前のAppenderが見つかりません。
私はなぜか分かりません。
編集2:
しかし、まだ進展なし:
私はこれらのStackOverflowの答えで解決策を確認しました。
Thisは非常によく似ていますが、そこに解決策はありませんでした(1つありますが)。
編集3:
フォルダのパーミッション:
アプリケーションがログファイルを変更する権限を持つように、ログファイルが格納されているフォルダのアクセス許可を変更します。 – Nkosi
@Nkosi Everyoneグループにはすべて許可されています。それをカバーしてはいけませんか? – Halvard
@Nkosiあなたは正しいです。誰もがこのWindows Server上でIIS_IUSRSをカバーしているようです(あるいは何か?)。とにかく、あなたが賞金を欲しがっているのであれば、あなたのコメントを回答として提示し、私はあなたに賞を授与します。 – Halvard