Nella configurazionr di NH è possibile tramite l'opzione hibernate.show_sql indicare al framework di eseguire il tracing dei comandi sql eseguiti sullo standard output... che per una console application è la console stessa. Come ti acchiappo i comandi sql se sono su web, windows o servizio windows?
Una tecnica interessante è quella di redirigire lo standard out (vedi Console.SetOut) su un writer alternativo che poi reindirizza tale ouput su trace, debug o database. Ecco il semplice TextWriter che ho implementato per una soluzione web. Sicuramente investendo più tempo si può avere qualcosa di più raffinato.
public class Global : System.Web.HttpApplication
{
#region StoutGrabber
class StoutGrabber : TextWriter
{
public override System.Text.Encoding Encoding
{
get
{
return System.Text.Encoding.Default;
}
}
public override void WriteLine(string value)
{
Trace.WriteLine(value);
}
}
#endregion
private static readonly StoutGrabber stdout = new StoutGrabber();
protected void Application_Start(object sender, EventArgs e)
{
Console.SetOut(stdout);
}
}
Riguardo alla soluzione del salvattaggio su database - esempio per un logging di "debug" aggressivo - attenzione che la scrittura del log dovrà essere fatta senza l'ausilio di NH... o fidatevi che lo StackOverFlow è assicurato in quanto la scrittura del log su db genererebbe il tracing dei comandi sql associati che intercettati si cercherà nuovamente di salvarli e così per un loop senza fine!
mmm... in realtà esiste una mossa più facile e non me ne sono accorto? Dentro di me sto davvero sperando che la risposta sia si...
o0O( Sapete che vi dico? Grazie al nuovo eepc posso dar più voce al mio blog sfruttando i tempi morti della metropolitana... che di strada ne ho tanta e memoria poco e a casa mi sono scordato di pubblicarlo :-)
posted @ sabato 4 ottobre 2008 17:51