繁体   English   中英

Serilog SelfLog 到文件错误

[英]Serilog SelfLog to File Error

我需要将 seri 记录器的自我日志启用到文本文件。 我的配置如下;

__serilogLogger = new LoggerConfiguration()
      .Enrich.WithProperty("ApplicationIPv4", _ipv4)
      .Enrich.WithProperty("ApplicationIPv6", _ipv6)
      .WriteTo.MSSqlServer(connectionString, tableName /*, columnOptions: columnOptions*/)
      .WriteTo
      .Seq(ConfigurationManager.AppSettings["SerilogServer"])
      .CreateLogger();

      var file = File.CreateText("Self.log");
      Serilog.Debugging.SelfLog.Enable(TextWriter.Synchronized(file));

但是在运行应用程序时文件访问错误是怎么回事。 请在下面找到错误详细信息;

附加信息:该进程无法访问文件“C:\\Program Files (x86)\\IIS Express\\Self.log”,因为它正被另一个进程使用。

谁能帮我这个

试试

Serilog.Debugging.SelfLog.Enable(msg => File.AppendAllText (serilogSelfLogFilePath, msg));

用于写入文件的非锁定方式。 serilogSelfLogFilePath是您要使用的文件的有效路径string

不要忘记Log.CloseAndFlush(); 当您按照https://github.com/serilog/serilog/issues/864关闭其他日志时,否则它不会被写入

请注意,如果您使用的是异步接收器,那么当不同的线程争用该文件时,如果它变得繁忙,您最终会得到一个异常。

当涉及到这一行时,您必须运行此应用程序的另一个实例。 或者也许这段代码以某种方式被调用了两次? 检查任务管理器并杀死任何可能使用它的东西。 如果这是一个 Web 应用程序,请尝试回收应用程序池。

我遇到了同样The process cannot access the file 'X' because it is being used by another process.问题The process cannot access the file 'X' because it is being used by another process. 错误信息。 在我的情况下,每次应用程序池在 IIS 8.5 中回收时,它都会出现在服务器的事件日志中,即使Maximum worker processes设置为1 也许值得一说:启用自我日志的代码在静态构造函数中执行。

正确关闭TextWriter后我没有运气,即使在File.CreateText之前添加慷慨的Thread.Sleep以等待“另一个进程”完成时也没有。

解决方案是在应用程序池的高级设置中将Disable Overlapped Recycle设置为true

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM