Comment surveiller un fichier texte en temps réel

Pour le débogage dans un système quelque peu fermé, je dois sortir du texte dans un fichier.

Est-ce que quelqu’un connaît un outil qui fonctionne sur Windows (basé sur la console ou non) qui détecte les modifications apscopes à un fichier et les affiche en temps réel?

  • Queue pour Win32
  • Apache Chainsaw – utilisé avec les journaux log4net , peut nécessiter que le fichier soit dans un certain format

J’aime les outils qui effectueront plus d’une tâche, Notepad ++ est un excellent remplacement de bloc-notes et possède un plug-in Document Monitor (installe avec msi standard) qui fonctionne très bien. Il est également portable, vous pouvez donc l’avoir sur une clé USB pour l’utiliser partout.

Pour une option de ligne de commande, PowerShell (qui est en fait une nouvelle ligne de commande) a déjà une fonctionnalité intéressante.

 Get-Content someFile.txt -wait 

Mais vous pouvez également filtrer sur la ligne de commande en utilisant une expression régulière

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

J’utilise “tail -f” sous cygwin.

J’utilise BareTail pour cela sous Windows. C’est gratuit et a quelques fonctionnalités intéressantes, telles que des tabs pour la queue de plusieurs fichiers et la mise en évidence configurable.

Lorsque vous utilisez Windows PowerShell, vous pouvez procéder comme suit:

 Get-Content someFile.txt -wait 

FileSystemWatcher fonctionne bien, même si vous devez être un peu prudent en ce qui concerne le déclenchement d’événements en double – le premier lien de Google – mais garder cela à l’esprit peut donner d’excellents résultats.

La queue est la meilleure réponse à ce jour.

Si vous n’utilisez pas Windows, vous avez probablement déjà la queue.

Si vous utilisez Windows, vous pouvez obtenir toute une série d’outils de ligne de commande Unix à partir d’ici: http://unxutils.sourceforge.net/ – Décompressez-les et placez-les quelque part dans votre PATH.

Ensuite, faites-le simplement à l’invite de commande du même dossier que votre fichier journal:

tail -n 50 -f what.log

Cela vous montrera les 50 dernières lignes du fichier et se mettra à jour au fur et à mesure des mises à jour du fichier.

Vous pouvez combiner grep avec tail avec d’excellents résultats – quelque chose comme ceci:

tail -n 50 -f what.log | Erreur grep

vous donne juste des lignes avec “erreur” dedans

Bonne chance!

Réponse tardive, peut-être utile pour quelqu’un – LOGEXPERT semble être un utilitaire de queue intéressant pour Windows.

J’ai utilisé FileSystemWatcher pour surveiller des fichiers texte pour un composant que j’ai récemment construit. Il y a peut-être de meilleures options (je n’ai jamais rien trouvé dans mes recherches limitées ) mais cela semblait bien faire 🙂

Crap, mon mauvais, vous êtes en fait après un outil pour tout faire pour vous ..

Eh bien, si vous êtes malchanceux et que vous voulez lancer votre propre;)

Queue de serpent. C’est une bonne option. http://snakenest.com/snaketail/

Essayez SMSTrace de Microsoft (maintenant appelé CMTrace, et directement disponible dans le menu Démarrer de certaines versions de Windows)

C’est un outil graphique génial qui surveille les mises à jour de tout fichier texte en temps réel, même s’il est verrouillé pour être écrit par un autre fichier.

Ne vous laissez pas berner par la description, elle est capable de surveiller n’importe quel fichier, y compris .txt, .log ou .csv.

Sa capacité à surveiller les fichiers verrouillés est extrêmement utile et constitue l’une des raisons pour lesquelles cet utilitaire brille.

Une des caractéristiques les plus intéressantes est la coloration des lignes. S’il voit le mot “ERROR”, la ligne devient rouge. S’il voit le mot “WARN”, la ligne devient jaune. Cela rend les journaux beaucoup plus faciles à suivre.

Yor peut utiliser FileSystemWatcher dans System.Diagnostics.

De MSDN:

classe publique Watcher {

 public static void Main() { Run(); } [PermissionSet(SecurityAction.Demand, Name="FullTrust")] public static void Run() { ssortingng[] 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); } 

}

Vous pouvez également suivre ce lien Regarder l’activité des dossiers dans VB.NET

Juste un plug-in éhonté sur la réponse, mais j’ai une application Web gratuite appelée Hacksaw utilisée pour visualiser les fichiers log4net. J’ai mis en place une option de rafraîchissement automatique afin que vous puissiez vous donner des mises à jour en temps quasi réel sans avoir à actualiser le navigateur tout le temps.

Oui, j’ai utilisé Tail for Win32 et tail sur Cygwin. J’ai trouvé les deux excellents, bien que je préfère légèrement Cygwin, car je suis capable de redirect efficacement les fichiers sur Internet sans planter (Tail for Win32 est tombé en panne dans certains cas).

Donc, en gros, j’utiliserais tail sur Cygwin et redirectais la sortie vers un fichier sur mon ordinateur local. Je voudrais alors ouvrir ce fichier dans Vim et le recharger (: e) le cas échéant.

+1 pour BareTail. J’utilise en fait BareTailPro , qui fournit un filtrage en temps réel sur la queue avec des chaînes de recherche de base ou des chaînes de recherche utilisant regex.

Pour compléter la liste, voici un lien vers les ports GNU WIN32 de nombreux outils utiles (parmi lesquels figure tail). GNUWin32 CoreUtils

Surpris, personne n’a mentionné Trace32 (ou Trace64). Ce sont d’excellents utilitaires Microsoft (gratuits) qui donnent une interface graphique agréable et mettent en évidence les erreurs éventuelles, etc.

FileMon est un outil autonome gratuit capable de détecter tous les types d’access à des fichiers. Vous pouvez filtrer tous les indésirables. Il ne vous montre pas les données qui ont effectivement changé cependant.

Je seconde “queue -f” en cygwin. Je suppose que Tail for Win32 accomplira la même chose.

Queue pour Win32

Voici un utilitaire que j’ai écrit pour faire exactement cela:

Il utilise un FileSystemWatcher pour rechercher les modifications dans les fichiers journaux dans les dossiers locaux ou les partages réseau (il n’est pas nécessaire de les monter, il suffit de fournir le chemin UNC) et ajoute le nouveau contenu à la console.

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

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

J’espère que cela t’aides

J’ai fait un minuscule spectateur par moi-même:

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 

Une invite de commande pour le faire.