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.
«agosto»
domlunmarmergiovensab
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234