تحديد العديد من الآثار التي لا تعمل
سؤال
أنا جديد مع Tracesource ، لذا أقوم ببعض التحقيقات في كيفية استخدامه/ لا يمكن استخدامه (إيجابيات وسلبيات أساسًا).
شيء يعجبني هو أنه يمكنني الحصول على مقالب من داخل .NET Framework نفسه ، لذلك قمت بإنشاء تطبيق صغير لاختبار ذلك واستخدام المصدر المخصص الخاص بي معًا (حيث أتوقع استخدامه) ، مثل ذلك:
class Program
{
static void Main(string[] args)
{
SmtpClient smtp = new SmtpClient();
var mm = new MailMessage();
mm.To.Add("me@my-site.com");
mm.Subject = "Trace Testing";
smtp.Send(mm);
var ts = new TraceSource("MyCustomTracer");
ts.TraceEvent(TraceEventType.Error, 0, "This is an error");
ts.TraceEvent(TraceEventType.Information, 0, "Just debugging now");
}
}
ثم أضفت بعض المستمعين إلى App.config
مثله:
<system.diagnostics>
<trace autoflush="true" />
<sources>
<source name="MyCustomTracer"
switchValue="Information, ActivityTracing">
<listeners>
<add name="sdt"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "traceOutput.log" />
</listeners>
</source>
<source name="System.Net"
switchValue="Information, ActivityTracing, Critical">
<listeners>
<add name="sdt"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "traceOutput.log" />
</listeners>
</source>
</sources>
</system.diagnostics>
لكن لسبب ما عندما أقوم بتشغيل التطبيق ، حدثان أقوم بتسجيله عبر MyCustomTracer
لا تذهب إلى ملف السجل إلا إذا علقت SmtpClient
الاشياء (أي - استخدم فقط التتبع المخصص).
كنت أتوقع أنه يمكن استخدام العديد من الآثار المترابطة بالطريقة التي أحاول استخدامها ، لست متأكدًا من الخطأ الذي يحدث.
المحلول
وجدت المشكلة ، خطأً كاملاً في NOOB ، يحتوي كل من عناصر التتبع على مستمع يكتب إلى نفس الملف. على الرغم من أنني لست متأكدًا تمامًا من الخطأ ، إلا أنه سيكون نوعًا من الصدام عند الكتابة.
إذا كنت ترغب في الحصول على مصادر متعددة باستخدام نفس المستمع الذي تحتاجه لاستخدام <sharedListeners />
مثله:
<system.diagnostics>
<trace autoflush="true" />
<sources>
<source name="MyCustomTracer"
switchValue="Information, ActivityTracing">
<listeners>
<add name="sdt" />
</listeners>
</source>
<source name="System.Net"
switchValue="Information, ActivityTracing, Critical">
<listeners>
<add name="sdt" />
</listeners>
</source>
</sources>
<sharedListeners>
<add name="sdt"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "traceOutput.log" />
</sharedListeners>
</system.diagnostics>