2010-08-11 3 views
1

je dois vous connecter propriétés de contexte de fil comme celui-ci:comment insérer dans la base de données à partir de procédure stockée dans log4net?

string logFilePath = AppDomain.CurrentDomain.BaseDirectory + "log4netconfig.xml"; 
FileInfo finfo = new FileInfo(logFilePath); 
log4net.Config.XmlConfigurator.ConfigureAndWatch(finfo); 
ILog logger = LogManager.GetLogger("Exception.Logging"); 

log4net.ThreadContext.Properties["MESSAGE"] = exception.Message; 
log4net.ThreadContext.Properties["MODULE"] = "module1"; 
log4net.ThreadContext.Properties["COMPONENT"] = "component1"; 
logger.Debug("test"); 

et le fichier de configuration est la suivante:

<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/> 
    </configSections> 

    <log4net> 
    <logger name="Exception.Logging" level="Debug"> 
     <appender-ref ref="AdoNetAppender"/> 
    </logger> 
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> 
     <connectionString value="Data Source=xe;User ID=test;Password=test;" /> 
     <connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
     <bufferSize value="10000"/> 
     <commandText value="Log_Exception_Pkg.Insert_Log" /> 
     <commandType value="StoredProcedure" /> 

     <parameter> 
     <parameterName value="@p_Error_Message" /> 
     <dbType value="String" /> 
     <size value="255" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%property{MESSAGE}"/> 
     </layout> 
     </parameter> 

     <parameter> 
     <parameterName value="@p_Module" /> 
     <dbType value="String" /> 
     <size value="225" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%property{MODULE}"/> 
     </layout> 
     </parameter> 

     <parameter> 
     <parameterName value="@p_Component" /> 
     <dbType value="String" /> 
     <size value="225" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%property{COMPONENT}"/> 
     </layout> 
     </parameter> 
    </appender> 
    </log4net> 
</configuration> 

Mais ce ne sont pas les insérer dans la base de données. Comment puis-je faire fonctionner ça?

+0

Essayez d'activer le débogage interne (http://logging.apache.org/log4net/release/faq.html). Notez également: Log4net peut gérer des exceptions dont vous n'avez pas vraiment besoin pour utiliser les propriétés de contexte de thread pour cela ... –

+0

Merci beaucoup Stefan. C'est fait maintenant. J'ai enlevé '@' du nom du paramètre. Et cela a fonctionné finalement :) –

Répondre

2

Réponse simple: Comme il s'agit d'une connexion Oracle, supprimez le symbole @ du nom du paramètre et cela fonctionnera.

Exemple:

<parameter> 
    <parameterName value="@p_Module" /> 
    <dbType value="String" /> 
    <size value="225" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%property{MODULE}"/> 
    </layout> 
</parameter> 
0

J'ai eu le même problème, quand log4net table était différent dans le schéma. (il s'applique sûrement aussi à la procédure stockée ou au paquet s'ils sont dans un schéma différent)

N'oubliez pas d'entrer votre nom de schéma avant la table ou la procédure stockée.

Exemple:

<log4net>  
     <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> 
     <connectionType value="Oracle.DataAccess.Client.OracleConnection, Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /> 
     <connectionString ..../> 
     <commandText value="INSERT INTO schemaName.LOG4NET (LOG_DATE, LOG_LEVEL, LOG_IDENTITY, LOG_MESSAGE, LOG_EXCEPTION) VALUES (:log_date, :log_level, :log_identity, :log_message, :log_exception)" /> 
.... 
Questions connexes