2014-02-13 3 views
1

Я работаю над проектом ASP.NET, который использует log4net. В среде разработки я хочу, чтобы элемент size параметра @stackTrace был установлен на большее значение, чем в других средах.Использование Web.Config Преобразования для изменения элемента "size" в параметре log4net "

Структура файла 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:Locator с xdt:Transform в этом случае.

ответ

3

После ответа на 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> 
1

Я мог ошибаться, но я не думаю, что преобразования Web.config могут применяться к другим произвольным файлам xml.

Для этой цели я обычно использую SlowCheetah: http://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

К сожалению, это не сработало. –