2009-10-13 3 views
1

Это мой первый серьезный проект с использованием NHibernate, и у меня есть setup log4net для вывода sql, сгенерированного NHibernate, но после запуска моего веб-приложения я не могу найти файлы журналов.Log4net Не создает файл журнала для NHibernate

Это веб-приложение в настоящее время выполняется на моей локальной машине с помощью http://localhost/dispatch. Каталог диспетчеризации - это виртуальный каталог в IIS, указывающий на папку проекта в My Documents/Visual Studio 2008/Projects.

Вот relavent часть 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> 

Кроме того, мой файл Global.asax выглядит следующим образом:

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); 
     } 
    } 
} 

Пожалуйста, дайте мне знать, что я делаю неправильно. Мне нужно увидеть этот вывод для отладки неэффективного SQL-запроса. Благодарю.

ответ

2

Возможно, вам придется настроить раздел NHibernate.SQL в файле web.config, чтобы установить уровень в DEBUG (но не INFO). Вы также отсутствует раздел 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 это сообщение, что очень полезно, позволяющей протоколирования SQL для NHibernate

Смежные вопросы