Мне нужен полный контроль над выходом log4net xml.
Как можно настроить выходной шаблон?
Мне нужен полный контроль над выходом log4net xml.
Как можно настроить выходной шаблон?
Как предложил MrPeregrination вам нужно написать класс, полученный из XmlLayoutBase, переопределите метод FormatXml и попросите вашего приложения использовать его как макет:
class Program
{
static void Main(string[] args)
{
XmlConfigurator.Configure();
ILog log = log4net.LogManager.GetLogger(typeof(Program));
log.Debug("Hello world");
}
}
public class MyXmlLayout : XmlLayoutBase
{
protected override void FormatXml(XmlWriter writer, LoggingEvent loggingEvent)
{
writer.WriteStartElement("LogEntry");
writer.WriteStartElement("Message");
writer.WriteString(loggingEvent.RenderedMessage);
writer.WriteEndElement();
writer.WriteEndElement();
}
}
И в app.config поставьте это:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
<param name="File" value="log.txt" />
<param name="AppendToFile" value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="MyNamespace.MyXmlLayout" />
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="LogFileAppender" />
</root>
</log4net>
</configuration>
В файле журнала будут записаны такие записи:
<LogEntry><Message>Hello world</Message></LogEntry>
Проверьте класс XmlLayoutBase. Я думаю, это, вероятно, то, что вам нужно. Там есть функция FormatXML, которую вам нужно будет переопределить, чтобы предоставить XmlWriter правильно отформатированные данные.