使用 Web.Config 转换更改 log4net "parameter"中的"size"元素



我正在做一个使用 log4net 的 ASP.NET 项目。在开发环境中,我希望将@stackTrace参数的 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。

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

  <?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结合起来。

在Eric.Y.Fan的回答不起作用之后,我玩了一会儿,想知道为什么不行。

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

我查看了 XPath 表达式,并意识到它正在尝试查找具有值为 @stackTracevalue 属性的<parameterName><parameter>。所以我尝试使用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>

我可能弄错了,但我认为 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

试试这个:

<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>

相关内容

最新更新