使用 Excel 作为日志 reader。如果 Excel 已打开,如何写入日志文件?
Using Excel as log reader. How to write to log file if Excel has it open?
我发现所有现有的预定应用程序都将其日志写入 .CSV 文件,以便人们可以在 Excel 中打开它们。当有人打开日志文件并保持打开状态时,问题就来了。然后应用程序无法写入它们的日志,并且按照规则,它们会死掉。
所以选项是:
- 以某种方式让用户以非独占方式打开 Excel 中的文件;
- 尽管用户粗鲁无礼,但仍能以某种方式写入日志;
- 写一个更温和的日志 reader(不,公司在 Excel 和 .csv 文件上运行,它们不会改变);
- ????????
还是我只是缺少一种完全无脑的处理方法?
大多数应用程序目前都是 VBScript,但我已经设法将其中许多应用程序转换为 C# 控制台应用程序,因此欢迎两种风格的回答。
您可能会使用像 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
我强烈推荐它作为日志框架。
(我没有参与该项目 - 只是一个忠实粉丝,在我从事的项目中多次使用它)。
如果您适当地为包含 CSV 文件的文件夹设置 NTFS 权限,以便您的用户只有读取权限,而您的计划任务的用户 运行 具有完全访问权限,那么 Excel 将以只读模式打开文件。
这将防止 Excel 锁定文件并允许您继续不受阻碍地进行日志记录。
我发现所有现有的预定应用程序都将其日志写入 .CSV 文件,以便人们可以在 Excel 中打开它们。当有人打开日志文件并保持打开状态时,问题就来了。然后应用程序无法写入它们的日志,并且按照规则,它们会死掉。
所以选项是:
- 以某种方式让用户以非独占方式打开 Excel 中的文件;
- 尽管用户粗鲁无礼,但仍能以某种方式写入日志;
- 写一个更温和的日志 reader(不,公司在 Excel 和 .csv 文件上运行,它们不会改变);
- ????????
还是我只是缺少一种完全无脑的处理方法?
大多数应用程序目前都是 VBScript,但我已经设法将其中许多应用程序转换为 C# 控制台应用程序,因此欢迎两种风格的回答。
您可能会使用像 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
我强烈推荐它作为日志框架。
(我没有参与该项目 - 只是一个忠实粉丝,在我从事的项目中多次使用它)。
如果您适当地为包含 CSV 文件的文件夹设置 NTFS 权限,以便您的用户只有读取权限,而您的计划任务的用户 运行 具有完全访问权限,那么 Excel 将以只读模式打开文件。
这将防止 Excel 锁定文件并允许您继续不受阻碍地进行日志记录。