log4net с проблемами ASP.NET 3.5 - PullRequest
       30

log4net с проблемами ASP.NET 3.5

13 голосов
/ 22 октября 2008

У меня возникли проблемы с работой log4net из ASP.NET 3.5. Это первый раз, когда я пытался использовать log4net, я чувствую, что мне не хватает части головоломки.

Мой проект ссылается на сборку log4net, и, насколько я могу судить, он успешно разворачивается на моем сервере.

Мой 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 "и т. д., на случай, если кому-то интересно, в этом ли проблема.


Редактировать: Я добавил корневой логгер-узел обратно в раздел log4net, я случайно пропустил это при копировании из образцов. Корневой узел логгера выглядит так:

<root>
  <level value="INFO" />
  <appender-ref ref="InfoAppender" />
</root>

Но даже с этим мне все равно не везет.

Ответы [ 9 ]

13 голосов
/ 22 октября 2008

root логгер обязателен я думаю. Я подозреваю, что конфигурация терпит неудачу, потому что корень не существует.

Другая потенциальная проблема заключается в том, что Configure не указывает на Web.config.

Вместо этого попробуйте настроить (Server.MapPath ("~ / web.config")).

5 голосов
/ 14 ноября 2008

Это очень похоже на проблему с правами доступа к файлам. Если вы укажете имя файла без указания пути, log4net выполнит запись в корневой каталог веб-приложения. Попробуй это. Во избежание каких-либо успехов, я бы порекомендовал вам включить внутреннюю отладку log4net, добавив в ваш web.config следующее:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="log4net.Internal.Debug" value="true"/>
    </appSettings>
</configuration>

Затем разверните приложение, скомпилированное в режиме отладки, и запустите удаленный отладчик Visual Studio , чтобы увидеть любые ошибки.

4 голосов
/ 06 апреля 2009

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"/>

раздражающий !!

1 голос
/ 05 октября 2010

У меня нет 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");
1 голос
/ 20 апреля 2009

Простое руководство по настройке CodeProject

1 голос
/ 19 декабря 2008

Только для информации: путь к файлу должен быть отформатирован следующим образом:

<file value="..\\..\\logs\\InfoLog.html" />
0 голосов
/ 14 января 2009

У меня была такая же (расстраивающая) проблема. я переместил рут в верхнюю часть секции конфигурации log4net и все заработало. Кроме того, у меня тоже был элемент root и элемент logger, поэтому каждый раз, когда я звонил в logger, получалось две строки. я удалил элемент логгера и просто сохранил рут и он отлично работает.

0 голосов
/ 19 декабря 2008

Как насчет создания регистратора с типом страницы, например:

private static readonly ILog log = LogManager.GetLogger(typeof(_Default));
0 голосов
/ 14 ноября 2008

Это то, что у меня есть в 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>
...