Log4net XMLLayout производит слишком много элементов - PullRequest
3 голосов
/ 03 июня 2011

Я только что занялся проектом C #, который использует log4net xmllayout для ведения журнала.

Проблема в том, что каждое событие в журнале имеет 4 значения данных: имя машины, имя хоста, имя пользователя и приложение, которые всегда одинаковы, но повторяются для каждого события, что приводит к излишне большим файлам журнала.

Как я могу предотвратить их регистрацию?

Файл конфигурации:

<?xml version="1.0"?>

<configuration>

  <!--log4net setting-->

  <configSections>

    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />

  </configSections>

  <log4net>

    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">

      <file type="log4net.Util.PatternString" value="%env{LocalAppData}\\myApp\\myApp.log.xml" />

      <appendToFile value="true" />

      <rollingStyle value="Size" />

      <maxSizeRollBackups value="1" />

      <maximumFileSize value="3MB" />

      <staticLogFileName value="true" />

      <layout type="log4net.Layout.XmlLayoutSchemaLog4j">

      </layout>

    </appender>

    <root>

      <level value="DEBUG" />

      <appender-ref ref="RollingFileAppender" />

    </root>

  </log4net>



  <system.serviceModel>

    <bindings>

      <basicHttpBinding>

        <binding name="BasicHttpBinding_myAppWCF" closeTimeout="00:01:00"

          openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"

          allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"

          maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"

          messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"

          useDefaultWebProxy="true">

          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"

            maxBytesPerRead="4096" maxNameTableCharCount="16384" />

          <security mode="None">

            <transport clientCredentialType="None" proxyCredentialType="None"

              realm="">

              <extendedProtectionPolicy policyEnforcement="Never" />

            </transport>

            <message clientCredentialType="UserName" algorithmSuite="Default" />

          </security>

        </binding>

      </basicHttpBinding>

    </bindings>

    <client>

      <endpoint address="http://localhost:12372/conserv" binding="basicHttpBinding"

        bindingConfiguration="BasicHttpBinding_myAppWCF" contract="myAppNOWServiceClient.myAppWCF"

        name="BasicHttpBinding_myAppWCF" />

    </client>

  </system.serviceModel>

  <startup>

    <supportedRuntime version="v2.0.50727"/>

  </startup>

</configuration>

1 Ответ

5 голосов
/ 04 июня 2011

Когда вы используете XMLLayout, вы получаете то, что они хотят вам дать.Вы не можете указать, какие элементы регистрировать, как вы можете с другими макетами.Однако есть альтернативы, если вы хотите изменить эту функцию.Во-первых, вы можете перейти к файловому приложению и попытаться создать макет вручную.Это становится грязным в лучшем случае.Другой вариант - создать свой собственный appender, который регистрирует в XML-файл только то, что вы хотите и в нужной вам схеме.Это гораздо более желательно, если вы делаете долгосрочные изменения, если вы действительно не хотите добавлять в log4net.

Если вы хотите пойти по второму пути, вот статья, которая покажет вам точнокак это сделать:

http://blogs.lessthandot.com/index.php/DesktopDev/MSTech/making-an-xmllayout-for-log4net

Вот SO вопрос, на который есть ответ, объясняющий, как это сделать:

Log4net xml output

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...