【问题标题】:Log4net Not Creating Log File For NHibernateLog4net 没有为 NHibernate 创建日志文件
【发布时间】:2009-10-20 20:47:41
【问题描述】:

这是我第一个使用 NHibernate 的严肃项目,我设置了 log4net 来输出 NHibernate 生成的 sql,但是在运行我的网络应用程序后,我找不到任何日志文件。

这个网络应用程序目前正在我的本地机器上运行,http://localhost/dispatch。 dispatch 目录是 IIS 中的一个虚拟目录,指向 My Documents/Visual Studio 2008/Projects 中的项目文件夹。

这是 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 查询。谢谢。

【问题讨论】:

    标签: nhibernate log4net


    【解决方案1】:

    您可能必须配置 web.config 中的 NHibernate.SQL 部分,以将其级别设置为 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 是一篇对启用 NHibernate 的 SQL 日志记录非常有帮助的帖子

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-06
      • 2011-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多