74

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

有谁知道在 Windows(基于或不基于控制台)上运行的工具,它可以检测文件的更改并实时输出它们?

4

23 回答 23

75

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

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

Get-Content someFile.txt -wait

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

Get-Content web.log -wait | where { $_ -match "ERROR" }
于 2008-09-02T14:12:08.937 回答
36
于 2008-08-20T19:26:25.013 回答
18

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

于 2008-08-20T19:27:36.553 回答
18

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

Get-Content someFile.txt -wait
于 2008-08-20T19:48:59.810 回答
16

我使用BareTail在 Windows 上执行此操作。它是免费的,并且具有一些不错的功能,例如用于拖尾多个文件的选项卡和可配置的突出显示。

于 2008-08-20T20:01:16.223 回答
7

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

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

如果你确实使用 Windows,你可以从这里获得一大堆 Unix 命令行工具。解压缩它们并将它们放在您的 PATH 中的某个位置。

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

tail -n 50 -f whatever.log

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

您可以将 grep 与 tail 结合使用,效果很好 - 如下所示:

tail -n 50 -f whatever.log | grep Error

只为您提供带有“错误”的行。

祝你好运!

于 2008-08-20T19:50:19.620 回答
6

FileSystemWatcher 是一种享受,尽管您必须对重复事件的触发有点小心——来自 Google 的第一个链接——但记住这一点可以产生很好的结果。

于 2008-08-20T19:29:27.143 回答
5

迟到的答案,虽然可能对某人有帮助——LOGEXPERT似乎是 Windows 的有趣的尾部实用程序。

于 2015-08-03T09:54:06.577 回答
4

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

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

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

它监视锁定文件的能力非常有用,这也是该实用程序大放异彩的原因之一。

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

于 2013-09-19T07:25:53.137 回答
3

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

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

好吧,如果您不走运并想自己动手;)

于 2008-08-20T19:26:36.183 回答
2

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

于 2015-05-05T13:55:08.413 回答
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

于 2008-08-20T19:32:09.930 回答
1

只是一个无耻的插件来跟踪答案,但我有一个名为Hacksaw的免费网络应用程序,用于查看 log4net 文件。我已经加入了自动刷新选项,这样您就可以为自己提供近乎实时的更新,而无需一直刷新浏览器。

于 2008-08-20T20:21:36.470 回答
1

是的,我在 Win32 和 Cygwin 上都使用了 Tail。我发现两者都很出色,尽管我更喜欢 Cygwin,因为我能够在 Internet 上有效地跟踪文件而不会崩溃(Win32 的 Tail 在某些情况下会导致我崩溃)。

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

于 2008-08-24T18:10:17.907 回答
1

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

于 2008-08-24T18:48:16.630 回答
1

为了使列表完整,这里有一个指向许多有用工具的 GNU WIN32 端口的链接(其中包括 tail)。 GNUWin32 CoreUtils

于 2009-07-07T13:29:36.007 回答
1

很惊讶没有人提到 Trace32(或 Trace64)。这些是很棒的(免费)Microsoft 实用程序,可以提供漂亮的 GUI 并突出显示任何错误等。它还具有过滤功能,听起来正是您所需要的。

于 2012-05-22T09:13:27.557 回答
1

这是我为此编写的一个实用程序:

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

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

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

希望这可以帮助

于 2014-04-15T09:57:10.730 回答
1
@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

一种执行此操作的命令提示符方式。

于 2015-12-02T09:31:28.800 回答
0

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

于 2008-08-20T19:44:38.777 回答
0

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

于 2008-08-20T19:45:48.727 回答
0

Win32的尾巴

于 2008-09-24T16:14:26.263 回答
0

我自己做了一个小观众:

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

于 2014-08-22T06:42:19.637 回答