【发布时间】:2010-09-06 07:50:31
【问题描述】:
为了在一个有点封闭的系统中进行调试,我必须将文本输出到一个文件中。
是否有人知道在 Windows(基于或不基于控制台)上运行的工具可以检测文件更改并实时输出?
【问题讨论】:
标签: monitoring text-files
为了在一个有点封闭的系统中进行调试,我必须将文本输出到一个文件中。
是否有人知道在 Windows(基于或不基于控制台)上运行的工具可以检测文件更改并实时输出?
【问题讨论】:
标签: monitoring text-files
我喜欢可以执行多个任务的工具,Notepad++ 是一个很好的记事本替代品,并且有一个文档监视器插件(与标准 msi 一起安装)效果很好。它还具有便携性,因此您可以将其放在拇指驱动器上以便在任何地方使用。
对于命令行选项,PowerShell(实际上是一个新的命令行)有一个已经提到的很棒的功能。
Get-Content someFile.txt -wait
但你也可以在命令行使用正则表达式进行过滤
Get-Content web.log -wait | where { $_ -match "ERROR" }
【讨论】:
View 菜单底部有一个内置的“监控”选项。
【讨论】:
tail -f 是命令。另外,如果你安装了 git,你可能有尾巴。
我在cygwin下使用“tail -f”。
【讨论】:
使用Windows PowerShell 时,您可以执行以下操作:
Get-Content someFile.txt -wait
【讨论】:
我使用BareTail 在 Windows 上执行此操作。它是免费的,并且具有一些不错的功能,例如用于拖尾多个文件的选项卡和可配置的突出显示。
【讨论】:
到目前为止,Tail 是最好的答案。
如果你不使用 Windows,你可能已经有尾巴了。
如果您确实使用 Windows,则可以从 here 获得大量 Unix 命令行工具。将它们解压缩并将它们放在 PATH 中的某个位置。
然后在命令提示符下从您的日志文件所在的同一文件夹中执行此操作:
tail -n 50 -f whatever.log
这将显示文件的最后 50 行,并将随着文件的更新而更新。
您可以将 grep 与 tail 结合使用,效果很好 - 如下所示:
tail -n 50 -f whatever.log | grep Error
只给你带有“错误”的行。
祝你好运!
【讨论】:
FileSystemWatcher 是一种享受,尽管您必须对触发重复事件有点小心 - 1st link from Google - 但记住这一点可以产生很好的结果。
【讨论】:
迟到的答案,虽然可能对某人有所帮助——LOGEXPERT 似乎是 Windows 的有趣的尾部实用程序。
【讨论】:
试试 Microsoft 的 SMSTrace(现在称为 CMTrace,在某些版本的 Windows 上直接在“开始”菜单中可用)
它是一个出色的 GUI 工具,可以实时监控任何文本文件的更新,即使它被另一个文件锁定以写入。
不要被描述所迷惑,它能够监控任何文件,包括 .txt、.log 或 .csv。
它监控锁定文件的能力非常有用,这也是这个实用程序大放异彩的原因之一。
最好的功能之一是线条着色。如果它看到单词“ERROR”,则该行变为红色。如果它看到“WARN”字样,则该行变为黄色。这使得日志更容易跟踪。
【讨论】:
我使用FileSystemWatcher 来监控我最近构建的组件的文本文件。可能有更好的选择(我在我的有限研究中从未发现任何东西)但这似乎很好地解决了这个问题:)
废话,我的错,你实际上是在寻找一个工具来为你做这一切..
如果你运气不好想自己动手;)
【讨论】:
蛇尾。这是一个不错的选择。 http://snakenest.com/snaketail/
【讨论】:
log.20150901.220158.txt 的日志文件,但在重新编译/配置更改时,将生成一个具有不同时间戳的新文件。使用例如设置 SnakeTail wildcard-pattern log.*.txt 将自动尾随下一个文件,无需切换目标。谢谢你的小费,埃里克。
您可以在 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);
}
}
您也可以点击此链接Watching Folder Activity in VB.NET
【讨论】:
只是一个无耻的插件来跟踪答案,但我有一个名为 Hacksaw 的免费网络应用程序,用于查看 log4net 文件。我加入了自动刷新选项,这样您就可以为自己提供近乎实时的更新,而无需一直刷新浏览器。
【讨论】:
是的,我在 Win32 和 Cygwin 上都使用了 Tail。我发现两者都非常出色,尽管我更喜欢 Cygwin,因为我能够在 Internet 上有效地跟踪文件而不会崩溃(Win32 的 Tail 在某些情况下会导致我崩溃)。
所以基本上,我会在 Cygwin 上使用 tail 并将输出重定向到我本地机器上的文件。然后我会在 Vim 中打开这个文件,并在需要时重新加载 (:e) 它。
【讨论】:
+1 表示 BareTail。我实际上使用BareTailPro,它在尾部提供实时过滤,带有基本的搜索字符串或使用正则表达式的搜索字符串。
【讨论】:
为了使列表完整,这里有一个指向许多有用工具的 GNU WIN32 端口的链接(其中包括 tail)。 GNUWin32 CoreUtils
【讨论】:
很惊讶没有人提到 Trace32(或 Trace64)。这些是很棒的(免费)Microsoft 实用程序,可以提供漂亮的 GUI 并突出显示任何错误等。它还具有过滤功能,听起来正是您所需要的。
【讨论】:
这是我为此编写的一个实用程序:
它使用 FileSystemWatcher 在本地文件夹或网络共享中查找日志文件的更改(不必挂载,只需提供 UNC 路径)并将新内容附加到控制台。
在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
一种执行此操作的命令提示符方式。
【讨论】:
FileMon 是一个免费的独立工具,可以检测各种文件访问。您可以过滤掉任何不需要的内容。但它不会向您显示实际发生变化的数据。
【讨论】:
我在 cygwin 中第二个“tail -f”。我认为 Tail for Win32 会完成同样的事情。
【讨论】:
【讨论】:
我自己做了一个小查看器:
【讨论】: