我遇到了一个log4net的奇怪问题。
在一个ASP.NET应用程序中,我想要外部配置log4net,因此我有一个单独的log4net.config文件,我通过在属于我的Web应用程序的AssemblyInfo.cs文件中使用以下行来连接它:
现在,如果我像这样正常实例化log4net日志记录器类:
在一个ASP.NET应用程序中,我想要外部配置log4net,因此我有一个单独的log4net.config文件,我通过在属于我的Web应用程序的AssemblyInfo.cs文件中使用以下行来连接它:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)]
现在,如果我像这样正常实例化log4net日志记录器类:
public class MyClass
{
private static readonly ILog _logger = log4net.LogManager.GetLogger(typeof(MyClass));
....
这样做是有效的,记录日志也像平常一样工作。然而,我将我的日志代码封装在一个LogManager类中,它是一个单独的程序集(Infrastructure)的一部分,并且被多个项目重复使用。它有一个GetLogger方法,看起来像这样:
public static class LogManager
{
public static ILog GetLogger()
{
var stack = new StackTrace();
var frame = stack.GetFrame(1);
return new log4net.LogManager.GetLogger(frame.GetMethod().DeclaringType);
}
}
所以我可以在我的asp.net代码中使用这个:
public class MyClass
{
private static readonly ILog _logger = LogManager.GetLogger();
....
但是...这不起作用!没有日志记录。它似乎没有正确地连接配置文件。如果我直接将log4net配置放入web.config中,那么LogManager可以正常工作。