gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:44:13 24 4
gpt4 key购买 nike

我正在研究使用 log4net,我发现 IObjectRenderer 接口(interface)很有趣。它将允许我们控制类型的记录方式,并提供不同的、可能对用户更友好的 ToString() 实现。不过,我刚刚开始研究 log4net,似乎找不到一种合理的方式来以编程方式建立类型和渲染器之间的关联。

我发现这可以通过阅读 manual 在 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);
}
}
}
}

我不确定这是否是正确的方法,但我知道它有效。

关于c# - 如何在 log4net 中注册自定义 IObjectRenderer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/175109/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com