Per abilitare il logging delle query con NHibernate occorre:
- Avere nella bin dell applicativo ( ie: nella /bin per le applicazioni web, a fianco dell’ esequibile per le applicazioni stand-alone ) la dll di log4net.
- Aggiungere nel file di configurazione la sessione di config per log4net:
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<appender name="console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%-5p - %m%n" />
</layout>
</appender>
<logger name="NHibernate.SQL" additivity="false">
<level value="ALL"/>
<appender-ref ref="console" />
</logger>
<root>
<priority value="WARN" />
<appender-ref ref="console" />
</root>
</log4net>
</configuration>
Con questa configurazione si usa il console appender, per un’applicativo web potrebbe essere meglio usare un TraceAppender o un altro appender di proprio gusto
- Assicurarsi di chiamare, almeno una voltanell’applicazione log4net.XmlConfigurator.Configure()
- Aggiungere questa proprietà nella configurazione di NH: <property name="show_sql">true</property>
Se NON vogliamo mettere nulla di log4net nella configurazione:
Possiamo configurare log4net dall’ applicativo, con un paio di linee di codice:
1: TraceAppender app = new TraceAppender();
2: app.Layout = new SimpleLayout();
3: LoggerMatchFilter filter = new LoggerMatchFilter();
4: filter.LoggerToMatch="NHibernate.SQL";
5: filter.AcceptOnMatch = true;
6: filter.ActivateOptions();
7: app.AddFilter(filter); // L'ordine di questo filtro
8: app.AddFilter(new DenyAllFilter()); // e di quest'altro E' importante
9: app.ActivateOptions();
10: BasicConfigurator.Configure( app);
In questo caso si possono saltare gli step da 1 a 3. Questo codice deve essere chiamato una volta nell’applicazione in fase di startup, per un’applicazione web, potrebbe andare bene l’evento di startup dell'applicazione in global.asax. Con l’appender e i filtri configurati si ottiene nell'area trace di Visual Studio ( Output-tab Debug) l’output delle sole query generate da NH ( senza gli altri logger, se servono si possono togliere i filtri )