【问题标题】:Using Excel as log reader. How to write to log file if Excel has it open?使用 Excel 作为日志阅读器。如果 Excel 已打开,如何写入日志文件?
【发布时间】:2015-04-17 15:43:42
【问题描述】:

我发现所有现有的计划应用程序都将其日志写入 .CSV 文件,以便人们可以在 Excel 中打开它们。当有人打开日志文件并将其保持打开状态时,就会出现问题。然后应用程序无法写入它们的日志,并且按照规则,它们会死掉。

所以选项是:

  1. 以某种方式让用户以非独占方式在 Excel 中打开文件;
  2. 尽管用户粗鲁,但不知何故能够写入日志;
  3. 写一个更友善、更温和的日志阅读器(不,公司运行在 Excel 和 .csv 文件上,它们不会改变);
  4. ?????????

或者我只是错过了一种完全无脑的方法来处理这个问题?

目前大多数应用程序都是 VBScript,但我已经设法将其中许多转换为 C# 控制台应用程序,因此欢迎两种风格的答案。

【问题讨论】:

  • 使用 NTFS 权限只允许您的用户进行读取访问。
  • 我不会让用户接触我宝贵的日志文件,相反,您可以提供一种间接访问方式
  • 为什么不给用户一个日志文件的快照来查看?
  • 我同意@MichaelSander 我永远不会让用户触摸我的实际日志文件。相反,我可能会在某些地方制作备份副本以供他们查看。

标签: c# excel csv logging vbscript


【解决方案1】:

如果您在包含 CSV 文件的文件夹上适当地设置了 NTFS 权限,以便您的用户只有读取权限,而运行您的计划任务的用户具有完全访问权限,则 Excel 将以只读模式打开文件。

这将防止 Excel 锁定文件并让您的日志记录继续畅通无阻。

【讨论】:

  • 当然......我确实有一些额外的并发症,但这让我走上了正轨。我想我也会写入一个隐藏目录并让文件系统观察者将它们复制到标准目录。
【解决方案2】:

您可能会使用像 Serilog 这样的日志框架。

当你配置 Serilog 时,你可以定义多个输出(Serilog 称它们为 Sinks)。因此,例如,您可以将应用程序配置为写入 Windows 事件日志以及 CSV 文件。即使有人打开了 CSV 文件,您的应用程序也可以继续记录到事件日志中。

一个示例配置可能是:

var log = new LoggerConfiguration()
   .WriteTo.File("log.csv")
   .WriteTo.EventLog("My App")
   .CreateLogger();

然后,要写入日志,您只需要:

log.Information("This is a sample log entry");

还有一些其他元素需要设置,但他们网站上的文档很棒,可以帮助您入门。

Serilog 非常轻巧且配置迅速,因此更新您的应用程序以使用它不会花费太多精力。

这里是 Serilog 主页:https://github.com/serilog/serilog/wiki

我强烈推荐它作为日志框架。

(我没有参与该项目 - 只是一个忠实的粉丝,在我从事的项目中多次使用它)。

【讨论】:

  • 谢谢。这不会解决我眼前的问题,但我确实需要将这些应用程序移向更复杂的框架。
猜你喜欢
  • 1970-01-01
  • 2021-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多