提问人:John Saunders 提问时间:2/13/2014 更新时间:2/14/2014 访问量:1505
使用 Web.Config 转换更改 log4net“参数”中的“size”元素
Using Web.Config Transforms to Change the "size" element in a log4net "parameter"
问:
我正在开发一个使用 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。value
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
答:
我可能弄错了,但我认为 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>
在Eric.Y.Fan的回答没有奏效后,我玩了一下,找出了为什么不行。
我首先放回了值(为了清楚起见,我把它从我的帖子中省略了),它确实起作用了。这证明已经找到了正确的方法,但正确的方法却没有找到。“找到”或“找到”。这是一个暗示。<connectionString>
<appender>
<parameter>
我查看了 XPath 表达式,并意识到它正在尝试查找具有 具有 其属性的 值为 。所以我尝试使用:<parameter>
<parameterName>
value
@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>
评论