我在将我们的一个Web应用程序部署到生产服务器时遇到了一个非常奇怪的问题。
我们的应用程序使用log4net来记录许多操作,而且日志记录非常频繁。几个小时后,我们会收到以下异常:
无法加载文件或程序集“log4net,Version = 1.2.9.0,Culture = neutral,PublicKeyToken = b32731d11ce58905”或其某个依赖项。拒绝访问。
以下是我所使用的相关web.config添加信息:
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<appender name="ErrorLogFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="D:\SomeLocation\Errorlog"/>
<param name="AppendToFile" value="true"/>
<param name="RollingStyle" value="Size"/>
<param name="maxSizeRollBackups" value="-1" />
<param name="maximumFileSize" value="100MB" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="FATAL" />
<param name="LevelMax" value="FATAL" />
</filter>
</appender>
<appender name="BookingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="D:\SomeLocation\BookingInfoLog"/>
<param name="AppendToFile" value="true"/>
<param name="RollingStyle" value="Size"/>
<param name="maxSizeRollBackups" value="-1" />
<param name="maximumFileSize" value="100MB" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="FATAL" />
</filter>
</appender>
<root>
<level value="ALL"/>
<appender-ref ref="BookingLogFileAppender"/>
<appender-ref ref="ErrorLogFileAppender"/>
</root>
</log4net>
在我们的本地机器和开发服务器上运行正常,但在线上却不行。
顺便提一下,在JIT编译器在服务器上运行后(无论是web.config更新、应用程序池回收还是长时间运行后),它似乎会出现问题!
更新:我们的生产服务器从共享位置运行所有网站。我成功地在另一台从共享运行应用程序的服务器上复制了此问题。将站点设置为从本地驱动器运行时,问题消失了,但我们的托管要求我们从共享位置运行。有什么想法,为什么log4net在从共享运行时会有权限问题。同样的应用程序在 JIT 编译再次发生之前都能正常运行。