Why log4net does not log prohibition information

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"> <!--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> 

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?

+4
source share
2 answers

I created an empty ASP.Net MVC3 project. and lose a lot of time trying to fix this problem. And I find the error VS2010. Visual Studio 2010 does not copy the dll to bin when you reference it in a project.

I put the log4net.dll manual in the bin folder and it works fine. (Interestingly, Logger.Error ("false error") works fine without log4net.dll in the bin folder ...)

enter image description here

+3
source

First: you talk about "log4net.config", but you don't enable it anywhere. As you configure it in web.config , you should actually include the <log4net> section inside your web.config, and not as a separate file.

If you do not want this in your web.config, you can completely remove the related sections related to log4net and add the following line to yur global.asax.cs:

 log4net.Config.XmlConfigurator.ConfigureAndWatch( New FileInfo(Server.MapPath("~/yourreleativepath/log4net.config"))) 

Also, maybe you skip the priority setting, not quite sure if this helps, but try:

 <root> <priority value="DEBUG"/> <appender-ref ref="Console"/> <appender-ref ref="FileAppender"/> <appender-ref ref="AdoNetAppender"/> </root> 

Also, to finetune (because you will get a lot of messages), use something like this:

 <logger name="NHibernate.SQL"> <level value="DEBUG"/> </logger> <logger name="NHibernate"> <level value="WARN"/> </logger> 

On nhibernate.info you find a complete example .

+3
source

Source: https://habr.com/ru/post/1343349/


All Articles