My Visual Studio Solution has:
- [DLL] Sol.DataAccess (NHIBernate sessionManager)
- [DLL] Sol.Core (models and repositories)
- [MVC] Sol.WebMvc (Controler, View)
My whole application contains (nhibernate.dll [v3.0] and log4net.dll [v1.2.10])
I have 3 configurations:
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>
and log4net.config:
<log4net> <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> <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"> <layout type="log4net.Layout.PatternLayout"> <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 }
in my test controller, I:
public class TestController : BaseController { [NHibernateSession] public ActionResult Index() { Logger.Error("fake error", new Exception()); } }
In my log file - 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.
Question: Why log4net does not log NHibernate information (information, debug ....)
Are the versions of these dlls compatible?