Как отслеживать текстовый файл в реальном времени

Для целей отладки в несколько закрытой системе мне нужно вывести текст в файл.

Кто-нибудь знает инструмент, который работает на Windows (на основе консоли или нет), который обнаруживает изменения в файле и выводит их в режиме реального времени?

Ответ 2

Мне нравятся инструменты, которые будут выполнять более одной задачи, Notepad ++ - отличная замена блокнота и имеет плагин Document Monitor (устанавливается со стандартным msi), который отлично работает. Он также переносится, поэтому вы можете использовать его на флэш-накопителе для использования в любом месте.

Для параметра командной строки PowerShell (это действительно новая командная строка) имеет замечательную функцию, о которой уже упоминалось.

Get-Content someFile.txt -wait

Но вы также можете фильтровать в командной строке, используя регулярное выражение

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

Ответ 3

Я использую "tail -f" под cygwin.

Ответ 4

Я использую BareTail для этого в Windows. Он бесплатный и имеет некоторые приятные функции, такие как вкладки для обработки нескольких файлов и настраиваемой подсветки.

Ответ 5

При использовании Windows PowerShell вы можете сделать следующее:

Get-Content someFile.txt -wait

Ответ 6

FileSystemWatcher работает с удовольствием, хотя вам нужно быть немного осторожным в стрельбе по дублирующим событиям - 1-я ссылка от Google - но с этим в виду, могут дать большие результаты.

Ответ 7

Хвост - лучший ответ.

Если вы не используете Windows, у вас, вероятно, уже есть хвост.

Если вы используете Windows, вы можете получить здесь множество инструментов командной строки Unix: http://unxutils.sourceforge.net/ - разархивируйте их и поместите их где-нибудь в свою ПУТЬ.

Затем просто сделайте это в командной строке из той же папки, в которой находится ваш файл журнала:

tail -n 50 -f any.log

Это покажет вам последние 50 строк файла и будет обновляться по мере обновления файла.

Вы можете комбинировать grep с хвостом с отличными результатами - что-то вроде этого:

tail -n 50 -f any.log | Ошибка grep

дает вам только строки с "Ошибка" в нем

Удачи!

Ответ 8

Поздний ответ, хотя может быть полезен для кого-то - LOGEXPERT кажется интересной утилитой хвоста для окон.

Ответ 9

Я использовал FileSystemWatcher для мониторинга текстовых файлов для недавно созданного компонента. Могут быть лучшие варианты (я никогда не находил ничего в моем ограниченном исследовании), но это, казалось, прекрасно делало трюк:)

Дерьмо, мое плохое, вы на самом деле после инструмента, чтобы сделать все это для вас.

Хорошо, если вам не повезет и вы хотите бросить свои собственные;)

Ответ 11

Yor может использовать FileSystemWatcher в System.Diagnostics.

Из MSDN:

публичный класс Watcher {

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

Ответ 12

Просто бесстыдный плагин, чтобы получить ответ, но у меня есть бесплатное веб-приложение под названием Hacksaw, используемое для просмотра файлов log4net, Я включил опции автоматического обновления, чтобы вы могли получать обновления в реальном времени, не обновляя браузер все время.

Ответ 13

Да, я использовал оба Tail для Win32 и хвост на Cygwin. Я считаю, что оба отличные, хотя я предпочитаю Cygwin немного, так как я могу эффективно управлять файлами через Интернет без сбоев (в некоторых случаях Tail for Win32 врезался в меня).

Итак, в основном, я бы использовал хвост на Cygwin и перенаправил вывод на файл на моем локальном компьютере. Затем я бы открыл этот файл в Vim и перезагрузил (: e), когда это необходимо.

Ответ 14

+1 для BareTail. Я фактически использую BareTailPro, который обеспечивает фильтрацию в реальном времени на хвосте с помощью основных строк поиска или строк поиска с использованием регулярного выражения.

Ответ 15

Чтобы сделать здесь полный список ссылок на порты GNU WIN32 многих полезных инструментов (среди них есть хвост). GNUWin32 CoreUtils

Ответ 16

Удивленный никто не упомянул Trace32 (или Trace64). Это отличные (бесплатные) утилиты Microsoft, которые дают приятный графический интерфейс и выделяют любые ошибки и т.д. Он также имеет фильтрацию и звучит точно так, как вам нужно.

Ответ 17

Попробуйте SMSTrace из Microsoft.

Его блестящий инструмент графического интерфейса, который отслеживает обновления любого текстового файла в реальном времени, даже если он заблокирован для записи другим файлом.

Не обманывайте себя описанием, способным контролировать любой файл, включая .txt,.log или .csv.

Его способность контролировать заблокированные файлы чрезвычайно полезна, и это одна из причин, почему эта утилита сияет.

Одной из самых приятных особенностей является окраска строк. Если он видит слово "ОШИБКА", линия становится красной. Если он видит слово "WARN", линия становится желтой. Это значительно облегчает выполнение журналов.

Ответ 18

FileMon - это бесплатный автономный инструмент, который может обнаруживать все виды доступа к файлам. Вы можете отфильтровать любые нежелательные. Он не показывает вам данные, которые действительно изменились.

Ответ 19

Я второй "хвост -f" в cygwin. Я предполагаю, что Tail для Win32 выполнит то же самое.

Ответ 21

Вот утилита, которую я написал, чтобы сделать именно это:

Он использует FileSystemWatcher для поиска изменений в файлах журналов в локальных папках или сетевых ресурсах (не нужно монтировать, просто предоставить UNC-путь) и добавляет новый контент в консоль.

в github: https://github.com/danbyrne84/multitail

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

Надеюсь, что это поможет

Ответ 23

@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

Командная строка делает это.