【发布时间】:2017-10-28 10:39:55
【问题描述】:
我有两个用 C# 编写的几乎相同的 Web api 服务,并安装在 IIS 6.1 上的同一个 Windows 2008 Server 上。当我对它们进行 web api 调用时,它们都工作得很好。我正在使用 log4net 进行日志记录。但是,其中之一并不总是记录。它们都具有完全相同的 log4net 配置,即:
<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 的名称略有不同,因此它们不会记录到相同的确切文件。
对于日志记录按预期工作的 web api,每天只要有 web api 调用,就会创建一个新的日志文件。对于日志记录似乎不起作用的 web api,不会创建新的日志文件。 但是,如果我从安装它的同一服务器上的浏览器进行 Web api 调用,则会开始记录。在当天的日志记录开始后,它继续正常(即使来自其他机器的 web api 调用)。但是第二天没有创建新文件。
我看不出有什么区别。当然,一定有一些我没有想到的东西让这两个 web api 在日志记录方面表现不同。请记住,这两种服务都可以正常工作,只是日志记录不适用于其中之一。
有什么建议吗?
编辑 1:
按照彼得的建议添加诊断后,我可以看到对路径的访问被拒绝:
log4net:ERROR 无法创建类型为 [log4net.Appender.RollingFileAppender] 的 Appender [RollingLogFileAppender]。报告的错误如下。 System.UnauthorizedAccessException:对路径“C__LOGS_WebApi.One_”的访问被拒绝。 在 System.IO.__Error.WinIOError(Int32 错误代码,字符串可能全路径) 在 System.Threading.Mutex.MutexTryCodeHelper.MutexTryCode(对象 userData) 在 System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode 代码,CleanupCode backoutCode,对象 userData) 在 System.Threading.Mutex.CreateMutexWithGuaranteedCleanup(布尔最初拥有,字符串名称,布尔&createdNew,SECURITY_ATTRIBUTES secAttrs) 在 System.Threading.Mutex..ctor(Boolean initialOwned,字符串名称,Boolean& createdNew,MutexSecurity mutexSecurity) 在 System.Threading.Mutex..ctor(布尔最初拥有,字符串名称) 在 log4net.Appender.RollingFileAppender.ActivateOptions() 在 log4net.Repository.Hierarchy.XmlHierarchyConfigurator.ParseAppender(XmlElement appenderElement) log4net:ERROR Appender 未找到名为 [RollingLogFileAppender]。
我不知道为什么。
编辑 2:
我检查了这些 StackOverflow 答案中的解决方案:
但还是没有进展。
This 看起来非常相似,但我看不到那里没有解决方案(尽管可能有一个)。
编辑 3:
文件夹权限:
【问题讨论】:
-
更改日志文件所在文件夹的权限,使应用程序有权修改日志文件
-
@Nkosi 该组每个人都可以做任何事情。不应该覆盖它吗?
-
@Nkosi 你是对的。每个人似乎都没有在这个 Windows Server 上覆盖 IIS_IUSRS(或者可能是任何一个?)。无论如何,如果您想要赏金,只需提出您的评论作为答案,我会奖励您。