gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 00:38:49 25 4
gpt4 key购买 nike

我的 Visual Studio 解决方案包含:

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

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

    我有 3 个配置:

    网络配置:
    <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, Culture=neutral, 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>

    全局.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
    }

    在我的测试 Controller 中,我有:
    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 信息(信息、调试 ....)

    这些 dll 的版本不兼容吗?

    最佳答案

    我创建了一个空的 ASP.Net MVC3 项目。并在尝试解决此问题时浪费了很多时间。
    我发现了 VS2010 的错误。 当您在项目中引用它时,Visual Studio 2010 不会在 bin 中复制 dll。

    我把 log4net.dll 手册放在我的 bin 文件夹中并且工作正常。 (有趣的是 Logger.Error("fake error") 在 bin 文件夹中没有 log4net.dll 的情况下工作正常......)

    enter image description here

    关于asp.net-mvc - 为什么 log4net 不记录 nhibernate 信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5275834/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com