سؤال

أرغب في أن يقوم تطبيقي بكتابة ملفات تتبع مختلفة تسمى مثل 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

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