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


61

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

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

34
  0

ха-ха я помню, как мы придумали фразу «хвостохранилища Wget-журнал» (средство ожидания в течение длительного до окончания загрузки) 24 сен. 082008-09-24 16:17:32

+3

как упомянуто в другом месте, 'хвост -f' является команда. Кроме того, если у вас установлен git, у вас, вероятно, есть хвост. 18 май. 132013-05-18 19:40:52


3

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

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

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


15

Я использую «хвост -f» под Cygwin.

  0

это в gnuwin32, а также: http://gnuwin32.sourceforge.net/packages/coreutils.htm 26 май. 142014-05-26 15:38:14

  0

Мне не повезло с этим; файл, который я пытаюсь получить, записывается один раз в секунду, поэтому, возможно, он всегда находится в заблокированном состоянии. Я получаю "не могу открыть для чтения: устройство или ресурс занят". Я использую tail 8.23 ​​(пакет cygwin версии 8.23-4). 19 дек. 142014-12-19 20:49:22


6

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


1

Возможно, вы используете 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); 
} 

}

Вы также можете по этой ссылке Watching Folder Activity in VB.NET


0

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


0

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


13

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

Get-Content someFile.txt -wait 

4

Хвост лучший ответ до сих пор.

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

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

Тогда просто сделать это в командной строке из той же папке файл журнала находится в:

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

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

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

хвост -n 50 -f whatever.log | Grep Ошибка

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

Удачи!

  0

в моей ПУТЬ. Что такое мой ПУТЬ? 07 май. 142014-05-07 11:37:12


14

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


1

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


1

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

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


1

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


59

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

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

Get-Content someFile.txt -wait 

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

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

Очень приятно! +1 04 июн. 092009-06-04 01:54:40

+4

В Notepad ++ для тех, кто не может найти Document Monitor в меню Plugins, его можно установить с помощью диспетчера подключаемых модулей. 10 сен. 122012-09-10 14:03:41

  0

Оба не работают, когда файл открывается из сети :( 30 май. 142014-05-30 11:43:08

  0

Я обнаружил, что просмотр документа только обновления после закрытия приложения, которое записывается в файл, который я пытаюсь контролировать. 19 дек. 142014-12-19 20:57:55

  0

Get-Content дает мне ошибку, которая говорит «Процесс не может получить доступ к файлу, потому что он используется другим процессом». 19 дек. 142014-12-19 21:12:38


0

Tail for Win32


1

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


1

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


1

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

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

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

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

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

  0

Это определенно скрытый драгоценный камень. 28 июл. 142014-07-28 03:57:16


0

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

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

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

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

Надеется, что это помогает

  0

-1 NullReferenceException - не очень хорошо протестировано? 22 авг. 142014-08-22 05:20:38

+1

серьезно нисходящее для этого: ничего себе, им не продавать это - просто пытаюсь чтобы проиллюстрировать, как это можно сделать. Поставили ли вы свои пути в файле конфигурации перед его запуском? 26 авг. 142014-08-26 11:07:10


0

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

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

+1

Надеюсь, что это хорошо протестировано ...; p 26 авг. 142014-08-26 11:08:00


2

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

+1

Я проверил несколько, и хотя это очень легкомысленно, SnakeTail делает 1 вещь очень хорошо: хвост файла с шаблоном подстановки. Например, в Sitecore, у вас будет файл журнала, называемый 'log.20150901.220158.txt', но при изменении перекомпиляции/конфигурации новый файл будет сгенерирован с другой отметкой времени. Настройка SnakeTail с помощью, например, wildcard-pattern 'log. *. txt' автоматически закроет следующий файл в строке, не нужно переключать цели. Thx для наконечника, Эрик. 02 сен. 152015-09-02 07:18:51

  0

Добро пожаловать, чувак. 30 ноя. 152015-11-30 16:33:08


4

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

  0

Я действительно как LOGEXPERT, но я не могу хорошо работать в Windows10, как в Windows7, я не могу открыть файл с sftp 14 июл. 162016-07-14 04:34:01


0
@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 

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