如何实时监视文本文件

时间:2020-03-05 18:41:15  来源:igfitidea点击:

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

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

解决方案

回答

  • Win32的尾巴
  • Apache Chainsaw-与log4net日志一起使用,可能要求文件采用某种格式

回答

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

糟糕,我不好,我们实际上是在寻找一种为我们完成所有工作的工具。

好吧,如果我们不走运并且想自己滚一下;)

回答

我在cygwin下使用" tail -f"。

回答

FileSystemWatcher可以很好地解决问题,尽管我们确实需要对触发Google的第一个链接的重复事件稍加小心,但记住这会产生很好的结果。

回答

我们可以在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中监视文件夹活动。

回答

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

回答

我在Cygwin中第二个" tail -f"。我假设Tail for Win32将完成相同的操作。

回答

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

Get-Content someFile.txt -wait

回答

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

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

如果我们确实使用Windows,则可以从此处获得大量Unix命令行工具:http://unxutils.sourceforge.net/解压缩它们并将它们放在PATH中的某个位置。

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

尾-n 50 -f what.log

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

我们可以将grep与tail结合使用,得到类似以下结果:

尾-n 50 -f what.log | grep错误

给我们仅带有"错误"的行

祝你好运!

回答

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

回答

答案很简单,但是我有一个免费的基于Web的应用程序,称为Hacksaw,用于查看log4net文件。我设置了自动刷新选项,因此我们可以进行近乎实时的更新,而不必一直刷新浏览器。

回答

是的,我在Win32上同时使用了Tail,在Cygwin上同时使用了tail。我发现两者都很出色,尽管我稍微偏爱Cygwin,因为我能够有效地通过Internet尾文件而不会崩溃(在某些情况下,Win32的尾巴在我身上崩溃了)。

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

回答

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

回答

我喜欢可以执行多个任务的工具,Notepad ++是出色的记事本替代品,并且具有运行良好的Document Monitor插件(与标准msi一起安装)。它还是便携式的,因此我们可以将其放在随身碟上以在任何地方使用。

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

Get-Content someFile.txt -wait

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

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

回答

Win32的尾巴

回答

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