Log4net XMLLayout产生太多元素

时间:2011-06-03 19:39:29

标签: c# log4net

我刚刚接管了一个使用log4net xmllayout进行日志记录的C#项目。

问题是日志中的每个事件都有4个数据值:machinename,hostname,username和app,它们总是相同但是每个事件都会重复,从而导致不必要的大型日志文件。

如何防止这些被记录?

配置文件:

<?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 个答案:

答案 0 :(得分:5)

当您使用XMLLayout时,您会得到他们想要给您的东西。您无法像其他布局一样指定要记录的项目。但是,如果要更改此功能,还有其他选择。首先,您可以更改为文件追加器并尝试手动制作布局。这充其量是混乱的。另一个选项是创建自己的appender,只记录您想要的XML文件和所需的模式。如果您要进行长期更改,除非您真的不想添加到log4net,否则这更为可取。

如果你想进入第二条路线,这篇文章将向你展示如何做到这一点:

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

这是一个SO问题,答案解释了如何做到这一点:

Log4net xml output