سؤال

أنا أستخدم log4net في مشروع C# ، في بيئة الإنتاج ، أريد تعطيل جميع التسجيل ، ولكن عندما يحدث بعض الأخطاء المميتة ، يجب أن يقوم بتسجيل جميع الرسائل الـ 512 السابقة في ملف. لقد قمت بتكوين هذا بنجاح ، وهو تعمل بشكل جيد.يقوم بتسجيل الرسائل في ملف عند حدوث خطأ فادح.

ولكن عندما أقوم بتشغيله من Visual Studio، أستطيع أن أرى أن كافة رسائل السجل مكتوبة في نافذة الإخراج، بغض النظر عما إذا كانت فادحة أم لا.(لا أستطيع رؤية هذه الرسائل عند التشغيل من مستكشف Windows - التطبيق الخاص بي هو WinForm exe ولا توجد نافذة وحدة تحكم لرؤية الإخراج)

هل هناك أي طريقة لتعطيل هذا التسجيل؟أحتاج إلى سجلاتي في الملف فقط، وذلك أيضًا عند حدوث خطأ فادح.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <log4net debug="false">

        <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
            <file value="log.txt" />
            <appendToFile value="true" />
            <rollingStyle value="Size" />
            <maxSizeRollBackups value="10" />
            <maximumFileSize value="1MB" />
            <staticLogFileName value="true" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
            </layout>
        </appender>

        <appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" >
            <bufferSize value="512" />
            <lossy value="true" />
            <evaluator type="log4net.Core.LevelEvaluator">
                <threshold value="FATAL"/>
            </evaluator>
            <appender-ref ref="RollingFileAppender" />
        </appender> 

        <root>
            <level value="DEBUG" />
            <appender-ref ref="BufferingForwardingAppender" />          
        </root>
    </log4net>
</configuration>

وهذه هي الطريقة التي أقوم بتكوينها في المُهيئ الثابت لنماذج Windows.

static Window1()
    {
      Stream vStream = typeof(Window1).Assembly.GetManifestResourceStream("TestLogNet.log4net.config");
      XmlConfigurator.Configure(vStream);
      BasicConfigurator.Configure();
    }

ولقد قمت بتهيئة كائن المسجل في مُنشئ WinForm

logger = LogManager.GetLogger(typeof(Window1));

Language - C#، .NET Framework - 3.5 ، Visual Studio 2008 ، Log4Net 1.2.10 ، نوع المشروع - WinForms

هل كانت مفيدة؟

المحلول

مسح ال BasicConfigurator.Configure() خط.هذا ما يفعله هذا السطر - يضيف ConsoleAppender يشير إلى Console.Out.

نصائح أخرى

هل مازلت ترى الرسائل في Visual Studio إذا تم تجميع التطبيق في وضع الإصدار؟من الممكن أن يستخدم log4net Debug.Write لإظهار الأخطاء على أي حال.إذا كان الأمر كذلك، فيجب ألا تظهر هذه الرسائل في وضع الإصدار.

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