如何实时监控文本文件

为了debugging的目的,在一个稍微封闭的系统中,我必须输出文本到一个文件。

有谁知道在Windows(基于控制台或没有)运行的工具,检测到文件的变化,并实时输出它们?

  • 尾为Win32
  • Apache电锯 – 用于log4net日志 ,可能需要文件在一定的格式

我喜欢能够执行多个任务的工具,Notepad ++是一个很棒的记事本替代品,并且有一个很好的Document Monitor插件(安装了标准的msi)。 它也是便携式的,所以你可以把它放在拇指驱动器上供任何地方使用。

对于命令行选项,PowerShell(这实际上是一个新的命令行)有一个伟大的function已经提到。

 Get-Content someFile.txt -wait 

但是您也可以使用正则expression式在命令行进行过滤

 Get-Content web.log -wait | where { $_ -match "ERROR" } 

我使用cygwin下的“tail -f”。

我使用BareTail在Windows上执行此操作。 它是免费的,并有一些不错的function,如拖尾多个文件的标签和可configuration的突出显示。

使用Windows PowerShell时 ,可以执行以下操作:

 Get-Content someFile.txt -wait 

FileSystemWatcher的作品是一种享受,虽然你必须小心谨慎地解决重复的事件触发 – 谷歌的第一个链接 – 但考虑到这一点可以产生很好的结果。

尾巴是迄今为止最好的答案。

如果你不使用Windows,你可能已经有了尾巴。

如果你使用Windows,你可以从这里获得一些Unix命令行工具: http : //unxutils.sourceforge.net/ – 将它们解压缩并放在PATH的某个地方。

然后,只需在您的日志文件所在的同一文件夹的命令提示符处执行此操作:

尾巴-n 50 -f whatever.log

这将显示文件的最后50行,并将更新为文件更新。

你可以把grep和tail结合起来,效果很好 – 例如:

tail -n 50 -f whatever.log | grep错误

给你带“Error”的行

祝你好运!

迟到的答案,虽然可能会有所帮助的人 – LOGEXPERT似乎是有趣的Windows实用程序。

我已经使用FileSystemWatcher监视最近构build的组件的文本文件。 可能有更好的select(我从来没有发现任何东西在我有限的研究),但似乎做的很好:)

废话,我的坏,你实际上是在一个工具,为你做这一切..

那么如果你不幸,想要推出自己的;)

蛇尾巴。 这是一个很好的select。 http://snakenest.com/snaketail/

您可以使用System.Diagnostics中的FileSystemWatcher。

来自MSDN:

公共课堂观察者{

 public static void Main() { Run(); } [PermissionSet(SecurityAction.Demand, Name="FullTrust")] public static void Run() { string[] args = System.Environment.GetCommandLineArgs(); // If a directory is not specified, exit program. if(args.Length != 2) { // Display the proper way to call the program. Console.WriteLine("Usage: Watcher.exe (directory)"); return; } // Create a new FileSystemWatcher and set its properties. FileSystemWatcher watcher = new FileSystemWatcher(); watcher.Path = args[1]; /* Watch for changes in LastAccess and LastWrite times, and the renaming of files or directories. */ watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName; // Only watch text files. watcher.Filter = "*.txt"; // Add event handlers. watcher.Changed += new FileSystemEventHandler(OnChanged); watcher.Created += new FileSystemEventHandler(OnChanged); watcher.Deleted += new FileSystemEventHandler(OnChanged); watcher.Renamed += new RenamedEventHandler(OnRenamed); // Begin watching. watcher.EnableRaisingEvents = true; // Wait for the user to quit the program. Console.WriteLine("Press \'q\' to quit the sample."); while(Console.Read()!='q'); } // Define the event handlers. private static void OnChanged(object source, FileSystemEventArgs e) { // Specify what is done when a file is changed, created, or deleted. Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType); } private static void OnRenamed(object source, RenamedEventArgs e) { // Specify what is done when a file is renamed. Console.WriteLine("File: {0} renamed to {1}", e.OldFullPath, e.FullPath); } 

}

您也可以按照此链接在VB.NET中观看文件夹活动

只是一个无耻的插件尾巴的答案,但我有一个名为Hacksaw免费的基于Web的应用程序用于查看log4net文件。 我已经提供了一个自动刷新选项,所以你可以给自己近实时的更新,而无需一直刷新浏览器。

是的,我已经使用了Win32的Tail和Cygwin的尾巴。 我发现两者都非常出色,但我更喜欢Cygwin,因为我可以通过互联网有效地拖拽文件而不会崩溃(在某些情况下,Tail for Win32已经崩溃了)。

所以基本上,我会在Cygwin上使用tail,并将输出redirect到本地机器上的文件。 然后我会在Vim中打开这个文件,并在需要时重新加载(:e)。

BareTail +1。 我实际上使用BareTailPro ,它提供了基本的searchstring或searchstring使用正则expression式的尾部实时过滤。

为了使列表完整,这里有一个链接到许多有用的工具GNU WIN32端口(其中是尾巴)。 GNUWin32 CoreUtils

惊讶的没有人提到Trace32(或Trace64)。 这些是伟大的(免费的)微软公用事业,给出一个很好的graphics用户界面,突出显示任何错误,等等。它也有过滤和听起来像你所需要的。

试试微软的SMSTrace 。

它是一个绚丽的GUI工具,可以实时监视任何文本文件的更新,即使locking了其他文件的写入也是如此。

不要被描述所迷惑,它能够监视任何文件,包括.txt,.log或.csv。

它监视locking文件的能力非常有用 ,也是这个实用程序闪耀的原因之一。

最好的function之一是线条着色。 如果看到单词“错误”,则该行变为红色。 如果看到“警告”一词,则线条变黄。 这使日志更容易遵循。

FileMon是一个免费的独立工具,可以检测到各种文件访问。 你可以过滤掉任何不需要的东西。 它不会显示实际上已更改的数据。

我在cygwin中第二个“tail -f”。 我假设Win32的尾巴将完成同样的事情。

尾为Win32

这是我写的一个实用程序来做到这一点:

它使用FileSystemWatcher在本地文件夹或networking共享内查找日志文件中的更改(不必挂载,只需提供UNCpath),并将新内容附加到控制台。

在github上: https : //github.com/danbyrne84/multitail

http://www.danielbyrne.net/projects/multitail

希望这可以帮助

我自己做了一个小小的观众:

https://github.com/enexusde/Delphi/wiki/TinyLog

 @echo off set LoggingFile=C:\foo.txt set lineNr=0 :while1 for /f "usebackq delims=" %%i in (`more +%lineNr% %LoggingFile%`) DO ( echo %%i set /a lineNr+=1 REM Have an appropriate stop condition here by checking i ) goto :while1 

命令提示符的方式。