关于监视:如何实时监视文本文件

关于监视:如何实时监视文本文件

How to monitor a text file in realtime

出于调试目的,我必须将文本输出到文件中。

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


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

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

1
Get-Content someFile.txt -wait

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

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

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

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


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

1
Get-Content someFile.txt -wait


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


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

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

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

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

1
tail -n 50 -f whatever.log

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

您可以将grep与tail结合使用,从而获得不错的效果-如下所示:

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

只需在其中添加"错误"即可。

祝你好运!


FileSystemWatcher可以解决问题,尽管您确实要对重复事件的触发有所注意-Google的第一个链接-但记住这一点会产生很好的结果。


最新答案,尽管可能对某人有所帮助-LOGEXPERT似乎是Windows的有趣尾部实用程序。


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

糟糕,我不好,您实际上是在寻找一种可以为您完成全部任务的工具。.

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


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

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

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

它监视锁定文件的功能非常有用,这也是该实用程序亮起的原因之一。

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


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


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


您可以在System.Diagnostics中使用FileSystemWatcher。

来自MSDN:

公共班级观察者
{

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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中监视文件夹活动


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

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


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


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


这是我编写的用于执行此操作的实用程序:

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

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

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

希望这会有所帮助


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


1
2
3
4
5
6
7
8
9
10
11
12
@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

一种命令提示符方式。


Win32的尾巴


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


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


我自己做了一个很小的观众:

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


推荐阅读