1

我正在开发一个使用 log4net 的 ASP.NET 项目。在开发环境中,我希望将参数的size元素@stackTrace设置为比其他环境中更高的值。

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>

我想将元素的value属性更改为 2000。size

我尝试了以下转换文件,但它没有改变任何东西:

  <?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:Locator结合。xdt:Transform

4

3 回答 3

3

Eric.Y.Fan的回答不起作用后,我玩了一下以找出原因。

我首先放回了<connectionString>价值(为了清楚起见,我把它从帖子中删除了),它确实有效。这证明找到了正确<appender>的,但<parameter>没有找到正确的。“找到”或“定位”。那是一个暗示。

我查看了 XPath 表达式,并意识到它正在尝试定位<parameter>具有<parameterName>带有valuevalue 属性的a @stackTrace。所以我尝试使用Condition

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

这行得通!

所以最终的变换是:

<parameter xdt:Locator="Condition([parameterName[@value='@stackTrace']])">
    <size value="2000" xdt:Transform="Replace" />
</parameter>
于 2014-02-13T18:19:46.853 回答
1

我可能弄错了,但我认为 Web.config 转换不能应用于其他任意 xml 文件。

为此,我通常使用SlowCheetah:http: //visualstudiogallery.msdn.microsoft.com/69023d00-a4f9-4a34-a6cd-7e854ba318b5

这是一个很棒的工具,非常易于使用(类似于 web.config 转换,但可以应用于任何东西),并且还与自动构建和部署很好地集成在一起。

这是 Scott Hanselman 的指南: http ://www.hanselman.com/blog/SlowCheetahWebconfigTransformationSyntaxNowGeneralizedForAnyXMLConfigurationFile.aspx

于 2014-02-13T01:59:12.503 回答
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>

于 2014-02-13T02:05:44.113 回答