问题
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
回答1:
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)
回答2:
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
来源:https://stackoverflow.com/questions/21166126/log4net-separate-config-file-not-working