2012-02-29 22 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