Log4net с проблемами ASP.NET 3.5
У меня возникли проблемы с работой log4net для работы с ASP.NET 3.5. Это первый раз, когда я пытался использовать log4net, я чувствую, что мне не хватает части головоломки.
Мой проект ссылается на сборку log4net, и, насколько я могу судить, он успешно развертывается на моем сервере.
My web.config содержит следующее:
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler
, log4net"
requirePermission="false"/>
</configSections>
<log4net>
<appender name="InfoAppender" type="log4net.Appender.FileAppender">
<file value="..\..\logs\\InfoLog.html" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern
value="%d [%t] %-5p %c [%x] - %m%n" />
</layout>
</appender>
<logger name="_Default">
<level value="INFO" />
<appender-ref ref="InfoAppender" />
</logger>
</log4net>
Я использую следующий код для проверки регистратора:
using log4net;
using log4net.Config;
public partial class _Default : System.Web.UI.Page
{
private static readonly ILog log = LogManager.GetLogger("_Default");
protected void Page_Load(object sender, EventArgs e)
{
log.Info("Hello logging world!");
}
}
В моем Global.asax я делаю следующее:
void Application_Start(object sender, EventArgs e)
{
log4net.Config.XmlConfigurator.Configure();
}
В этот момент я не могу придумать, что еще я могу сделать неправильно. Каталог, в котором я пытаюсь сохранить журнал, доступен для записи, и даже если я пытаюсь использовать разные каталоги, я получаю тот же результат: нет файла, никаких журналов.
Любые предложения?: -)
Изменить: я пробовал несколько разных форматов для пути и имени файла журнала, некоторые из которых включают ".. \..\InfoLog.html", "InfoLog.html", "logs\InfoLog.html" "и т.д., на всякий случай, если кто-то задается вопросом, есть ли эта проблема.
Изменить: я добавил корневой журнал node обратно в раздел log4net, я пропустил это при аварии при копировании из образцов. Корневой регистратор node выглядит следующим образом:
<root>
<level value="INFO" />
<appender-ref ref="InfoAppender" />
</root>
Даже с этим мне все равно не повезло.
Ответы
Ответ 1
Корневой регистратор является обязательным, я думаю. Я подозреваю, что конфигурация не работает, потому что корень не существует.
Другая потенциальная проблема заключается в том, что Configure не указывает на Web.config.
Попробуйте настроить (Server.MapPath( "~/web.config" )).
Ответ 2
Звучит очень похоже на проблему с правами доступа к файлам. Если вы укажете имя файла без какого-либо пути, log4net будет записываться в корневую директорию веб-приложения. Попробуй это. Если не удастся добиться успеха, я бы рекомендовал включить внутреннюю отладку log4net, поместив в свой web.config следующее:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
</configuration>
Затем разверните приложение, скомпилированное в режиме отладки, и запустите визуальный студийный удаленный отладчик, чтобы увидеть любые ошибки, которые были выброшены.
Ответ 3
Iv просто потратил 3 часа, пытаясь исправить эту проблему, в конце концов это было форматирование web.config.
У меня было это, и это не сработало:
<section name="SubSonicService" type="SubSonic.SubSonicSection, SubSonic" requirePermission="false"/>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler
, log4net"
requirePermission="false"/>
изменив его на это, он зафиксировал его:
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" requirePermission="false"/>
раздражающий!!
Ответ 4
Только для информации: путь к файлу должен быть отформатирован следующим образом:
<file value="..\\..\\logs\\InfoLog.html" />
Ответ 5
Простой учебник по настройке из CodeProject
Ответ 6
У меня нет Global.asx для запуска в .net 3.5
это мой код... Я настраиваю log4net в отдельный файл log4net.config
// Configure log4net using the .config file
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
//My Web Services class name
private static readonly log4net.ILog log = log4net.LogManager.GetLogger("Service1");
Ответ 7
У меня была такая же (расстраивающая) проблема. я переместил корень в начало раздела конфигурации log4net, и все это сработало. Кроме того, у меня тоже был корень и элемент журнала, это приводило к двум строкам каждый раз, когда я звонил в журнал. я удалил элемент журнала и просто оставил корень и отлично работал.
Ответ 8
Это то, что у меня есть в Global.ASX. Все это работает в asp.net 3.5
<%@ Application Language="C#" %>
<script runat="server">
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
log4net.Config.XmlConfigurator.Configure();
}
void Application_End(object sender, EventArgs e)
{
// Code that runs on application shutdown
log4net.LogManager.Shutdown();
}
void Application_Error(object sender, EventArgs e)
{
// Code that runs when an unhandled error occurs
}
void Session_Start(object sender, EventArgs e)
{
// Code that runs when a new session is started
}
void Session_End(object sender, EventArgs e)
{
// Code that runs when a session ends.
// Note: The Session_End event is raised only when the sessionstate mode
// is set to InProc in the Web.config file. If session mode is set to StateServer
// or SQLServer, the event is not raised.
}
</script>
Ответ 9
Как создать регистратор с типом страницы, например:
private static readonly ILog log = LogManager.GetLogger(typeof(_Default));