我遇到了一个奇怪的问题。我在一个解决方案中有多个项目,其中一个是 WebAPI,记录日志工作正常。还有一个是 MVC 管理站点,但无法记录日志。这是我尝试过的:
我的日志记录代码:
var log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
log.Info("Some log message");
在assemblyInfo中,我尝试了以下每个...
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "logging.config", Watch = true)]
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "C:\\full_path\\logging.config", Watch = true)]
在Global.asax的application_start方法中,我尝试了以下操作(移除assemblyInfo行)。log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo("Logging.config"));
var log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
log.Info("Application starting");
这也不会创建日志。唯一能够创建日志的方法是使用global.asax中的代码以及logging.config的完整路径。
我很困惑,因为WebAPI只需使用AssemblyInfo并且仅使用相对路径即可工作。我还创建了一个带有MVC项目的样本虚拟解决方案(相对路径),在那里它也能正常工作。
有任何想法吗?
更新-发现问题
我必须在Application_Start中设置配置文件观察器:
log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(AppDomain.CurrentDomain.BaseDirectory + "logging.config"));
事实证明,DotNetOpenAuth.Core.dll使用log4net,因此使用AssemblyInfo解决方案将无法起作用。我在这篇博客中找到了详细信息:http://hanskindberg.wordpress.com/2013/04/07/log4net-configuration/
谢谢。
DeclaryingType
打印出来的内容匹配? - matth