Log4Net. Использование C # AdoNetAppender с пользовательским макетом XML - PullRequest
0 голосов
/ 20 августа 2011

Я немного застрял.Я писал модуль журналирования, который требует от аппенданта возможности выполнения хранимой процедуры в базе данных для регистрации нашей информации.Я написал пользовательский макет 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 запустил событие регистрации через этот макет и затем запустил storproc с результирующим XML в качестве параметра,т. е.

EXEC Logging.InsertEntry @XML

К сожалению, вокруг нет примеров.

Любая помощь будет чрезвычайно признательна.

1 Ответ

0 голосов
/ 21 августа 2011

Примерно так должно работать (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 ...

...