有关如何在写入日志时在日志中查找多个字符串的建议

本文关键字:日志 字符串 查找 | 更新日期: 2023-09-27 17:56:01

我需要在写入日志文件时读取日志文件并搜索(和复制)某些字符串。例如,当测试开始时,日志文件中有一个字符串,上面写着"测试正在启动",后跟一些重要的字符串供我复制,如"单位名称:..."、"单位编号......"等。

在测试结束

前不久,我需要复制另外几个字符串,然后是"测试结束"字符串。

我需要"即时"阅读此信息(在写入日志时)。这些日志文件可能会变得非常大。

你如何建议我用 C# 做到这一点?有没有一个简单的方法应该考虑?

有关如何在写入日志时在日志中查找多个字符串的建议

我不会在 C# 中这样做,因为有一些工具,包括许多开源工具,可以处理实时日志监控。没有一个是100%实时的,但你可以非常接近。如果需要,您可以让他们编写代码可以使用的日志信息。重新发明这个轮子非常耗时。我没有搜索过,但有可能有一个开源的 C# 实时日志监视器,所以值得搜索。然后,您可以将代码合并到应用程序中。

如果必须在 C# 中执行此操作,则应"监视"日志以指示何时进行了更改。然后你必须通读。这可能很昂贵。但是,您可以保存上次读取的文件大小,然后使用 seek 比逐行读取更快地到达尾部。

我能想到的唯一另一种方法是通过在程序和文件之间创建"代理"来拦截日志的写入。我必须研究执行此操作的最佳方法,但您基本上是在写入字节时捕获它们。您需要非常牢固地了解正在编写的内容,以便您可以终止每一行,以防一次写入很多行。很可能您最终会调用以使用本机窗口库在写入消息时创建此拦截。

这取决于您是否如何控制文件的写入方式。一种方法是设置FileShare.ReadWrite

FileStream fileStream = new FileStream(
      @"c:'words.txt", FileMode.OpenOrCreate, 
      FileAccess.ReadWrite, FileShare.ReadWrite );

https://msdn.microsoft.com/en-us/library/system.io.fileshare(v=vs.110).aspx