كيف يمكنني تسجيل مخصص IObjectRenderer في log4net؟

StackOverflow https://stackoverflow.com/questions/175109

  •  05-07-2019
  •  | 
  •  

سؤال

وأنا أفعل بعض البحوث في استخدام log4net، ولقد وجدت <م> IObjectRenderer واجهة مثيرة للاهتمام. وسوف تسمح لنا للتحكم في كيفية تسجيل أنواع وتوفير ربما أكثر تنفيذ ToString() مختلفة، سهل الاستعمال. أنا بدأت للتو تبحث في log4net الرغم من ذلك، ويمكن أن يبدو لايجاد وسيلة منطقية لتعيين برمجيا تصل العلاقة بين أنواع وعارضين.

ولقد وجدت أن هذا يمكن إعدادها في ملف التكوين XML من خلال قراءة في دليل ، لكنه لم يعطوني أي تلميحات حول إضافة هذه برمجيا. ويبدو لي أن كنت قد بالأحرى العارض الكائن البرنامجي في بعض الحالات، لذلك أنا الغريب كيفية القيام بذلك.

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

المحلول

وأنا مطعون مع حولها بعض أثناء كتابة السؤال وخرجت مع هذا:

using System.IO;
using log4net;
using log4net.Config;
using log4net.ObjectRenderer;
using log4net.Util;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            BasicConfigurator.Configure();

            ILog log = LogManager.GetLogger(typeof(Program));
            var repo = LogManager.GetRepository();
            repo.RendererMap.Put(typeof(Foo), new FooRenderer());

            var fooInstance = new Foo() { Name = "Test Foo" };
            log.Info(fooInstance);
        }
    }

    internal class Foo
    {
        public string Name { get; set; }
    }

    internal class FooRenderer : log4net.ObjectRenderer.IObjectRenderer
    {
        public void RenderObject(RendererMap rendererMap, object obj, TextWriter writer)
        {
            if (obj == null)
            {
                writer.Write(SystemInfo.NullText);
            }

            var fooInstance = obj as Foo;
            if (fooInstance != null)
            {
                writer.Write("", fooInstance.Name);
            }
            else
            {
                writer.Write(SystemInfo.NullText);
            }
        }
    }
}

ولست متأكدا إذا كان هذا هو الطريق الصحيح للقيام بذلك، لكني أعرف أنه يعمل.

نصائح أخرى

ويمكنك أيضا إضافة هذا الخط إلى جذر log4net الخاص بك إذا كنت لا تريد التسجيل العارض بك برمجيا

<renderer renderingClass="ConsoleApplication1.FooRenderer" renderedClass="ConsoleApplication1.Foo" />
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top