سؤال

ودعونا نقول أنا أعمل على القليل من التطبيق وحدة معالجة دفعة في VB.Net. أريد أن أكون قادرة على هيكلة التطبيق مثل هذا:

Sub WorkerMethod()
   'Do some work
   Trace.WriteLine("Work progress")

   'Do more work
   Trace.WriteLine("Another progress update")

   '...
End Sub


Sub Main()

   'Do any setup, like confirm the user wants to continue or whatever

   WorkerMethod()     

End Sub

ملحوظة أنني أستخدم Trace بدلا من Console لإخراج بلدي. وذلك لأن طريقة عامل قد يتم استدعاؤها من أي مكان آخر، أو حتى العيش في مجموعة مختلفة، وأريد أن أكون قادرة على تولي المستمعين أثر مختلف لذلك. فكيف أقوم بتوصيل وحدة لتتبع؟

وأستطيع أن أفعل ذلك بالفعل من خلال تحديد فئة بسيطة (كما هو موضح أدناه) وإضافة مثيل لجمع المستمعين تتبع، ولكن أنا أتساءل إذا كان هناك أكثر قبولا أو بنيت في طريقة لتحقيق ذلك:

Public Class ConsoleTrace
    Inherits Diagnostics.TraceListener

    Public Overloads Overrides Sub Write(ByVal message As String)
        Console.Write(message)
    End Sub

    Public Overloads Overrides Sub WriteLine(ByVal message As String)
        Console.WriteLine(message)
    End Sub
End Class
هل كانت مفيدة؟

المحلول

ويمكنك إضافة ما يلي إلى ملف .config إكس الخاص بك.

<?xml version="1.0"?>
<configuration>
    <system.diagnostics>
        <trace autoflush="true">
            <listeners>
                <add name="logListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="cat.log" />
                <add name="consoleListener" type="System.Diagnostics.ConsoleTraceListener"/>
            </listeners>
        </trace>
    </system.diagnostics>
</configuration>

وأنا تضمنت TextWriter كذلك، في حال كنت ترغب في التسجيل إلى ملف.

نصائح أخرى

وجويل،

هل يمكن أن تفعل هذا بدلا من أسلوب التطبيق التكوين:

Trace.Listeners.Add(new ConsoleTraceListener());

وأو هذا، إذا كنت ترغب في إدارة إضافة أو إزالة المستمع خلال حياة التطبيق:

ConsoleTraceListener listener = new ConsoleTraceListener();
Trace.Listeners.Add(listener);

Trace.WriteLine("Howdy");

Trace.Listeners.Remove(listener);

Trace.Close();

وعظيم حل، ولكن لدي الحالة التي يكون فيها لدي مختلفة في DLL تدار من قبل نفس إكس الدعوة، لذلك أنا لا أريد أن تعديل ملف الدعوة إكس ل.config. أريد كل دلل على التعامل مع انها التعديلات الخاصة من إخراج التتبع.

من السهل بما فيه الكفاية:

Stream outResultsFile = File.Create ("output.txt");
var textListener = new TextWriterTraceListener (outResultsFile);
Trace.Listeners.Add (textListener);

وهذا، بالطبع، خرج إخراج تتبع إلى ملف "output.txt".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top