我正在使用log4net登录XML格式。
我正在使用以下配置:
<appender name="RollingLogFileAppenderError" type="log4net.Appender.RollingFileAppender, log4net">
<file type="log4net.Util.PatternString" value="App_Log\Service.Error.xml"/>
<staticLogFileName value="false"/>
<preserveLogFileNameExtension value="true"/>
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<datePattern value=".yyyy-MM-dd"/>
<filter type="log4net.Filter.LevelMatchFilter">
<acceptOnMatch value="true"/>
<levelToMatch value="ERROR"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
<layout name="StandardLayout" type="log4net.Layout.PatternLayout">
<header><?xml version="1.0" encoding="UTF-8"?><LogEntries></header>
<footer></LogEntries>
<conversionPattern value="<LogEntry date="%date" level="%level" logger="%logger" method="%aspnet-context{LogMethodName}">%message</LogEntry>%newline"/>
</layout>
</appender>
现在这个工作,除了我需要查看最新的日志文件的情况。然后它是无效的,包含类似:
<?xml version="1.0" encoding="UTF-8"?>
<LogEntries>
<LogEntry>....</LogEntry>
没有页脚,这自然是无效的。
文件被收集到一个中心位置,我们希望在这里可视化日志中的信息。但由于某些日志文件无效,因此会产生一些问题。
现在我可以在将文件读入可视化工具之前对其进行预处理,但我更愿意使用有效的xml文件。
是否有人建议如何处理此问题?
编辑:
另一个解决方案可能是不登录XML ,但是对于登录例如JSON,我理解也需要根“元素”,似乎存在同样的问题。
答案 0 :(得分:1)
您的问题是当您的应用程序停止或以新日志文件启动时会写入页脚。 Log4net(rollingfileappender)之前无法添加页脚,因为在添加新条目时它不会删除它。为了解决这个问题,您可以创建一个xml appender来实现SkelitonAppender或RollingFileAppender,它在编写新的日志条目时添加和删除页脚。
更容易让您的文件变小,因此您需要查看最新文件。
更简单的方法是使用配置中的布局元素:
<layout type="XmlLayout" />
制作一个XmlLayout类:
public class XmlLayout : XmlLayoutBase
{
protected override void FormatXml(XmlWriter writer, LoggingEvent loggingEvent)
{
writer.WriteStartElement("LogEntry");
writer.WriteStartElement("Message");
writer.WriteString(loggingEvent.RenderedMessage);
writer.WriteEndElement();
writer.WriteEndElement();
}
}