Я пытаюсь настроить log4net, но я не могу заставить его работать. Я поместил это в свой Web.config:
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<appender name="TraceAppender" type="log4net.Appender.TraceAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="logfile.log" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<maxSizeRollBackups value="14" />
<maximumFileSize value="15000KB" />
<datePattern value="yyyyMMdd" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingFileAppender" />
<appender-ref ref="TraceAppender" />
</root>
</log4net>
Затем в моем коде я выполняюсь:
log4net.Config.XmlConfigurator.Configure(new FileInfo(HttpContext.Current.Server.MapPath("~/Web.config")));
ILog log = LogManager.GetLogger("MainLogger");
if (log.IsDebugEnabled)
log.Debug("lalala");
Но ничего не происходит. Я проверил переменную "журнала", и она содержит объект LogImpl, который имеет все регистрирующиеся включенные уровни. Я не получаю ошибки или предупреждения конфигурации, я не вижу файла в корне в мусорном ведре или нигде.
Что я должен сделать, чтобы заставить его работать?
Есть ли у вас эта строка в вашем файле AssemblyInfo.cs?
[assembly: log4net.Config.XmlConfigurator()]
Также вам следует рассмотреть подход typeof (YourClass), использованный Эриком в его ответе ниже. В первый раз я проголосовал за альтернативный ответ одному из моих. :)
У вас не определен TraceAppender.
У вас не настроен регистратор с именем "MainLogger"
<logger name="MainLogger">
<level value="DEBUG"/>
<appender-ref ref="RollingFileAppender" />
<appender-ref ref="TraceAppender" />
</logger>
Также посмотрите здесь
Попробуйте вместо этого написать:
log4net.Config.XmlConfigurator.Configure();
, поскольку Web.config - это расположение по умолчанию, в котором Log4Net будет искать.
В противном случае удалите всю эту строку из кода и вставьте следующее в файл AssemblyInfo.cs:
[assembly: log4net.Config.XmlConfigurator()]
Это настроит Log4Net на уровне сборки. Затем в своем коде просто создайте регистратор вроде этого:
private static readonly ILog Log = LogManager.GetLogger(typeof(YourFunkyClass));
Вам понадобится другой метод для настройки log4net: log4net.Config.XmlConfigurator.Configure ()
.
Затем он автоматически прочитает файл web.config.
См. http://logging.apache.org/log4net/release/manual/configuration.html в разделе «файлы .config».