c# 循环traceListener不滚动文件

标签 c# tracelistener

我正在使用 Microsoft.ServiceModel.Samples.CircularTracecListener 二进制文件在 Web 服务上实现错误日志记录。

它应该写入文件,直到达到 maxFileSizeKB,然后滚动到辅助文件。 当我使用较低的文件大小限制进行测试时,此过程运行良好,并且滚动会在短时间内发生。

奇怪的是,当我设置 maxFileSizeKB 时,第二天我发现记录器覆盖了主文件,而辅助文件未受影响。

web.config文件设置如下:

  <system.diagnostics>
<sources>
  <source name="System.ServiceModel" switchValue="Information,ActivityTracing" >
    <listeners>
      <add name="CircularTraceListener" />
    </listeners>
  </source>
</sources>
<sharedListeners>
  <add name="CircularTraceListener" type="Microsoft.Samples.ServiceModel.CircularTraceListener,CircularTraceListener"
       initializeData="c:\log\webserviceLog.xml" maxFileSizeKB="5120" />
</sharedListeners>
<trace autoflush="true" />

有人遇到过类似的问题吗?

我只能想到重新启动网络服务并使其从第一个文件开始。

可能是应用程序池回收?

当我检查 iis 日志时,我发现应用程序池在我的日志文件被删除的同时被重新整理。

最佳答案

Microsoft.ServiceModel.Samples.CircularTraceListener 代码示例读取 maxFileSizeKB 设置一次。为了使该设置的更改生效,您必须重新启动托管进程。

编辑:

当你编辑web.config时,IIS应用程序池默认会自动回收。

如果您的IIS应用程序池被回收,它将覆盖主文件(webserviceLog00.xml)。

您可以将“应用程序池 > 高级设置... > 回收 > 禁用配置更改回收”设置为 true,以防止应用程序池重新启动。

关于c# 循环traceListener不滚动文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46284384/

相关文章:

c# - 使用跟踪监听器重定向所有调试输出

c# - 使用 ToList() 和 .AsQueryable() 连接两个不同的数据库上下文有什么区别?

c# - 我如何等待异步 ping 负载在 C# 中全部完成?

logging - Logger 和 LogWriter 的区别

c# - 如何监控 console.out?

c# - System.TraceListener 如何在消息前添加进程名称?

c# - 如何停用Unity中的所有 child ?

c# - 如何选择数据结构

c# - 封闭的 XML。 Workbook.Save() 时内存泄漏

C# 在关闭时向跟踪监听器添加页脚