如何实时监控文本文件
为了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
希望这可以帮助
我自己做了一个小小的观众:
@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
命令提示符的方式。