我正在使用Log4net (v2.0.50727)编写C# webservice。它被配置为创建两个appender。第一个是一般的debug文件,我会监控它以确保服务正常运行;第二个是报告,我会在不同的时间间隔手动转发给客户(可能会自动化)。
<log4net>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="..\logs\Service.log.xml"/>
<appendToFile value="true"/>
<rollingStyle value="Size"/>
<maxSizeRollBackups value="20"/>
<maximumFileSize value="10000KB"/>
<staticLogFileName value="true"/>
<preserveLogFileNameExtension value="true" />
<layout type="log4net.Layout.XmlLayoutSchemaLog4j">
<conversionPattern value="%utcdate [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
</layout>
</appender>
<appender name="CustomerReportAppender" type="log4net.Appender.RollingFileAppender">
<file value="..\logs\Customer.Report.xml"/>
<appendToFile value="true"/>
<rollingStyle value="Size"/>
<maxSizeRollBackups value="20"/>
<maximumFileSize value="10000KB"/>
<staticLogFileName value="true"/>
<preserveLogFileNameExtension value="true" />
<layout type="log4net.Layout.XmlLayoutSchemaLog4j">
<conversionPattern value="%utcdate [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
</layout>
</appender>
<root>
<level value="DEBUG"/>
<appender-ref ref="RollingFileAppender"/>
</root>
<logger name="CustomerReport">
<level value="ALL" />
<appender-ref ref="CustomerReportAppender" />
</logger>
</log4net>
两个文件的日志记录都有效。问题是,如果我向客户发送Customer.Report.xml文件,它在Excel中无法打开,因为它不是有效的XML文件。该文件由多行事件元素组成 -
<event logger="CustomerReport" timestamp="1453717399436" level="INFO" thread="8">
<message>Customer Info</message>
<properties>
<data name="UserName" value="IIS APPPOOL\Customer Service" />
<data name="log4jmachinename" value="MyServer" />
<data name="log4japp" value="/LM/W3SVC/3/ROOT-2-130981905203581113" />
<data name="HostName" value="MyServer" />
</properties>
</event>
我猜Excel报错是因为它没有一个根元素。如果我将整个文件包裹在 - 中,问题就会解决。
<Report>
....
</Report>
Excel可以正常加载它。是否可能让Log4net为我生成这个?或者能否使Excel处理它?谢谢。