У меня странная проблема с log4net.
В приложении ASP.NET я хочу настроить log4net извне, поэтому у меня есть отдельный файл log4net.config, который я подключаю к своему веб-приложению с помощью этой строки в файле 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, который является частью отдельной сборки (инфраструктуры) и повторно используется в ряде проектов. У него есть 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 будет работать нормально.