簡體   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