0

我正在尝试使用 c# 在我的日志中添加一些自定义字段。当我了解所有领域时,我能够做到这一点。

现在,在一种情况下,我不知道字段的数量。例如,我必须添加对象的参数,并且对象的数量将在运行时不断变化,我需要根据对象的数量添加字段。

是否可以在 log4net 中进行任何调整来完成此操作,因此每当有新对象时,都会创建新字段。

我主要不确定如何在 log4net 的配置文件中处理这个问题。

4

1 回答 1

1

您可以在log4net的自定义属性中添加对象的属性,并以您的格式记录属性的内容:

例如在您的代码中:

log4net.ThreadContext.Properties[ "myObjectProperties" ] = obj.prop1 + " " obj.prop2; // + ...;

并在配置中:

 <conversionPattern value="%logger (%property{myObjectProperties}) [%level]- %message%newline" />

您不能拥有可即时配置的模式;你可以有多个模式来匹配不同的对象,但这不是很容易管理。

编辑:嗯,你可以有一个运行时可配置的模式,但不是本机的:) 但是你可能有一个能够从上述属性加载的模式

第二次编辑:如果您需要多达 4000 个属性,为什么不考虑将所有这些属性作为消息本身的一部分推送(log.Info(myObject.ToString()))或创建一个能够处理特定接口来处理的自定义附加程序:

public interface IHaveManyFieldsToLog
{
    public string[] GetAllPropertyValues()
}

public class ManyFieldsToLogAppender: SkeletonAppender
{
    // pseudocode, I don't have the IDE at the moment
    public override AppendLog(LogEvent event)
    {
         if (event.Parameter[0] as IHaveManyFieldsToLog != null)
         {
              var values = (event.Parameter[0] as IHaveManyFieldsToLog).GetAllPropertyValues();
              // concat all values and push it to the log
         }
    }
}
于 2014-10-20T10:27:08.520 回答