【问题标题】:Add a custom property to a LoggingEventData programmatically以编程方式将自定义属性添加到 LoggingEventData
【发布时间】:2015-03-02 06:14:06
【问题描述】:

我正在为 log4net 创建一个自定义包装器。我正在尝试填充我的 LoggingEventData 对象,并且我想将一些自定义属性传递给 Appender 的 append 方法。

但是,这些属性是中间属性,所以我不希望它们出现在 appenders 配置中。

LoggingEventData.Properties 是一个只读字典。 有没有办法在其中获取一个值,让我将自定义属性(通过 LoggingEventData)传递给 appender,而无需更新 appender 或配置文件?

【问题讨论】:

    标签: c# .net log4net


    【解决方案1】:

    不清楚你想做什么,我怀疑不管它是什么,LoggingEventData 路径可能不是最好的,除非你可以在你的包装器中使用LoggingEvent constructor that takes a LoggingEventData instance

    可能有用的是您可以轻松地将数据存储在 log4net 上下文中并在记录时检索它。

    你在你的日志代码中这样设置它:

     // Other contexts are available
     // http://logging.apache.org/log4net/release/manual/contexts.html
     log4net.GlobalContext.Properties["value1"] = "Value 1";
    

    并在 appender 模式中检索它,例如:

    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%value1 (%property{value1})" />
      </layout>
    </appender>
    

    正如this useful blog post on the subject 所说:

    上下文属性值不必是字符串。您可以设置 任何对象引用的上下文属性的值;的价值 对象的 ToString 方法将用于获取上下文属性 记录事件发生时的值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多