【问题标题】:How to monitor a text file in realtime [closed]如何实时监控文本文件[关闭]
【发布时间】:2010-09-06 07:50:31
【问题描述】:

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

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

【问题讨论】:

    标签: monitoring text-files


    【解决方案1】:

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

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

    Get-Content someFile.txt -wait
    

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

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

    【讨论】:

    • 在Notepad++中,对于在Plugins菜单下找不到Document Monitor的用户,可以使用Plugin Manager安装。
    • 从网络打开文件时两者都不起作用:(
    • 我发现文档监视器只有在我关闭正在写入我要监视的文件的应用程序后才会更新。
    • Get-Content 给我一个错误提示“该进程无法访问该文件,因为它正被另一个进程使用。”
    • 目前似乎没有 Document Monitor 插件,但View 菜单底部有一个内置的“监控”选项。
    【解决方案2】:

    【讨论】:

    • 哈哈,我记得我们是如何创造“tailing wget-log”这个短语的(意味着等待很长的下载完成)
    • 如其他地方所述,tail -f 是命令。另外,如果你安装了 git,你可能有尾巴。
    【解决方案3】:

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

    【讨论】:

    • 它在 gnuwin32 中,也有:gnuwin32.sourceforge.net/packages/coreutils.htm
    • 我没有运气;我试图跟踪的文件每秒被写入一次,所以它可能总是处于锁定状态。我得到“无法打开阅读:设备或资源忙”。我正在使用 tail 8.23(cygwin 软件包版本 8.23-4)。
    【解决方案4】:

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

    Get-Content someFile.txt -wait
    

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

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

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

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

        tail -n 50 -f whatever.log
        

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

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

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

        只给你带有“错误”的行。

        祝你好运!

        【讨论】:

        • 在我的路径中。我的 PATH 是什么?
        【解决方案7】:

        FileSystemWatcher 是一种享受,尽管您必须对触发重复事件有点小心 - 1st link from Google - 但记住这一点可以产生很好的结果。

        【讨论】:

          【解决方案8】:

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

          【讨论】:

          • 我真的很喜欢 LOGEXPERT 但我不能像在 Windows7 上一样在 Windows10 上正常工作,我无法使用 sftp 打开文件
          【解决方案9】:

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

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

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

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

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

          【讨论】:

          • 这绝对是一颗隐藏的宝石。
          【解决方案10】:

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

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

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

          【讨论】:

            【解决方案11】:

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

            【讨论】:

            • 我测试了一些,尽管它的规格非常轻微,但 SnakeTail 做的一件事非常好:使用通配符模式尾随文件。例如。在 Sitecore 开发中,您将拥有一个名为 log.20150901.220158.txt 的日志文件,但在重新编译/配置更改时,将生成一个具有不同时间戳的新文件。使用例如设置 SnakeTail wildcard-pattern log.*.txt 将自动尾随下一个文件,无需切换目标。谢谢你的小费,埃里克。
            • 不客气,伙计。
            【解决方案12】:

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

            【讨论】:

              【解决方案13】:

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

              【讨论】:

                【解决方案14】:

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

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

                【讨论】:

                  【解决方案15】:

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

                  【讨论】:

                    【解决方案16】:

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

                    【讨论】:

                      【解决方案17】:

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

                      【讨论】:

                        【解决方案18】:

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

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

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

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

                        希望对你有帮助

                        【讨论】:

                        • -1 NullReferenceException - 没有经过很好的测试?
                        • 真的反对吗?哇,我不卖这个 - 只是想说明它是如何做到的。你在运行之前把你的路径放在配置文件中了吗?
                        【解决方案19】:
                        @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
                        

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

                        【讨论】:

                        • 它对我来说非常有效。
                        【解决方案20】:

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

                        【讨论】:

                          【解决方案21】:

                          我在 cygwin 中第二个“tail -f”。我认为 Tail for Win32 会完成同样的事情。

                          【讨论】:

                            【解决方案22】:

                            【讨论】:

                              【解决方案23】:

                              我自己做了一个小查看器:

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

                              【讨论】:

                              • 希望它经过良好测试... ;p
                              猜你喜欢
                              • 2017-04-30
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 2013-08-20
                              • 1970-01-01
                              相关资源
                              最近更新 更多