Log4Net:使用c# AdoNetAppender和自定义Xml布局
本文关键字:自定义 Xml 布局 AdoNetAppender 使用 Log4Net | 更新日期: 2023-09-27 18:06:23
我有点卡住了。我一直在写一个日志模块,它要求appender能够在数据库上执行存储过程来记录我们的信息。我已经编写了一个自定义的xml布局,如下所示:
protected override void FormatXml(XmlWriter writer, LoggingEvent loggingEvent)
{
writer.WriteStartElement("LogEntry");
writer.WriteStartElement("DateTime");
writer.WriteString(loggingEvent.TimeStamp.ToLongTimeString());
writer.WriteEndElement();
writer.WriteStartElement("Message");
writer.WriteString(loggingEvent.RenderedMessage);
writer.WriteEndElement();
writer.WriteStartElement("User");
writer.WriteString(loggingEvent.UserName);
writer.WriteEndElement();
writer.WriteStartElement("Process");
writer.WriteString(loggingEvent.ThreadName);
writer.WriteEndElement();
writer.WriteStartElement("Severity");
writer.WriteString(loggingEvent.Level.ToString());
writer.WriteEndElement();
writer.WriteStartElement("Title");
writer.WriteString(loggingEvent.LoggerName);
writer.WriteEndElement();
writer.WriteStartElement("Class");
writer.WriteString(loggingEvent.LocationInformation.ClassName);
writer.WriteEndElement();
writer.WriteStartElement("Filename");
writer.WriteString(loggingEvent.LocationInformation.FileName);
writer.WriteEndElement();
writer.WriteEndElement();
}
所以基本上,我希望AdoNetAppender通过这个布局运行日志事件,然后用结果Xml作为参数执行storproc。例如
EXEC Logging.InsertEntry @XML
遗憾的是,这里似乎没有任何例子。
像这样的东西应该工作(SQL Server):
<appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
<bufferSize value="1" />
<threshold value="ALL"/>
<param name="ConnectionType" value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<param name="ConnectionString" value="YourConnectionString" />
<param name="UseTransactions" value="False" />
<commandText value="Logging.InsertEntry" />
<commandType value="StoredProcedure" />
<parameter>
<parameterName value="XML"/>
<dbType value="String"/>
<layout type="YourLayoutType">
</parameter>
</appender>
我想知道,如果你不想创建一个存储过程,有一个参数在你的xml结构中的所有元素…