使用 Web.Config 转换更改 log4net“参数”中的“size”元素

Using Web.Config Transforms to Change the "size" element in a log4net "parameter"

提问人:John Saunders 提问时间:2/13/2014 更新时间:2/14/2014 访问量:1505

问:

我正在开发一个使用 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>

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

我尝试了以下转换文件,但它没有更改任何内容:

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

asp.net web-config-transform xdt-transform

评论


答:

1赞 Pablo Romeo 2/13/2014 #1

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

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

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

以下是斯科特·汉塞尔曼(Scott Hanselman)的指南: http://www.hanselman.com/blog/SlowCheetahWebconfigTransformationSyntaxNowGeneralizedForAnyXMLConfigurationFile.aspx

评论

0赞 John Saunders 2/13/2014
对不起,如果我不清楚,但我们已经在对 log4net.config 使用转换。为了清楚起见,我从文件中删除了其他转换。我的问题是这个特殊的转换。
0赞 Eric.Y.Fan 2/13/2014 #2

试试这个:

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

3赞 John Saunders 2/14/2014 #3

Eric.Y.Fan的回答没有奏效后,我玩了一下,找出了为什么不行。

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

我查看了 XPath 表达式,并意识到它正在尝试查找具有 具有 其属性的 值为 。所以我尝试使用:<parameter><parameterName>value@stackTraceCondition

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