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

StackOverflow https://stackoverflow.com/questions/18632

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

Другие советы

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

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

Get-Content someFile.txt -wait

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

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

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

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

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

Get-Content someFile.txt -wait

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

Хвост - лучший ответ на данный момент.

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

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

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

хвост -n 50 -f как угодно.log

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

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

ошибка tail -n 50 -f whatever.log | grep

выдает вам только строки с надписью "Error" в них

Удачи вам!

Поздний ответ, хотя и может быть кому-то полезен -- ЛОГЭКСПЕРТ кажется, интересная хвостовая утилита для Windows.

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

Черт, виноват, на самом деле тебе нужен инструмент, который сделает все это за тебя..

Ну, если вам не повезет и вы захотите сделать свой собственный бросок ;)

Попробуйте SMSTrace от Microsoft (теперь называется CMTrace и доступен непосредственно в меню "Пуск" в некоторых версиях Windows).

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

Пусть вас не вводит в заблуждение описание, оно способно отслеживать любой файл, включая .txt, .log или .csv.

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

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

Змеиный хвост.Это хороший вариант.http://snakenest.com/snaketail/

Вы можете использовать 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

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

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

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

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

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

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

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

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

на github: https://github.com/danbyrne84/multitail

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

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

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

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

Я сам сделал крошечный просмотрщик:

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

@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

Способ сделать это с помощью командной строки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top