加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 为什么log4net不记录nhibernate信息

发布时间:2020-12-16 06:45:07 所属栏目:asp.Net 来源:网络整理
导读:我的Visual Studio解决方案包含: [DLL] Sol.DataAccess(NHibernate sessionManager) [DLL] Sol.Core(模型和存储库) [MVC] Sol.WebMvc(Controler,View) 我的所有应用程序都包含(nhibernate.dll [v3.0]和log4net.dll [v1.2.10]) 我有3个配置: web.config中:
我的Visual Studio解决方案包含:

> [DLL] Sol.DataAccess(NHibernate sessionManager)
> [DLL] Sol.Core(模型和存储库)
> [MVC] Sol.WebMvc(Controler,View)

我的所有应用程序都包含(nhibernate.dll [v3.0]和log4net.dll [v1.2.10])

我有3个配置:

web.config中:

<configuration>
    <configSections>
         <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net,Version=1.2.10.0,Culture=neutral,PublicKeyToken=1b44e1d426115821" requirePermission="false" />
         <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler,NHibernate"/>
    </configSections>
</configuration>

nhibernate.config:

<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
  <session-factory name="...">
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
    <property name="connection.connection_string_name">...</property>
    <property name="adonet.batch_size">10</property>
    <property name="show_sql">true</property>
    <property name="generate_statistics">true</property>
    <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
    <property name="use_outer_join">true</property>
    <property name="max_fetch_depth">2</property>
    <property name="command_timeout">60</property>
    <property name="adonet.batch_size">25</property>
    <property name="query.substitutions">true 1,false 0,yes 'Y',no 'N'</property>
    <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory,NHibernate.ByteCode.Castle</property>
    <property name="current_session_context_class">web</property>
    <property name="cache.use_query_cache">true</property>
    <property name="cache.provider_class">NHibernate.Caches.SysCache2.SysCacheProvider,NHibernate.Caches.SysCache2</property>
    <mapping assembly="..."/>
  </session-factory>
</hibernate-configuration>

和log4net.config:

<log4net>
  <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
    <!--for release-->
    <!--<bufferSize value="10" />-->
    <!--for debug-->
    <bufferSize value="1" />
    <connectionType value="System.Data.SqlClient.SqlConnection,System.Data,Version=1.0.3300.0,PublicKeyToken=b77a5c561934e089" />
    <connectionString value="Data Source=xxxxx; Initial Catalog=xxxx; User Id=xxxx; Password=xxxxx; App=xxxx" />
    <commandText value="INSERT INTO Logs ([Application],[Host],[User],[Date],[Thread],[Level],[Operation],[Logger],[Message],[Exception]) VALUES (@app,@hostName,@userName,@log_date,@thread,@log_level,@operation,@logger,@message,@exception)" />
    <parameter>
      <parameterName value="@app" />
      <dbType value="String" />
      <size value="255" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="xxxx" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@hostName" />
      <dbType value="String" />
      <size value="255" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%property{hostName}" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@userName" />
      <dbType value="String" />
      <size value="255" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%property{userName}" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@log_date" />
      <dbType value="DateTime" />
      <layout type="log4net.Layout.RawTimeStampLayout" />
    </parameter>
    <parameter>
      <parameterName value="@thread" />
      <dbType value="String" />
      <size value="255" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%thread" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@log_level" />
      <dbType value="String" />
      <size value="50" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%level" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@operation" />
      <dbType value="String" />
      <size value="50" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%property{Operation}" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@logger" />
      <dbType value="String" />
      <size value="255" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%logger" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@message" />
      <dbType value="String" />
      <size value="4000" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%message" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@exception" />
      <dbType value="String" />
      <size value="2000" />
      <layout type="log4net.Layout.ExceptionLayout" />
    </parameter>
  </appender>

  <appender name="FileAppender" type="log4net.Appender.FileAppender">
    <file value="Logs/Logs.txt"/>
    <appendToFile value="true"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
    </layout>
  </appender> 

  <appender name="Console" type="log4net.Appender.AspNetTraceAppender">
    <!--A1 uses PatternLayout-->
    <layout type="log4net.Layout.PatternLayout">
      <!--Print the date in ISO 8601 format-->
      <conversionPattern value="%date [%thread] %-5level %logger %ndc - %message%newline"/>
    </layout>
  </appender>

  <root>
    <level value="ALL"/>
    <appender-ref ref="Console"/>
    <appender-ref ref="FileAppender"/>
    <appender-ref ref="AdoNetAppender"/>
  </root>
</log4net>

Global.cs:

protected void Application_Start()
    {
       ...
        // Configuration

        #region log4net
        // log4net.config
        System.IO.FileInfo fi = new System.IO.FileInfo(Server.MapPath("~/log4net.config"));
        if (fi != null && fi.Exists)
        {
            // Code that runs on application startup
            log4net.Config.XmlConfigurator.Configure(fi);
        }

        // web.config
        //log4net.Config.XmlConfigurator.Configure();

        // set properti hostName
        log4net.GlobalContext.Properties["hostName"] = Dns.GetHostName();
        #endregion

        #region NHibernate
        //HibernatingRhinos.Profiler.Appender.NHibernate.NHibernateProfiler.Initialize();
        var factory = NHibernateSessionManager.ConfigureFromFile(Server.MapPath("~/hibernate.config"));
        #endregion
    }

在我的测试控制器中我有:

public class TestController : BaseController
    {
        [NHibernateSession]
        public ActionResult Index()
        {
             Logger.Error("fake error",new Exception());
        }
     }

在我的日志文件中 – Logs / Logs.txt:

2011-03-11 18:19:23,097 [8] ERROR System.Web.Mvc.Controller [(null)] - fake error
System.Exception: Exception of type 'System.Exception' was thrown.

题:
为什么log4net不记录NHibernate信息(info,debug ….)

这些dll的版本不兼容吗?

解决方法

我创建了一个空的ASP.Net MVC3项目.并且花了很多时间来解决这个问题.
我发现VS2010的bug.在项目中引用时,Visual Studio 2010不会在bin中复制dll.

我把log4net.dll手册放在我的bin文件夹中并正常工作. (有趣的是Logger.Error(“假错误”)在bin文件夹中没有log4net.dll的情况下工作正常…)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读