إعادة توجيه إخراج تتبع إلى وحدة التحكم
سؤال
ودعونا نقول أنا أعمل على القليل من التطبيق وحدة معالجة دفعة في 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".