2011-06-03 97 views
3

我刚接手使用log4net的xmllayout用于记录一个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> 
+0

你为什么在.NET应用程序中使用log4j的,而不是log4net的? – Oded 2011-06-03 19:40:57

+0

对不起,我的意思是log4net。 – NSK 2011-06-03 19:48:02

+0

请显示您的log4net配置,然后我们可能会提供帮助。 – 2011-06-03 22:45:38

回答

5

当您使用XMLLayout,你得到他们想要给你的东西。您无法像使用其他布局一样指定要记录的项目。但是,如果要更改此功能,还有其他选择。首先,您可以更改为文件appender并尝试手动进行布局。最好的情况是很麻烦。另一种选择是创建自己的appender,该appender只记录您想要的和您想要的模式中的XML文件。如果你正在做一个长期的改变,除非你真的不想添加到log4net,否则这更加可取。

如果你想要去的第二条路线,这里是一篇文章会告诉你究竟是如何做到这一点:

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

下面是一个SO疑问,有介绍如何做一个答案这还有:

Log4net xml output

+0

谢谢。我之前曾尝试覆盖它,但我会再看一遍。 – NSK 2011-06-04 15:49:35

+0

我仍然无法重写FormatXML(),所以我继续并手动创建了一个布局。谢谢! – NSK 2011-06-07 19:59:27