C#学习教程:如何在log4net中注册自定义IObjectRenderer?分享


如何在log4net中注册自定义IObjectRenderer?

我正在研究使用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的根目录

上述就是C#学习教程:如何在log4net中注册自定义IObjectRenderer?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

  

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/1269721.html

(0)
上一篇 1天前
下一篇 1天前

精彩推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注