2014-02-13 86 views
1

我正在使用log4net的ASP.NET項目。在開發環境中,我希望@stackTrace參數的size元素設置爲比其他環境中的值更高的值。使用Web.Config轉換來更改log4net「參數」中的「size」元素

的log4net.config文件的結構是:

<?xml version="1.0"?> 
<configuration> 
    <log4net debug="true"> 
     <appender name="SQLServerAppender" type="log4net.Appender.AdoNetAppender"> 
      <parameter> 
       <parameterName value="@stackTrace"/> 
       <dbType value="String"/> 
       <size value="1000"/> 
       <layout type="log4net.Layout.RawPropertyLayout"> 
        <key value="stackTrace"/> 
       </layout> 
      </parameter> 
      <!-- More parameters --> 
     </appender> 
    </log4net> 
</configuration> 

我想的size元件的value屬性改變爲2000。

我嘗試以下轉換文件,但它沒「T改變什麼:

<?xml version="1.0" encoding="utf-8"?> 
    <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <log4net> 
     <appender name="SQLServerAppender" type="log4net.Appender.AdoNetAppender"> 
     <parameter xdt:Locator="XPath(configuration/log4net/appender[@name='SQLServerAppender']/parameter[parameterName[@value='@stackTrace']])" 
        xdt:Transform="Remove"> 
     </parameter> 
     </appender> 
    </log4net> 
    </configuration> 

‘刪除’是不得已而爲之,試圖讓東西發生!

我應該怎麼做來執行所需的轉換?在這種情況下,我不清楚如何結合xdt:Locatorxdt:Transform

回答

3

Eric.Y.Fan答案沒有工作,我打了一下週圍,以找出原因不。

我先放回<connectionString>值(我離開了我的職務爲清楚),它工作。這證明找到了正確的<appender>,但沒有找到正確的<parameter>。 「找到」或「定位」。這是一個暗示。

我看着XPath表達式,並且意識到,這是嘗試定位<parameter>其中有一個<parameterName>value屬性具有值@stackTrace。所以我嘗試使用Condition

這工作!

所以最終的變換是:

<parameter xdt:Locator="Condition([parameterName[@value='@stackTrace']])"> 
    <size value="2000" xdt:Transform="Replace" /> 
</parameter> 
1

我可能會誤解,但我不認爲Web.config轉換可以應用於其他任意XML文件。

爲此我通常使用SlowCheetahhttp://visualstudiogallery.msdn.microsoft.com/69023d00-a4f9-4a34-a6cd-7e854ba318b5

這是一個偉大的工具,非常容易使用(類似於web.config文件轉換,但可以適用於任何東西),而且還集成了非常好具有自動構建和部署。

下面是斯科特Hanselman的指南: http://www.hanselman.com/blog/SlowCheetahWebconfigTransformationSyntaxNowGeneralizedForAnyXMLConfigurationFile.aspx

+0

對不起,如果我不清楚,但我們已經使用了log4net.config變換。爲了清楚起見,我從文件中刪除了其他轉換。我的問題在於這個特殊的轉換。 –

0

試試這個:

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
<log4net> 
    <appender name="SQLServerAppender" type="log4net.Appender.AdoNetAppender"> 
    <parameter> 
     <size value="2000" xdt:Locator="XPath(configuration/log4net/appender[@name='SQLServerAppender']/parameter[parameterName[@value='@stackTrace']])" xdt:Transform="SetAttributes"/> 
    </parameter> 
    </appender> 
</log4net> 

+0

不幸的是,這並沒有奏效。 –

相關問題