我刚刚接管了一个使用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>
答案 0 :(得分:5)
当您使用XMLLayout时,您会得到他们想要给您的东西。您无法像其他布局一样指定要记录的项目。但是,如果要更改此功能,还有其他选择。首先,您可以更改为文件追加器并尝试手动制作布局。这充其量是混乱的。另一个选项是创建自己的appender,只记录您想要的XML文件和所需的模式。如果您要进行长期更改,除非您真的不想添加到log4net,否则这更为可取。
如果你想进入第二条路线,这篇文章将向你展示如何做到这一点:
http://blogs.lessthandot.com/index.php/DesktopDev/MSTech/making-an-xmllayout-for-log4net
这是一个SO问题,答案解释了如何做到这一点: