nei*_*ldt 6 c# iis log4net asmx log4net-configuration
我有一个运行 IIS 10 的 ASMX Web 服务,并使用以下配置将 log4net 添加到项目中:
<appender name="AsmxDebugLogFile" type="log4net.Appender.RollingFileAppender">
<file value="App_Data/ASMX.DEBUG_" type="log4net.Util.PatternString" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<datePattern value="yyyy-MM-dd'.log'" />
<maximumFileSize value="5GB" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<logger name="AsmxDebugLogFile">
<level value="DEBUG" />
<appender-ref ref="AsmxDebugLogFile" />
</logger>
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,我每天都会收到两个日志文件,格式yyyy-MM-dd.log.yyyy-MM-dd.log如下图所示,似乎也是随机的,日志文件将切换到新创建的日志文件,然后再次开始记录日志文件中的 at 是在相关日期的午夜创建的。所有日志文件也远低于 5GB 最大文件大小。
以下是更新的日志文件列表
似乎最初,log4net 记录到文件 yyyy-MM-dd.log,然后在随机的时间后创建一个新的日志文件yyyy-MM-dd.log.yyyy-MM-dd.log开始写入该日志文件,然后返回并记录到yyyy-MM-dd.log开始时创建的日志文件当日。
这些是 IIS 回收设置
我每天需要 1 个格式为 ASMX.DEBUG_yyyy-MM-dd.log 的日志文件。我这个配置哪里出错了?
更新
看来是因为我们每 60 分钟回收一次应用程序池,具体取决于此时是否正在写入日志文件,取决于是否创建了新的日志文件。关于如何克服这个问题的任何建议。目前我已经在日志文件名中添加了 process_id ,它似乎可以工作,因为我每小时都会创建一个新的日志文件,但理想情况下我每天只需要 1 个日志文件。
我对所有应用程序都使用log4net,并且在池回收后从未遇到过这种文件重新创建的情况。
这是我的参数与你的不同:
<appendToFile value="true"/>
<staticLogFileName value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
Run Code Online (Sandbox Code Playgroud)
以下是行为的不同之处:
staticLogFileName意味着当天的文件名将始终相同(ASMX.DEBUG_.log此处)。它将自动以第二天的日期模式重命名。appendToFile意味着它不会覆盖当天的文件,而是附加到它。我认为前两个参数将避免在当天创建多个文件,这可能会解决您的问题。
MinimalLock我不太清楚它的角色,但我还是应该提一下:每个 AcquireLock()/ReleaseLock() 循环打开一次文件,从而保持锁定的时间最短。这种锁定方法比 FileAppender 慢得多。ExclusiveLock 但允许其他进程在日志记录继续的同时移动/删除日志文件。
| 归档时间: |
|
| 查看次数: |
1029 次 |
| 最近记录: |