كيفية مراقبة ملف نصي في الوقت الحقيقي [مغلق]

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

  •  09-06-2019
  •  | 
  •  

سؤال

لأغراض تصحيح الأخطاء في نظام مغلق إلى حد ما، لا بد لي من إخراج النص إلى ملف.

هل يعرف أحد أداة تعمل على النوافذ (سواء كانت تعتمد على وحدة التحكم أم لا) تكتشف التغييرات في الملف وتخرجها في الوقت الفعلي؟

هل كانت مفيدة؟

المحلول

نصائح أخرى

تعجبني الأدوات التي تؤدي أكثر من مهمة واحدة، ويعد برنامج Notepad++ بديلاً رائعًا للمفكرة ويحتوي على مكون إضافي لمراقبة المستندات (يتم تثبيته باستخدام msi القياسي) ويعمل بشكل رائع.كما أنه محمول بحيث يمكنك وضعه على محرك أقراص صغير لاستخدامه في أي مكان.

بالنسبة لخيار سطر الأوامر، يتمتع PowerShell (وهو سطر أوامر جديد بالفعل) بميزة رائعة سبق ذكرها.

Get-Content someFile.txt -wait

ولكن يمكنك أيضًا التصفية في سطر الأوامر باستخدام تعبير عادي

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

أستخدم "tail -f" ضمن cygwin.

أنا أستعمل باريتيل للقيام بذلك على نظام التشغيل Windows.إنه مجاني ويحتوي على بعض الميزات الرائعة، مثل علامات التبويب لتتبع ملفات متعددة والتمييز القابل للتكوين.

عند الاستخدام ويندوز باورشيل يمكنك القيام بما يلي:

Get-Content someFile.txt -wait

يعمل FileSystemWatcher بشكل جيد، على الرغم من أنه يتعين عليك توخي الحذر قليلاً بشأن إطلاق الأحداث المكررة - الرابط الأول من جوجل - ولكن مع أخذ ذلك في الاعتبار يمكن أن يؤدي إلى نتائج عظيمة.

الذيل هو أفضل إجابة حتى الآن.

إذا كنت لا تستخدم Windows، فمن المحتمل أن يكون لديك ذيل بالفعل.

إذا كنت تستخدم Windows، فيمكنك الحصول على عدد كبير من أدوات سطر أوامر Unix من هنا: http://unxutils.sourceforge.net/ - قم بفك ضغطها ووضعها في مكان ما في المسار الخاص بك.

ثم قم بذلك فقط في موجه الأوامر من نفس المجلد الموجود فيه ملف السجل الخاص بك:

الذيل -ن 50 -f مهما كان.log

سيُظهر لك هذا آخر 50 سطرًا من الملف وسيتم تحديثه مع تحديث الملف.

يمكنك الجمع بين grep وtail للحصول على نتائج رائعة - شيء من هذا القبيل:

ذيل -n 50 -f أي شيء. خطأ GREP

يمنحك فقط أسطرًا تحتوي على "خطأ" فيها

حظ سعيد!

الإجابة المتأخرة، رغم أنها قد تكون مفيدة لشخص ما - خبير السجل يبدو أنها أداة مساعدة مثيرة للاهتمام لنظام التشغيل Windows.

لقد استخدمت FileSystemWatcher لمراقبة الملفات النصية للمكون الذي قمت بإنشائه مؤخرًا.قد تكون هناك خيارات أفضل (لم أجد أي شيء في ملفي محدود البحث) ولكن يبدو أن هذا يؤدي إلى الحيلة بشكل جيد :)

يا إلهي، أنت في الواقع تبحث عن أداة للقيام بكل ذلك من أجلك.

حسنًا، إذا لم يحالفك الحظ وأردت أن تدحرج بنفسك ;)

جرب SMSTrace من Microsoft (يُسمى الآن CMTrace، وهو متوفر مباشرة في قائمة "ابدأ" في بعض إصدارات Windows)

إنها أداة واجهة المستخدم الرسومية الرائعة التي تراقب التحديثات لأي ملف نصي في الوقت الفعلي، حتى لو كان مقفلاً للكتابة بواسطة ملف آخر.

لا تنخدع بالوصف، فهو قادر على مراقبة أي ملف، بما في ذلك .txt أو .log أو .csv.

قدرتها على مراقبة الملفات المقفلة مفيدة للغاية, ، وهو أحد أسباب تألق هذه الأداة.

واحدة من أجمل الميزات هي تلوين الخط.إذا رأى كلمة "خطأ"، يصبح الخط أحمر.إذا رأى كلمة "تحذير"، يصبح الخط أصفر.وهذا يجعل متابعة السجلات أسهل كثيرًا.

ذيل الثعبان.إنه خيار جيد.http://snakenest.com/snaketail/

يمكنك استخدام FileSystemWatcher في System.Diagnostics.

من 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 والذيل لـ Cygwin.لقد وجدت كلاهما ممتازين، على الرغم من أنني أفضل Cygwin قليلاً لأنني قادر على تتبع الملفات عبر الإنترنت بكفاءة دون حدوث أعطال (تعطل Tail for Win32 معي في بعض الحالات).

لذا، في الأساس، سأستخدم tail على Cygwin وأعيد توجيه الإخراج إلى ملف على جهازي المحلي.سأقوم بعد ذلك بفتح هذا الملف في Vim وإعادة تحميله (:e) عند الحاجة.

+1 لبارتيل.أنا فعلا استخدام بيرتيلبرو, ، والذي يوفر تصفية في الوقت الفعلي على الذيل باستخدام سلاسل البحث الأساسية أو سلاسل البحث باستخدام التعبير العادي.

ولإكمال القائمة، إليك رابط لمنافذ GNU WIN32 التي تحتوي على العديد من الأدوات المفيدة (من بينها الذيل).GNUWin32 CoreUtils

مندهش أنه لم يذكر أحد Trace32 (أو Trace64).هذه أدوات مساعدة رائعة (مجانية) من Microsoft توفر واجهة مستخدم رسومية جميلة وتسلط الضوء على أي أخطاء، وما إلى ذلك.كما أن لديها ميزة التصفية والأصوات مثل ما تحتاجه بالضبط.

إليك أداة كتبتها للقيام بذلك:

ويستخدم FileSystemWatcher للبحث عن التغييرات في ملفات السجل داخل المجلدات المحلية أو مشاركات الشبكة (لا يلزم تثبيتها، فقط قم بتوفير مسار UNC) ويقوم بإلحاق المحتوى الجديد بوحدة التحكم.

على جيثب: https://github.com/danbyrne84/multitail

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

أتمنى أن يساعدك هذا

FileMon هي أداة مجانية قائمة بذاتها يمكنها اكتشاف جميع أنواع الوصول إلى الملفات.يمكنك تصفية أي غير المرغوب فيها.لا يظهر لك البيانات التي تغيرت بالفعل.

أنا ثاني "tail -f" في cygwin.أفترض أن Tail for 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