Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将值传递给NLog自定义布局渲染器_C#_Logging_Nlog - Fatal编程技术网

C# 将值传递给NLog自定义布局渲染器

C# 将值传递给NLog自定义布局渲染器,c#,logging,nlog,C#,Logging,Nlog,好的,现在我知道了如何编写自定义的layoutRender 在类中编写类MylayoutRender继承LayoutRender 重写追加方法 启动时注册自定义layoutRenderer ConfigurationItemFactory.Default.LayoutRenders.RegisterDefinition(“应用程序”,类型(MyLayoutRenderer)) 现在,我从配置中读取值 protected override void Append(StringBuilder bui

好的,现在我知道了如何编写自定义的layoutRender

  • 在类中编写类MylayoutRender继承LayoutRender
  • 重写追加方法
  • 启动时注册自定义layoutRenderer

    ConfigurationItemFactory.Default.LayoutRenders.RegisterDefinition(“应用程序”,类型(MyLayoutRenderer))

  • 现在,我从配置中读取值

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

    如何动态设置值?

    此答案包含一个LayoutRenderer示例,该示例允许您配置一个参数,说明要读取哪个配置值

    根据所发布的内容,如果您编写了自己的LayoutRenderer,并将其命名为MyLayoutRenderer,并希望记录“产品”值,那么您可以对其进行如下配置:

    ${MyLayoutRenderer:product}
    
    键是装饰LayoutRenderer属性的
    [DefaultParameter]
    属性,该属性指示要从配置中读取的属性

    这(来自我)展示了一个创建NLog LayoutRenderer的示例,该NLog LayoutRenderer接受一个参数,然后将该参数用作查找的键。(问题的主题是log4net,但我发布了一个我可以在NLog中做的事情的示例,希望得到一个答案,说明如何在log4net中做类似的事情)。请注意,该示例适用于NLog 1.1。在NLog 2.0中会略有不同


    您可能也会发现它很有用。

    看起来和我做的一样:从配置文件(CommonMethods.ReadConfig(“product”);)中读取数据。是否要执行其他操作?我阅读问题的方式是,我认为您可能希望能够配置LayoutRenderer,以便可以从配置文件中读取任何值。LayoutRenderer通过在NLog.config文件中将值名称指定为LayoutRenderer的参数来实现这一点。你还有别的东西要找吗?也许有更好的方法来做你想做的事。很抱歉回复晚了。我想做的是设置Append方法的值,但不给layoutRender提供参数。但由于我的自定义layoutRender(应用程序名)是一个常量,所以我只是在NLog.config中硬编码为sql insert。再次感谢你。