使用Excel作为日志阅读器。如果Excel打开它,如何写入日志文件?

时间:2015-04-17 15:43:43

标签: c# excel csv logging vbscript

我已经进入了一个位置,所有现有的计划应用程序都将其日志写入.CSV文件,以便人们可以在Excel中打开它们。当有人打开日志文件并将其保持打开状态时,就会出现问题。然后,应用程序无法写入其日志,并且通过规则,它们会死亡。

所以选项是:

  1. 以某种方式让用户以非独占方式在Excel中打开文件;
  2. 以某种方式能够写入日志,尽管用户'粗鲁;
  3. 写一个更温和,更温和的日志阅读器(不,该公司运行Excel和.csv文件,他们不会改变);
  4. ???????
  5. 或者我只是错过了一种完全无脑的方式来解决这个问题?

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

2 个答案:

答案 0 :(得分:3)

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

这将阻止Excel对文件进行锁定,并允许您的日志记录继续畅通无阻。

答案 1 :(得分:0)

您可以使用像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

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

(我没有参与该项目 - 只是一个大粉丝在我参与过的项目中多次使用过它。)