2012-02-29 24 views
1

好了,现在我知道如何编写自定义layoutRender传递价值NLOG定制LayoutRenderer

  1. 写一个类MylayoutRender继承LayoutRenderer,在课堂上,
  2. 覆盖追加方法
  3. 注册自定义layoutRenderer启动时

    ConfigurationItemFactory.Default.LayoutRenderers.RegisterDefinition("application", typeof(MyLayoutRenderer));

curently,我读了配置

protected override void Append(StringBuilder builder, LogEventInfo logEvent) 
    { 
     var product = CommonMethods.ReadConfig("product"); 
     builder.Append(product); 
    } 

价值如何动态设置的值?

回答

3

此答案包含一个LayoutRenderer的示例,它允许您配置一个参数,指出要读取哪个配置值。

NLog config file to get configuration setting values from a web.config

从什么@DaveHogan贴,如果你写你自己的LayoutRenderer并把它称为MyLayoutRenderer,并希望记录的“产品”价值,你会配置它是这样的:

${MyLayoutRenderer:product} 

的关键是装饰LayoutRenderer属性的[DefaultParameter]属性,该属性指示要从配置中读取哪个属性。

这个question(来自我)展示了一个创建NLog LayoutRenderer的例子,它接受一个参数,然后使用该参数作为查找的关键字。 (这个问题的主题是log4net,但是我发布了一个我可以在NLog中做的事情的例子,并且想要一个答案来展示如何在log4net中做类似的事情)。请注意,该示例适用于NLog 1.1。它在NLog 2.0中会略有不同。

您可能还会发现this link to the NLog code repository有用。

+0

看起来像我所做的一样:从配置文件(CommonMethods.ReadConfig(“product”);)读取 – prime23 2012-03-01 06:04:24

+0

你想做一些不同的事情吗?我读过这个问题的方式,我想你可能希望能够配置LayoutRenderer,以便从配置文件中读取任何值。通过将值名称指定为NLog.config文件中的LayoutRenderer的参数来实现这一点的LayoutRenderer的想法就是这样做的。你还在找别的东西吗?可能有更好的方法来做你想做的事。 – wageoghe 2012-03-01 14:37:48

+0

对于迟到回复感到抱歉。我想要做的是设置Append方法的值,但不给参数layoutRender。但由于我的自定义layoutRender(应用程序名称)是一个常量,我只是硬编码到SQL插入NLog.config中。再次感谢你。 – prime23 2012-03-05 06:25:18