如何实时监控文本文件

时间:2008-08-20 19:25:07

标签: monitoring text-files

为了在稍微封闭的系统中进行调试,我必须将文本输出到文件中。

是否有人知道在Windows上运行的工具(基于或不基于控制台)检测文件的更改并实时输出?

23 个答案:

答案 0 :(得分:65)

我喜欢可以执行多个任务的工具,Notepad ++是一个很好的记事本替代品,并且有一个文档监视器插件(使用标准msi安装),效果很好。它也是便携式的,因此您可以将它放在拇指驱动器上以便在任何地方使用。

对于命令行选项,PowerShell(实际上是一个新的命令行)已经提到了一个很棒的功能。

Get-Content someFile.txt -wait

但您也可以使用正则表达式

在命令行进行过滤
Get-Content web.log -wait | where { $_ -match "ERROR" }

答案 1 :(得分:35)

答案 2 :(得分:18)

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

答案 3 :(得分:14)

我在Windows上使用BareTail来执行此操作。它是免费的,并且有一些很好的功能,例如用于拖尾多个文件的标签和可配置的高亮显示。

答案 4 :(得分:13)

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

Get-Content someFile.txt -wait

答案 5 :(得分:6)

FileSystemWatcher是一种享受,虽然你必须要小心点击重复事件 - 1st link from Google - 但要记住这一点可以产生很好的结果。

答案 6 :(得分:6)

到目前为止,尾巴是最好的答案。

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

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

然后在命令提示符下从日志文件所在的同一文件夹中执行此操作:

tail -n 50 -f whatever.log

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

你可以将grep和tail结合起来,效果很好 - 就像这样:

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

为您提供了“错误”的行

祝你好运!

答案 7 :(得分:5)

迟到的回答,虽然可能对某人有帮助 - LOGEXPERT似乎是一个有趣的Windows尾部工具。

答案 8 :(得分:3)

我使用FileSystemWatcher来监控我最近构建的组件的文本文件。可能有更好的选择(我从未在我的有限的研究中找到任何东西),但这似乎很好地解决了这个问题:)

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

好吧,如果你运气不好,想要自己动手;)

答案 9 :(得分:3)

尝试使用Microsoft的SMSTrace(现在称为CMTrace,并在某些版本的Windows上的“开始”菜单中直接使用)

它是一个出色的GUI工具,可以实时监控任何文本文件的更新,即使它被另一个文件锁定以供写入。

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

它监控锁定文件的能力非常有用,这也是该实用程序闪耀的原因之一。

最好的功能之一是线条着色。如果它看到“ERROR”一词,则该线变为红色。如果它看到“WARN”字样,则该线变为黄色。这使得日志更容易理解。

答案 10 :(得分:2)

蛇尾。这是一个不错的选择。 http://snakenest.com/snaketail/

答案 11 :(得分:1)

是的,我已经使用了Tail for Win32和尾部Cygwin。我发现两者都很优秀,虽然我更喜欢Cygwin,因为我能够在没有崩溃的情况下有效地在互联网上发送文件(在某些情况下,Tail for Win32已经崩溃了)。

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

答案 12 :(得分:1)

这是我写的一个实用工具:

它使用FileSystemWatcher查找本地文件夹或网络共享中的日志文件的更改(不必安装,只提供UNC路径)并将新内容附加到控制台。

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

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

希望这有帮助

答案 13 :(得分:1)

惊讶没人提到Trace32(或Trace64)。这些是伟大的(免费)Microsoft实用程序,它们提供了一个漂亮的GUI并突出显示任何错误等。它还具有过滤和声音,就像您需要的那样。

答案 14 :(得分:1)

要使列表完成,这里是许多有用工具的GNU WIN32端口的链接(其中有尾部)。 GNUWin32 CoreUtils

答案 15 :(得分:1)

+1 BareTail。我实际上使用BareTailPro,它使用正则表达式提供基本搜索字符串或搜索字符串的尾部实时过滤。

答案 16 :(得分:1)

只是一个无耻的插件来回答问题,但我有一个名为Hacksaw的免费网络应用程序,用于查看log4net文件。我已经添加了自动刷新选项,因此您可以随时更新实时更新,而无需一直刷新浏览器。

答案 17 :(得分:1)

您可以在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

答案 18 :(得分:0)

答案 19 :(得分:0)

我在cygwin中第二次“tail -f”。我假设Tail for Win32将完成同样的事情。

答案 20 :(得分:0)

我自己做了一个小观众:

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

答案 21 :(得分:0)

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

答案 22 :(得分:0)

@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

命令提示方式。