テキストファイルをリアルタイムで監視する方法 [終了]
-
09-06-2019 - |
質問
ある程度閉じたシステムでデバッグを行うには、テキストをファイルに出力する必要があります。
ファイルへの変更を検出し、リアルタイムで出力する Windows 上で実行されるツール (コンソール ベースかどうかに関係なく) を知っている人はいますか?
解決
- Win32 のテール
- アパッチチェーンソー - これを使用しました log4net ログ, 、ファイルが特定の形式である必要がある場合があります
他のヒント
私は複数のタスクを実行するツールが好きです。Notepad++ はメモ帳の優れた代替品であり、優れた機能を発揮する Document Monitor プラグイン (標準 msi とともにインストールされます) を備えています。また、ポータブルなので、サムドライブに保存してどこでも使用できます。
コマンド ライン オプションに関しては、PowerShell (実際には新しいコマンド ライン) には、すでに述べた優れた機能があります。
Get-Content someFile.txt -wait
ただし、コマンドラインで正規表現を使用してフィルタリングすることもできます。
Get-Content web.log -wait | where { $_ -match "ERROR" }
cygwin では「tail -f」を使用します。
私が使う ベアテイル Windows でこれを行うため。これは無料で、複数のファイルを追跡するためのタブや設定可能な強調表示など、いくつかの優れた機能を備えています。
使用するとき Windows PowerShell 次のことができます。
Get-Content someFile.txt -wait
FileSystemWatcher は便利に機能しますが、重複したイベントの発生には少し注意する必要があります。 Google からの最初のリンク - しかし、それを念頭に置くと、素晴らしい結果が得られる可能性があります。
これまでのところ、テールが最良の答えです。
Windows を使用していない場合は、おそらくすでに tail を持っているでしょう。
Windows を使用している場合は、ここから多数の Unix コマンド ライン ツールを入手できます。 http://unxutils.sourceforge.net/ - これらを解凍し、PATH のどこかに置きます。
次に、ログ ファイルがあるのと同じフォルダーからコマンド プロンプトでこれを実行します。
tail -n 50 -f anything.log
これにより、ファイルの最後の 50 行が表示され、ファイルの更新に応じて更新されます。
grep と tail を組み合わせると、次のように素晴らしい結果が得られます。
tail -n 50 -f whatever.log | grep Error
「エラー」を含む行だけを表示します
幸運を!
遅い答えですが、誰かにとって役立つかもしれません- ログエキスパート Windows 用の興味深いテール ユーティリティのようです。
利用した ファイルシステムウォッチャー 最近構築したコンポーネントのテキスト ファイルの監視用。もっと良い選択肢があるかもしれません(私は何も見つけられませんでした) 限定 研究)しかし、それはうまくいったようです:)
くそ、悪い、あなたは実際、すべてを自分に代わって実行してくれるツールを求めているのです...
まあ、運悪く自分でロールしたい場合は;)
Microsoft の SMSTrace (現在は CMTrace と呼ばれており、Windows の一部のバージョンでは [スタート] メニューから直接利用できます) を試してください。
これは、別のファイルによる書き込みのためにロックされている場合でも、テキスト ファイルの更新をリアルタイムで監視する優れた GUI ツールです。
説明に騙されないでください。.txt、.log、または .csv を含むあらゆるファイルを監視できます。
ロックされたファイルを監視する機能は非常に便利です, 、そしてそれがこのユーティリティが輝く理由の1つです。
最も優れた機能の 1 つは、ラインのカラーリングです。「ERROR」という単語が表示されると、線が赤になります。「WARN」という単語が表示されると、線が黄色になります。これにより、ログを追跡しやすくなります。
スネークテール。それは良い選択肢です。http://snakest.com/snaketail/
System.Diagnostics で FileSystemWatcher を使用することもできます。
MSDN より:
public class ウォッチャー {
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 for Win32 と Tail on Cygwin の両方を使用しました。どちらも優れていることがわかりましたが、クラッシュすることなくインターネット上でファイルを効率的に追跡できるため、Cygwin の方が少し好きですが (Tail for Win32 は場合によってはクラッシュしました)。
したがって、基本的には Cygwin で tail を使用し、出力をローカル マシン上のファイルにリダイレクトします。次に、このファイルを Vim で開き、必要に応じてリロード (:e) します。
BareTail の場合は +1。実際に使っています ベアテールプロ, 、基本的な検索文字列または正規表現を使用した検索文字列を使用して、末尾にリアルタイムのフィルタリングを提供します。
リストを完成させるために、多くの便利なツール (tail も含まれます) の GNU WIN32 ポートへのリンクをここに示します。GNUWin32 コアユーティリティ
誰も Trace32 (または Trace64) について言及していないことに驚いています。これらは優れた GUI を提供し、エラーなどを強調表示する優れた (無料) Microsoft ユーティリティです。フィルタリングもあり、まさに必要なもののように聞こえます。
これを行うために私が書いたユーティリティを次に示します。
FileSystemWatcher を使用して、ローカル フォルダーまたはネットワーク共有内のログ ファイルの変更を検索し (マウントする必要はなく、UNC パスを指定するだけです)、新しいコンテンツをコンソールに追加します。
github 上: https://github.com/danbyrne84/multitail
http://www.danielbyrne.net/projects/multitail
お役に立てれば
ファイルモン は、あらゆる種類のファイル アクセスを検出できる無料のスタンドアロン ツールです。不要なものをフィルタリングして除外できます。ただし、実際に変更されたデータは表示されません。
cygwin で 2 番目の「tail -f」を実行します。Tail for Win32 も同じことを達成できると思います。
私は自分で小さなビューアを作成しました。
@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
コマンドプロンプトを使った方法です。