2009-10-13 7 views
1

Ceci est mon premier projet sérieux utilisant NHibernate et j'ai configuré log4net pour sortir le sql généré par NHibernate mais après avoir exécuté mon application web je ne trouve aucun fichier journal. Cette application Web est actuellement exécutée sur ma machine locale avec http://localhost/dispatch. Le répertoire dispatch est un répertoire virtuel dans IIS pointant vers un dossier de projet dans Mes documents/Visual Studio 2008/Projects.Log4net ne crée pas de fichier journal pour NHibernate

Voici la partie relavent de Web.config

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory> 
     <property name="connection.provider"> 
      NHibernate.Connection.DriverConnectionProvider 
     </property> 
     <property name="dialect"> 
      NHibernate.Dialect.MsSql2008Dialect 
     </property> 
     <property name="connection.driver_class"> 
      NHibernate.Driver.SqlClientDriver 
     </property> 
     <property name="connection.connection_string"> 
      my connection string 
     </property> 
     <property name="proxyfactory.factory_class"> 
      NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle 
     </property> 
     <property name="show_sql">true</property> 
    </session-factory> 
</hibernate-configuration> 

<log4net> 
    <appender name="NHibernateFileLog" type="log4net.Appender.FileAppender"> 
     <file value="logs/nhibernate.txt" /> 
     <appendToFile value="false" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%d{HH:mm:ss.fff} [%t] %-5p %c - %m%n" /> 
     </layout> 
    </appender> 
    <logger name="NHibernate.SQL" additivity="false"> 
     <level value="INFO"/> 
     <appender-ref ref="NHibernateFileLog"/> 
    </logger> 
</log4net> 

également mon fichier Global.asax ressemble à ceci:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using System.Web.Routing; 

[assembly: log4net.Config.XmlConfigurator(Watch = true)] 

namespace DispatchBoard { 
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit http://go.microsoft.com/?LinkId=9394801 

    public class MvcApplication : System.Web.HttpApplication { 
     public static void RegisterRoutes(RouteCollection routes) { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      routes.MapRoute(
       "Default",            // Route name 
       "{controller}/{action}/{id}",       // URL with parameters 
       new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
      ); 

     } 

     protected void Application_Start() { 
      RegisterRoutes(RouteTable.Routes); 
     } 
    } 
} 

S'il vous plaît laissez-moi savoir ce que je fais mal. J'ai besoin de voir cette sortie pour déboguer une requête SQL inefficace. Merci.

Répondre

2

Vous devrez peut-être configurer la section NHibernate.SQL dans web.config pour qu'elle définisse le niveau sur DEBUG (mais pas sur INFO). Vous manque également la section NHibernate.Loader.Loader

<logger name="NHibernate.SQL" additivity="false"> 
     <level value="DEBUG" /> 
     <appender-ref ref="ConsoleAppender" /> 
    </logger> 
    <!-- 
     NHibernate.Loader.Loader logs diagnostic stuff and SELECTs. 
     You can use either logger, or both, depending on you needs. 
    --> 
    <logger name="NHibernate.Loader.Loader" additivity="false"> 
     <level value="INFO" /> 
     <appender-ref ref="ConsoleAppender" /> 
    </logger> 

Here est un poste qui est très utile pour activer la journalisation SQL pour NHibernate

Questions connexes