2010-05-24 6 views
3

Mon objectif est de me connecter à Oracle 10g en utilisant log4net via la procédure stockée. J'ai effectué la configuration dans le fichier xml de configuration de log4net pour utiliser ado.net appender et utiliser la procédure stockée pour la connexion à db. Je veux enregistrer des exceptions dans db avec des paramètres comme le code d'erreur, le message d'erreur, etc. Veuillez me guider comment passer cet objet d'exception en utilisant C# CODE pour écrire en db. J'ai fait des configurations appropriées en XML pour les procédures stockées.Utilisation de log4net via des procédures stockées dans Oracle

Merci.

code

est la suivante:

 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["INNER_EXCEPTION"] = exception.InnerException.ToString(); 

       log4net.ThreadContext.Properties["INNER_EXCEPTION"] = string.Empty; 
       log4net.ThreadContext.Properties["STACK_TRACE"] = exception.StackTrace.ToString(); 

       log4net.ThreadContext.Properties["STACK_TRACE"] = string.Empty; 

       log4net.ThreadContext.Properties["MESSAGE"] = ((H2hException)exception).Message; 
       log4net.ThreadContext.Properties["CODE"] = "err-1010"; 
       log4net.ThreadContext.Properties["MODULE"] = "NED.Development"; 
       log4net.ThreadContext.Properties["COMPONENT"] = "Component"; 
       log4net.ThreadContext.Properties["ADDITIONAL_MESSAGE"] = "msg"; 
       logger.Debug(""); 

<parameter> 
    <parameterName value="@p_Error_Code" /> 
    <dbType value="VARCHAR2" /> 
    <size value="16" /> 
    <!--<layout type="log4net.Layout.PatternLayout" value="%level" />--> 
    <conversionPattern value="%property{log4net:CODE}"/> 
    </parameter> 
    <parameter> 
    <parameterName value="@p_Error_Message" /> 
    <dbType value="VARCHAR2" /> 
    <size value="255" /> 
    <!--<layout type="log4net.Layout.PatternLayout" value="%logger" />--> 
    <conversionPattern value="%property{log4net:MESSAGE}"/> 
    </parameter> 

    <parameter> 
    <parameterName value="@p_Inner_Exception" /> 
    <dbType value="VARCHAR2" /> 
    <size value="4000" /> 
    <!--<layout type="log4net.Layout.PatternLayout" value="%thread" />--> 
    <conversionPattern value="%property{log4net:INNER_EXCEPTION}"/> 
    </parameter> 
    <parameter> 
    <parameterName value="@p_Module" /> 
    <dbType value="VARCHAR2" /> 
    <size value="225" /> 
    <!--<layout type="log4net.Layout.PatternLayout" value="%message" />--> 
    <conversionPattern value="%property{log4net:MODULE}"/> 
    </parameter> 
    <parameter> 
    <parameterName value="@p_Component" /> 
    <dbType value="VARCHAR2" /> 
    <size value="225" /> 
    <!--<layout type="log4net.Layout.ExceptionLayout" />--> 
    <conversionPattern value="%property{log4net:COMPONENT}"/> 
    </parameter> 
    <parameter> 
    <parameterName value="@p_Stack_Trace " /> 
    <dbType value="VARCHAR2" /> 
    <size value="4000" /> 
    <!--<layout type="log4net.Layout.PatternLayout"/>--> 
    <conversionPattern value="%property{log4net:STACK_TRACE}"/> 
    </parameter> 
    <parameter> 
    <parameterName value=" @p_Additional_Message" /> 
    <dbType value="VARCHAR2" /> 
    <size value="4000" /> 
    <!--<layout type="log4net.Layout.ExceptionLayout" />--> 
    <conversionPattern value="%property{log4net:ADDITIONAL_MESSAGE}"/> 
    </parameter> 
</appender> 

+3

Veuillez expliquer "ne fonctionne pas" plus en profondeur. –

+1

Vous vous connectez à partir de .Net à une base de données Oracle? Ou êtes-vous en train d'exécuter un code .Net à partir d'un déclencheur Oracle ou quelque chose? Votre mention d'une procédure stockée est source de confusion. Je ne vois même pas où vous avez configuré votre chaîne de connexion pour que log4net fonctionne avec un AdoNetAppender. – jonathanpeppers

Répondre

0

Je pense que votre configuration est légèrement ... Essayez cette

Notez que les entrées des tampons appender ADO (je ne sais pas à quel degré), mais cela signifie que l'entrée ne sera pas apparaître immédiatement dans la base de données. Comme le mentionne johnathon, étant donné que vous n'avez pas affiché la configuration complète, nous ne pouvons pas non plus vérifier les filtres, les chaînes de connexion ou la configuration de proc stockée.

Votre code actuel semble correct. Cependant, je mettrais du texte dans le

logger.Debug (""); ligne

, juste au cas où le appender est de lancer des journaux qui n'ont pas données ...

Hope this helps un peu ...

1

Log4net tampons commandes SQL. Vous pouvez définir le tampon comme ceci:

<appender name="AdoNetAppender_Oracle" type="log4net.Appender.AdoNetAppender"> 
    <bufferSize value="128" /> 
</appender> 
Questions connexes