C# Serilog SelfLog到文件错误

C# Serilog SelfLog到文件错误,c#,asp.net-web-api2,serilog,C#,Asp.net Web Api2,Serilog,我需要启用seri logger到文本文件的自日志。我的配置如下 __serilogLogger = new LoggerConfiguration() .Enrich.WithProperty("ApplicationIPv4", _ipv4) .Enrich.WithProperty("ApplicationIPv6", _ipv6) .WriteTo.MSSqlServer(connectionString, tableName /*, columnOp

我需要启用seri logger到文本文件的自日志。我的配置如下

__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” 文件(x86)\IIS Express\Self.log'因为另一个用户正在使用它 过程


有人能帮我一下吗

当涉及到这一行时,您必须运行此应用程序的另一个实例。或者这个代码被调用了两次?检查taskmanager并杀死可能使用它的任何东西。如果这是一个web应用程序,请尝试回收应用程序池。

在这一行中,您必须运行此应用程序的另一个实例。或者这个代码被调用了两次?检查taskmanager并杀死可能使用它的任何东西。如果这是一个web应用程序,请尝试回收应用程序池。

尝试

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

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

不要忘记
Log.CloseAndFlush()当您根据关闭其他日志时,否则它将无法写入

请注意,如果您使用的是异步接收器,那么当不同的线程争用写入该文件(如果该文件变忙)时,最终会出现异常。

试试看

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

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

不要忘记
Log.CloseAndFlush()当您根据关闭其他日志时,否则它将无法写入


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

我遇到了一个问题,表明同一个
进程无法访问文件“X”,因为它正被另一个进程使用。
错误消息。在我的例子中,每当应用程序池在IIS 8.5中回收时,它都会出现在服务器的事件日志中,即使
最大工作进程数
设置为
1
。也许值得一提的是:启用自日志的代码在静态构造函数中执行

在正确关闭
TextWriter
之后,我没有运气,甚至在
File.CreateText
之前添加了大量
线程.Sleep
,希望等待“另一个进程”完成

解决方案是在应用程序池的高级设置中将
禁用重叠回收
设置为
true


我遇到了一个问题,表明同一个
进程无法访问文件“X”,因为它正被另一个进程使用。
错误消息。在我的例子中,每当应用程序池在IIS 8.5中回收时,它都会出现在服务器的事件日志中,即使
最大工作进程数
设置为
1
。也许值得一提的是:启用自日志的代码在静态构造函数中执行

在正确关闭
TextWriter
之后,我没有运气,甚至在
File.CreateText
之前添加了大量
线程.Sleep
,希望等待“另一个进程”完成

解决方案是在应用程序池的高级设置中将
禁用重叠回收
设置为
true


您能显示引起错误的代码和行吗?我们在IIS下使用serilog self log的.NET应用程序也有类似的问题。工作进程数被设置为8而不是1:(以安全的线程安全方式通过文件流实现自日志记录可能会很棘手,在所有情况下都能正常工作。对于.NET核心应用程序,请避免麻烦并将SelfLog设置为目标Console.Error。您是否可以显示导致错误的代码和行?我们在IIS下使用serilog self log的.NET应用程序也遇到类似问题。结果是f工作进程设置为8而不是1:(以安全的线程安全方式通过文件流实现自日志记录可能很棘手,这种方式在所有情况下都有效。对于.NET core应用程序,请避免头痛并将自日志设置为目标控制台。错误。谢谢…是的,这是我的问题…代码看起来像记录器在多个位置初始化Hanks…是的,这是我的问题…代码看起来像记录器正在初始化。)在多个地方