2013-11-06 3 views
0

У меня проблемы с моим AdoNetAppender - это просто не протоколирование. Я просмотрел руководство по log4net и различные другие ссылки, но не вижу, что я делаю неправильно. Ниже приведен мой файл конфигурации и как я его называю, поэтому любая помощь будет принята с благодарностью!Log4net AdoNetAppender не сохраняется до Db

<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> 
    <bufferSize value="1" /> 
    <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    <connectionString value="***" /> 
    <commandText value="dbo.spx_CreatePageLog" /> 
    <commandType value="StoredProcedure" /> 
    <!--<parameter> 
    <parameterName value="@log_date" /> 
    <dbType value="DateTime" /> 
    <layout type="log4net.Layout.RawTimeStampLayout"> 
     <conversionPattern value="%message" /> 
    </layout> 
    </parameter>--> 
    <parameter> 
    <parameterName value="@HTTPMethod" /> 
    <dbType value="String" /> 
    <size value="10" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%message" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@URI" /> 
    <dbType value="String" /> 
    <size value="512" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%URI{URI}" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@RequestData" /> 
    <dbType value="String" /> 
    <size value="1024" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%RequestData{RequestData}" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@UserID" /> 
    <dbType value="int" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%UserID{UserID}" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@UserToDealerID" /> 
    <dbType value="int" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%UserToDealerID{UserToDealerID}" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@AdminID" /> 
    <dbType value="String" /> 
    <size value="256" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%AdminID{AdminID}" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@SessionID" /> 
    <dbType value="String" /> 
    <size value="256" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%SessionID{SessionID}" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@BrowserInfo" /> 
    <dbType value="String" /> 
    <size value="1024" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%BrowserInfo{BrowserInfo}" /> 
    </layout> 
    </parameter> 
    <!--<parameter> 
    <parameterName value="@exception" /> 
    <dbType value="String" /> 
    <size value="2000" /> 
    <layout type="log4net.Layout.ExceptionLayout" /> 
    </parameter>--> 
</appender> 
<root> 
    <level value="DEBUG" /> 
    <appender-ref ref="AdoNetAppender" /> 
</root> 

string RequestData = auditModel.ParameterValues.GetDictionaryIntoString<string>(); 
     string BrowserInfo = auditModel.BrowserInfo.GetDictionaryIntoString<string>(); 

     //log4net.LogicalThreadContext.Properties["HTTPMethod"] = auditModel.Method; 
     log4net.GlobalContext.Properties["URI"] = auditModel.RequestUrl; 
     log4net.GlobalContext.Properties["RequestData"] = RequestData; 
     log4net.GlobalContext.Properties["UserID"] = auditModel.UserID; 
     log4net.GlobalContext.Properties["UserToDealerID"] = auditModel.UserToDealerID; 
     log4net.GlobalContext.Properties["AdminID"] = auditModel.AdminID; 
     log4net.GlobalContext.Properties["SessionID"] = "123456"; //auditModel.SessionID; 
     log4net.GlobalContext.Properties["BrowserInfo"] = BrowserInfo; 

     Logger.Debug(auditModel.Method); 

ответ

0

Вы пытаетесь использовать хранимые процедуры для хранения Log4Net войти в базу данных. Из того, что у вас есть, я могу только думать об этих двух вещах, которые могут вызвать проблему.

1) Значение conversionPattern неверно. См. Ниже:

<parameter> 
    <parameterName value="@HTTPMethod" /> 
    <dbType value="String" /> 
    <size value="10" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%message" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@URI" /> 
    <dbType value="String" /> 
    <size value="512" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%property{URI}" /> <- here use property instead of "UserID" 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@RequestData" /> 
    <dbType value="String" /> 
    <size value="1024" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%property{RequestData}" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@UserID" /> 
    <dbType value="int" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%property{UserID}" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@UserToDealerID" /> 
    <dbType value="int" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%property{UserToDealerID}" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@AdminID" /> 
    <dbType value="String" /> 
    <size value="256" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%property{AdminID}" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@SessionID" /> 
    <dbType value="String" /> 
    <size value="256" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%property{SessionID}" /> 
    </layout> 
    </parameter> 
    <parameter> 
    <parameterName value="@BrowserInfo" /> 
    <dbType value="String" /> 
    <size value="1024" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%property{BrowserInfo}" /> 
    </layout> 
    </parameter> 

2) Если вы перешли на предыдущий код и он по-прежнему не работает. Посмотрите, соответствуют ли параметры log4Net , соответствующие параметрам в хранимых процедурах. Вы можете попытаться использовать поддельные данные и выполнить хранимые процедуры в любом месте, как раньше Logger.Debug(). Если это работает, проблема в том,

Logger.Debug(auditModel.Method); 

Для получения дополнительной информации вы можете прочитать эти статьи:

http://www.l4ndash.com/News/tabid/69/ctl/ArticleView/mid/413/articleId/5/Using-Log4Net-to-log-from-Database-Stored-procedures.aspx

http://blogs.claritycon.com/blog/2006/02/log4net-versus-enterprise-library-2-0-logging-application-block-part-ii-database-logging/

Надеется, что это помогает.

+0

Куда бы я положил это? – donpisci

+0

привет @donpisci, я обновил свой ответ, надеюсь, что это поможет. – Lin

Смежные вопросы