Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Log4Net separate config file not working

I'm having a strange problem. I have multiple projects in a solution. One of them is a WebAPI and it logs just fine. Another is an MVC admin site, this one won't log. Here's what I've tried.

My logging code:

var log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
log.Info("Some log message");  

In the assemblyInfo I tried each of the following...

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "logging.config", Watch = true)]
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "C:\\full_path\\logging.config", Watch = true)]  

In the Global.asax application_start I've tried the following (removing the assemblyInfo lines)

log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo("Logging.config"));
var log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
log.Info("Application starting");  

This also doesn't create a log. The one way I could get one created was to use the code in the global.asax and the full path to the logging.config.

I'm confused, since the webapi works with just the assemblyInfo with only a relative path. I also made a sample dummy solution with an MVC project with the AssemblyInfo solution (relative path), and it worked there too.

Any ideas?

UPDATE - FOUND ISSUE

I had to setup the config file watcher in Application_Start:

log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(AppDomain.CurrentDomain.BaseDirectory + "logging.config"));

Turns out that DotNetOpenAuth.Core.dll uses log4net and will make using the AssemblyInfo solution not work. I found the details in this blog: http://hanskindberg.wordpress.com/2013/04/07/log4net-configuration/

Thanks

like image 350
BCarlson Avatar asked Jan 16 '14 15:01

BCarlson


2 Answers

I had to setup the config file watcher in Application_Start:

log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(AppDomain.CurrentDomain.BaseDirectory + "logging.config"));

Turns out that DotNetOpenAuth.Core.dll uses log4net and will make using the AssemblyInfo solution not work. I found the details in this blog: http://hanskindberg.wordpress.com/2013/04/07/log4net-configuration/ (look at the paragraph that mentions DotNetOpenAuth.Core.dll)

like image 101
BCarlson Avatar answered Oct 17 '22 14:10

BCarlson


I struggled for this solution for many days. I could finally found below solution worked for me>

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)] plus the configuration suggested by @BCarlson

XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config"));

To summaries everything, I have created a sample c# console project for log4net configuration with external log4net.config file. https://github.com/riddhik84/Log4net-Tutorial

like image 35
Riddhi Avatar answered Oct 17 '22 15:10

Riddhi