使用 log4net 在日志文件中写入原始文本
Write raw text in log file using log4net
我已经使用此 post 创建了自定义 xml 布局。我需要带有字符 <
的日志消息,但在日志文件中它转换为 <
这是我的代码示例
public class MyXmlLayout : XmlLayoutBase
{
protected override void FormatXml(XmlWriter writer, LoggingEvent loggingEvent)
{
writer.WriteStartElement("LogEntry");
writer.WriteStartElement("Exception");
writer.WriteString("<![CDATA[\n" + loggingEvent.GetExceptionString() + "\n]]>");
writer.WriteEndElement();
writer.WriteEndElement();
}
}
输出日志文件
<LogEntry>
<Exception><![CDATA[
System.DivideByZeroException: Attempted to divide by zero.
at ConsoleApplication5.Program.Main(String[] args) in c:\Users\MahendranM\Documents\Visual Studio 2013\Projects\ConsoleApplication5\ConsoleApplication5\Program.cs:line 24
]]>
</Exception>
</LogEntry>
如何在 log4net 中像 <,>
那样打印原始字符?
如果您真的想要这样做,您可以使用
writer.WriteRaw("<![CDATA[\n" + loggingEvent.GetExceptionString() + "\n]]>");
或
writer.WriteCData(loggingEvent.GetExceptionString());
但是,我强烈 劝阻您不要这样做。不能保证您最终会得到有效的 XML ...如果您的文本包含 "]]>"
那么它会导致问题。 (对于 WriteRaw
,您最终会得到无效的 XML;对于 WriteCData
,您将得到异常。)
我希望使用 XML 日志文件的目的只是为了以 XML 格式传播每个日志条目的数据。所以只需使用 writer.WriteString(loggingEvent.GetExceptionString())
然后 读取 日志文件以后就可以用它做正确的事情。将它包装在 CData 中,而不是让 XML API 只是逃避它,因为它需要对我来说似乎是个坏主意。
我已经使用此 post 创建了自定义 xml 布局。我需要带有字符 <
的日志消息,但在日志文件中它转换为 <
这是我的代码示例
public class MyXmlLayout : XmlLayoutBase
{
protected override void FormatXml(XmlWriter writer, LoggingEvent loggingEvent)
{
writer.WriteStartElement("LogEntry");
writer.WriteStartElement("Exception");
writer.WriteString("<![CDATA[\n" + loggingEvent.GetExceptionString() + "\n]]>");
writer.WriteEndElement();
writer.WriteEndElement();
}
}
输出日志文件
<LogEntry>
<Exception><![CDATA[
System.DivideByZeroException: Attempted to divide by zero.
at ConsoleApplication5.Program.Main(String[] args) in c:\Users\MahendranM\Documents\Visual Studio 2013\Projects\ConsoleApplication5\ConsoleApplication5\Program.cs:line 24
]]>
</Exception>
</LogEntry>
如何在 log4net 中像 <,>
那样打印原始字符?
如果您真的想要这样做,您可以使用
writer.WriteRaw("<![CDATA[\n" + loggingEvent.GetExceptionString() + "\n]]>");
或
writer.WriteCData(loggingEvent.GetExceptionString());
但是,我强烈 劝阻您不要这样做。不能保证您最终会得到有效的 XML ...如果您的文本包含 "]]>"
那么它会导致问题。 (对于 WriteRaw
,您最终会得到无效的 XML;对于 WriteCData
,您将得到异常。)
我希望使用 XML 日志文件的目的只是为了以 XML 格式传播每个日志条目的数据。所以只需使用 writer.WriteString(loggingEvent.GetExceptionString())
然后 读取 日志文件以后就可以用它做正确的事情。将它包装在 CData 中,而不是让 XML API 只是逃避它,因为它需要对我来说似乎是个坏主意。