development

실시간으로 텍스트 파일을 모니터링하는 방법

big-blog 2020. 11. 6. 21:04
반응형

실시간으로 텍스트 파일을 모니터링하는 방법


다소 닫힌 시스템에서 디버깅 목적으로 텍스트를 파일로 출력해야합니다.

파일의 변경 사항을 감지하고 실시간으로 출력하는 Windows (콘솔 기반 여부)에서 실행되는 도구를 아는 사람이 있습니까?



저는 하나 이상의 작업을 수행하는 도구를 좋아합니다. Notepad ++는 훌륭한 메모장 대체품이며 훌륭하게 작동하는 Document Monitor 플러그인 (표준 msi와 함께 설치)이 있습니다. 또한 휴대용이므로 어디서나 사용할 수 있도록 썸 드라이브에 보관할 수 있습니다.

명령 줄 옵션의 경우 PowerShell (실제로 새로운 명령 줄임)에는 이미 언급 한 훌륭한 기능이 있습니다.

Get-Content someFile.txt -wait

그러나 정규 표현식을 사용하여 명령 줄에서 필터링 할 수도 있습니다.

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

cygwin에서 "tail -f"를 사용합니다.


Windows PowerShell사용 하는 경우 다음을 수행 할 수 있습니다.

Get-Content someFile.txt -wait

Windows에서이 작업을 수행하기 위해 BareTail사용 합니다. 무료이며 여러 파일을 추적하는 탭 및 구성 가능한 강조 표시와 같은 몇 가지 멋진 기능이 있습니다.


FileSystemWatcher는 잘 작동하지만 중복 이벤트 발생 ( Google의 첫 번째 링크) 에 대해 약간주의 해야하지만이를 염두에두면 훌륭한 결과를 얻을 수 있습니다.


Tail은 지금까지 가장 좋은 답변입니다.

Windows를 사용하지 않는다면 이미 tail이있을 것입니다.

Windows를 사용하는 경우 http://unxutils.sourceforge.net/ 에서 전체 Unix 명령 줄 도구를 얻을 수 있습니다 .-압축을 풀고 PATH에 넣으십시오.

그런 다음 로그 파일이있는 동일한 폴더의 명령 프롬프트에서이 작업을 수행하십시오.

tail -n 50 -f whatever.log

그러면 파일의 마지막 50 줄이 표시되고 파일이 업데이트되면 업데이트됩니다.

다음과 같이 grep과 tail을 결합하여 훌륭한 결과를 얻을 수 있습니다.

tail -n 50 -f whatever.log | grep 오류

"오류"가있는 줄만 제공합니다.

행운을 빕니다!


늦은 답변은 누군가에게 도움이 될 수 있지만 LOGEXPERT 는 Windows에 대한 흥미로운 꼬리 유틸리티 인 것 같습니다.


최근에 구축 한 구성 요소의 텍스트 파일을 모니터링하기 위해 FileSystemWatcher사용했습니다 . 더 나은 옵션이있을 수 있지만 ( 제한된 연구 에서 아무것도 찾지 못했습니다 ) 트릭을 훌륭하게 수행하는 것 같습니다. :)

맙소사, 당신은 실제로 당신을 위해 모든 것을 할 수있는 도구를 찾고 있습니다 ..

운이 나쁘고 자신의 롤을 원한다면 글쎄요;)


Microsoft의 SMSTrace (현재 CMTrace라고하며 일부 Windows 버전의 시작 메뉴에서 직접 사용 가능)를 사용해보십시오.

다른 파일에 의해 쓰기 위해 잠긴 경우에도 실시간으로 모든 텍스트 파일의 업데이트를 모니터링하는 훌륭한 GUI 도구입니다.

.txt, .log 또는 .csv를 포함한 모든 파일을 모니터링 할 수있는 설명에 속지 마십시오.

잠긴 파일을 모니터링하는 기능은 매우 유용 하며이 유틸리티가 빛나는 이유 중 하나입니다.

가장 멋진 기능 중 하나는 선 채색입니다. "ERROR"라는 단어가 표시되면 줄이 빨간색이됩니다. "WARN"이라는 단어가 표시되면 줄이 노란색이됩니다. 이렇게하면 로그를 훨씬 쉽게 추적 할 수 있습니다.


스네이크 테일. 좋은 선택입니다. http://snakenest.com/snaketail/


System.Diagnostics에서 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 파일을 보는 데 사용되는 Hacksaw 라는 무료 웹 기반 앱이 있습니다. 항상 브라우저를 새로 고칠 필요없이 거의 실시간으로 업데이트 할 수 있도록 자동 새로 고침 옵션을 추가했습니다.


예, 나는 Win32에 Tail과 Cygwin에 tail을 모두 사용했습니다. 나는 충돌없이 인터넷을 통해 효율적으로 파일을 추적 할 수 있기 때문에 Cygwin을 약간 선호하지만 둘 다 훌륭하다는 것을 알았습니다. (Tail for Win32가 어떤 경우에 충돌했습니다).

So basically, I would use tail on Cygwin and redirect the output to a file on my local machine. I would then have this file open in Vim and reload (:e) it when required.


+1 for BareTail. I actually use BareTailPro, which provides real-time filtering on the tail with basic search strings or search strings using regex.


To make the list complete here's a link to the GNU WIN32 ports of many useful tools (amongst them is tail). GNUWin32 CoreUtils


Surprised no one has mentioned Trace32 (or Trace64). These are great (free) Microsoft utilities that give a nice GUI and highlight any errors, etc. It also has filtering and sounds like exactly what you need.


Here's a utility I wrote to do just that:

It uses a FileSystemWatcher to look for changes in log files within local folders or network shares (don't have to be mounted, just provide the UNC path) and appends the new content to the console.

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

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

Hope this helps


FileMon is a free stand alone tool that can detect all kinds of file access. You can filter out any unwanted. It does not show you the data that has actually changed though.


I second "tail -f" in cygwin. I assume that Tail for Win32 will accomplish the same thing.


Tail for Win32


I did a tiny viewer by my own:

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

A command prompt way of doing it.

참고URL : https://stackoverflow.com/questions/18632/how-to-monitor-a-text-file-in-realtime

반응형