If you are using log4Net for the first time in your application and logging is not working, then first check if you are calling:
log4net.Config.XmlConfigurator.Configure();
Configure() needs to be called only once during the lifetime of your application and a good place for you to insert it in a ASP.Net web-app is in the global.asax file’s Application_Start method.
Here is a basic log4Net configuration for the web.config file that you can test for basic log4Net issues.
Right under the <configuration><configSections> tag, add the following code:
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net,Version=1.2.10.0,Culture=neutral,PublicKeyToken=1b44e1d426115821" requirePermission="false"/>
Next add the following log4Net configuration section:
<log4net> <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" > <threshold value="DEBUG" /> <evaluator type="log4net.Core.LevelEvaluator,log4net"> <threshold value="DEBUG" /> </evaluator> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <root> <appender-ref ref="EventLogAppender" /> </root> </log4net>
Finally call the following code – to see if your event log gets populated with some events.
log.Debug("Debug Message"); log.Info("Info Message"); log.Error("Error Message");
Still having problem?
Turn on log4Net’s internal debugging. Easiest way to do this is to add the following KV pair under <AppSettings>:
<add key="log4net.Internal.Debug" value="true" />
And then add the following text as a child of <configuration>:
<system.diagnostics> <trace autoflush="true"> <listeners> <add name="textWriterTraceListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="logs\trace1.txt" /> </listeners> </trace> </system.diagnostics>
This will spew out log4Net’s trace information to a file called “trace1.txt” under the logs folder of your app.
Trace not giving you any information?
Try and move the log4Net settings to a separate file.
Once the log4Net settings are in a separate file, call “log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(Server.MapPath(null) +\\log4net.xml));” in your Global Application_Start method, instead of log4net.Config.XmlConfigurator.Configure(); as shown earlier.
Most of the above information is available at: http://logging.apache.org/log4net/release/faq.html
Thanks a lot, that save me from having a massive headache :)
ReplyDeleteThanks for this. Things just weren't happening. Now they are.
ReplyDeleteThanks alot.
ReplyDeleteExactly what I needed.
Chen