我刚刚接手了一个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>
当您使用XMLLayout时,您可以得到他们想要给您的内容。您不能像使用其他布局那样指定要记录的项目。但是,如果您想更改此功能,也有其他选择。首先,您可以更改为文件附加程序,并尝试手动进行布局。这充其量也只是一团糟。另一种选择是创建自己的appender,该appender只记录到您想要的XML文件和您想要的模式中。如果你正在做一个长期的改变,除非你真的不想添加到log4net,否则这是更可取的。
如果你想走第二条路,这里有一篇文章将向你展示如何做到这一点:
http://blogs.lessthandot.com/index.php/DesktopDev/MSTech/making-an-xmllayout-for-log4net
这里有一个SO问题,它有一个解释如何做到这一点的答案:
Log4net xml输出