gpt4 book ai didi

c# - 如何编写和使用/配置渲染通用集合(并使用属性)的 log4net 对象渲染器?

转载 作者:行者123 更新时间:2023-12-04 18:13:19 26 4
gpt4 key购买 nike

我有几个通用集合,比如说,

IList<MyClass>
IList<MyOtherClass>

1) 我该如何为此编写 log4net IObjectRenderer?到目前为止,我得到的是:
public class ListOfMyClassRenderer : IObjectRenderer
{
public void RenderObject(RendererMap rendererMap, object obj, TextWriter writer)
{
try
{
var myList = obj as List<MyClass>;
int no = 1;
foreach (MyClass entry in myList)
{
writer.Write("Entry {0}: PropertyA={1} PropertyB={2}\n",
no++,
entry.PropertyA,
entry.PropertyB);
}
}
catch (NullReferenceException ex)
{
writer.Write(SystemInfo.NullText);
}
}
}

2) 我将如何在我的 Log4Net.config 文件中配置它?我有:
<renderer renderingClass="MyNamespace.ListOfMyClassRenderer" renderedClass="System.Collections.IList<MyClass>" />

3) 最后一个问题。如果我想将每个条目写入 log4net 属性,我该怎么做?我应该使用 RendererMap 吗?

最佳答案

以下链接是 Better Stack Overflow Answer .保持我的问题的完整性:

1) 这可以通过制作 IList 的渲染器并询问它使用什么泛型来完成。我们将无法为每个泛型创建一个渲染器类,但可以。

class MyListRenderer : IObjectRenderer
{
public void RenderObject(RendererMap rendererMap, object obj, TextWriter writer)
{
var myList = obj as IList<MyClass>;
if (myList != null) {
try
{
int no = 1;
foreach (MyClass entry in myList)
{
writer.Write("Entry {0}: PropertyA={1} PropertyB={2}\n",
no++,
entry.PropertyA,
entry.PropertyB);
}
}
catch (NullReferenceException ex)
{
writer.Write(SystemInfo.NullText);
}
}
else
{
new DefaultRenderer().RenderObject(rendererMap, obj, writer);
}
}
}

请注意,如果其他一切都失败了,我们是如何使用默认渲染器的。这将保留默认的 IList 呈现。可能已经扩展了 DefaultRenderer() 但它是密封的。

2) 这可以通过使用来配置
<renderer renderingClass="MyNamespace.MyListRenderer" renderedClass="System.Collections.IList" />

3) 似乎无法使用对象渲染器设置 log4net 属性。

关于c# - 如何编写和使用/配置渲染通用集合(并使用属性)的 log4net 对象渲染器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12197188/

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