.Net اسم ملف التتبع المخصص
سؤال
أرغب في أن يقوم تطبيقي بكتابة ملفات تتبع مختلفة تسمى مثل MachineName_UserName_yyyymmdd_hhmmss.txt حيث يكون اسم المستخدم هو المستخدم الذي قام بتسجيل الدخول حاليًا والوقت هو وقت بدء التطبيق.يبدو أن مستمع Net TextWriterTraceListener يدعم فقط اسم الملف المشفر المحدد في ملف التكوين.هل هناك طريقة للقيام بذلك دون كتابة مستمع تتبع مخصص.
على افتراض أنني يجب أن أكتب مستمع تتبع مخصص، فقد قمت بتنفيذ أداة تتبع مثل هذا:
Imports System.Diagnostics
Public Class MyCustomTraceListener
Inherits TextWriterTraceListener
Public Sub New()
'Need to do it this way as the Base constructor call has to be the first statement
MyBase.New(String.Format("AppNameTraceFile_{0}_{1}_{2}{3}{4}-{5}{6}{7}.txt", _
Environment.MachineName, _
Environment.UserName, _
DateTime.Now.ToString("yyyy"), _
DateTime.Now.ToString("MM"), _
DateTime.Now.ToString("dd"), _
DateTime.Now.ToString("HH"), _
DateTime.Now.ToString("mm"), _
DateTime.Now.ToString("ss")))
Me.IndentSize = 4
End Sub
End Class
في ملف التكوين، قمت بتكوين مصدر التتبع مثل هذا:
<system.diagnostics>
<trace autoflush="true"/>
<sources>
<source name="MyTraceSource"
switchName="mySwitch"
switchType="System.Diagnostics.SourceSwitch" >
<listeners>
<clear/>
<add name="MyTraceListener"
type="MyNameSpace.MyCustomTraceListener"
traceOutputOptions="ProcessId, DateTime, Callstack" />
</listeners>
</source>
</sources>
<switches>
<add name="mySwitch" value="Warning" />
</switches>
</system.diagnostics>
أقوم بإنشاء مصدر التتبع مثل هذا:
Dim tsTraceSource As TraceSource = New TraceSource("MyTraceSource")
tsTraceSource.TraceEvent(TraceEventType.Warning, 0, "warning message")
ومع ذلك، عند بدء التشغيل، أستمر في تلقي رسالة خطأ مفادها أنه لا يمكن العثور على النوع "MyNameSpace.MycustomTraceListener".
هل يرى أحد ما هي المشكلة هنا؟
شكرًا.
المحلول
ولا تحتاج إلى إبلاغ نوع التجمع الخاص بك؟
<add name="MyTraceListener"
type="MyNameSpace.MyCustomTraceListener, MyAssembly"
traceOutputOptions="ProcessId, DateTime, Callstack" />
نصائح أخرى
وثمة نهج آخر والذي يتجنب الحاجة إلى فئة مشتقة تماما:
وإنشاء TextWriterTraceListener الفئة الأساسية في أكس التكوين الخاص بك، ومن ثم عند بدء التشغيل، يمكنك تعداد جمع مستمعين للعثور عليه (لن يكون هناك عادة DefaultTraceListener وTextWriterTraceListener)، ثم مجرد مجموعة تيار تسجيل لتيار جديد.
وماذا عن وضع TraceListener بك في مدونة؟ إذا كنت لا تزال تريد بعض المعلمات، على سبيل المثال تسجيل المسار، ليكون في app.config، تحدد لهم في القسم appSettings وقراءتها عند إنشاء المستمع الخاص.
' VB
Dim traceLog As New FileStream(traceFile, FileMode.OpenOrCreate)
Dim traceListener As New TextWriterTraceListener(traceLog)
Trace.Listeners.Add(traceListener)
// C#
FileStream traceLog = new FileStream(traceFile, FileMode.OpenOrCreate);
TextWriterTraceListener traceListener = new TextWriterTraceListener(traceLog);
Trace.Listeners.Add(traceListener);
وكل عنصر في التكوين يتوافق مع API، لذلك عليك أن تكون قادرا على القيام كل ما تحتاجه.
traceListener.TraceOutputOptions |= TraceOptions.Callstack | TraceOptions.DateTime | TraceOptions.ProcessId;
منشور قديم قليلاً ولكن فقط في حالة ظهور شخص ما - إليك رابط يوضح كيفية إعداد مستمع تتبع ملف مسطح متجدد مع التاريخ والوقت: http://msdn.microsoft.com/en-us/library/ff664768%28v=pandp.50%29.aspx
المقالة الأصلية حول تسجيل كتلة التطبيق موجودة في http://msdn.microsoft.com/en-us/library/ff664569%28v=pandp.50%29.aspx
قد تضطر إلى إضافة أ حزمة nuget في Visual Studio يسمى مكتبة المؤسسة - تسجيل كتلة التطبيق
إذا كنت تريد التعمق في كتلة تطبيق التسجيل بمكتبة المؤسسة، فإليك الكتاب الكامل بتنسيق PDF الخاص به: http://www.microsoft.com/en-us/download/details.aspx?id=41145