Come ti acchiappo i comandi sql di NH #2

Questo post per approfondire/correggere la soluzione per il grabbing dell'SQL in Nhibernate trattato nel post "Come ti acchiappo i comandi sql in NH". Inoltre il post  per ringraziare Claudio che il suo commento mi ha ricordato quanto log4net e nhibernate sono sinergici.

La soluzione che adatterò non sarà completamente basata su log4net ma sfrutterà i logger che Nhibernate registra implicitamente (NHibernate e NHibernate.SQL). Logger che nella documentazione di Nhibernate sono poco/mal documentati. In particolare il logger "NHibernate.SQL" è quello che NH userà per fare il tracing dei comandi SQL inviati al database. Per cui ecco cosa scriverò nel file di configurazione.

<log4net>
  <appender name="CustomAppender" type="Sample.CustomAppenderLog4Net,Sample" >
  </appender>   
  <logger name="NHibernate.SQL" additivity="false">
    <level value="DEBUG"/>
    <appender-ref ref="CustomAppender" />
  </logger>
</log4net>

Nella configurazione qui sopra si indica che quanto scritto dal logger "NHibernate.SQL" dovrà essere intercettato da appender personalizzato. Perchè un appender personalizzato? Il progetto su cui sto lavorando dispone già di un proprio sistema di logging per cui mi occorre un IAppender che mi aiuti ad introdurmi nel sistema di log4net e rimappare quanto intercettato.

Vediamo di dare ora la risposta ad un paio di domande.

  • E' ancora necessario usare la proprietà nhibernate.show_sql per inviare i comandi sql sullo standard output? No.
  • E' ancora necessario slegare la scrittura dei log su db da NH? Si in quanto lo stack overflow non è scongiurato.
  • Perchè se usassi l'appender nativi di log4net per scrivere sul db non ci sarebbero problemi di stack overflow? AdoNetAppender - l'appender nativo di log4net per scriver su db - è svincolato da NH.
  • Devo scrivere ancora qualcosa nel Global.asax della mia applicazione web? Allo start up dell'applicazione web - Application_Start - occorre invocare esplicitamente il metodo per configurare log4net "log4net.Config.XmlConfigurator.Configure();".

oO0( la soluzione mi piace decisamente di più in quanto più strutturata e poichè nello stdout ci potrebbero effettivamente scrivere cani e porci)

posted @ domenica 5 ottobre 2008 14:13

Print
Comments have been closed on this topic.
«aprile»
domlunmarmergiovensab
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011