Спасибо за ваши усилия, но ваш последний ответ немного неправильный. Если вы используете атрибут сборки для подключения файла конфигурации, вам также не нужно подключать его в Global.asax.cs. Вместо этого вы можете просто вызвать XmlConfigurator.Configure ();
я странная проблема с log4net.
В приложении ASP.NET я хочу настроить log4net внешне, поэтому у меня есть отдельный файл log4net.config, который я подключаю к своему веб-приложению с помощью этой строки в файле AssemblyInfo.cs, принадлежащем моему веб-приложению:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)]
Теперь, если я создаю экземпляр класса log4net logger обычным способом, подобным этому:
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 работает нормально.