Не удается заставить Log4Net работать на моем сайте ASP.NET :( - PullRequest
5 голосов
/ 10 августа 2009

действительно простой вопрос -> я не могу получить какие-либо данные из Log4Net в моем приложении ASP.NET. У меня есть простой веб-сайт ASP.NET, который ссылается на библиотеку классов. В этой библиотеке классов у меня есть несколько строк, которые вызывают регистратор.

Я пытаюсь прочитать выходные данные log4net в моей отладке Visual Studio 2008 Вывод окно .

Вот мой код и моя конфигурация ...

//Class Library project
//File: Foo.cs
public class FooService
{
    private static readonly ILog log = LogManager.GetLogger(typeof(FooService));

    public FooService()
    {
        // NOTE: To play with my L4N settings, I'll call Debug once, then Info once.

        log.Info("Starting Constructor");

        // ... snip ...

        log.Debug("Leaving Constructor");
    }
}


// ASP.NET Website project
// File: global.asax
void Application_Start(object sender, EventArgs eventArgs) 
{
    log4net.Config.XmlConfigurator.Configure();
}

// File: Whatever.aspx.cs
// A delegate method (when a user clicks a button) creates the FooService() instance.

// File: web.config
<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler" requirePermission="false" />

    // ....

</configSections>


<log4net>
    <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
        <mapping>
            <level value="ERROR" />
            <foreColor value="White" />
            <backColor value="Red, HighIntensity" />
        </mapping>
        <mapping>
            <level value="DEBUG" />
            <backColor value="Green" />
        </mapping>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
        </layout>
    </appender>

    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
        <layout type="log4net.Layout.PatternLayout" value="%date [%thread] %-5level %logger - %message%newline" />
    </appender>

    <appender name="OutputDebugStringAppender" type="log4net.Appender.OutputDebugStringAppender">
        <mapping>
            <level value="ERROR" />
            <foreColor value="White" />
            <backColor value="Red, HighIntensity" />
        </mapping>
        <mapping>
            <level value="DEBUG" />
            <backColor value="Blue" />
        </mapping>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
        </layout>
    </appender>


    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="App_Data\logging\log-append.txt"/>
    </appender>

    <!-- Setup the root category, add the appenders and set the default level -->
    <root>
        <level value="ALL" />
        <appender-ref ref="OutputDebugStringAppender" />
        <appender-ref ref="ConsoleAppender" />
        <appender-ref ref="ColoredConsoleAppender" />
    </root>
    <!-- Specify the level for some specific categories -->
    <logger name="DotNetOpenAuth">
        <level value="ALL" />
    </logger>
</log4net>

Приветствия за любую помощь или предложения ...

РЕДАКТИРОВАТЬ: Добавлен RollingLogFileAppender.

Ответы [ 5 ]

5 голосов
/ 10 августа 2009

У меня была такая же проблема, и я думаю, что она искала неправильный файл web.config или что-то в этом роде. Я наконец отделил log4net.config от web.config и указал путь к нему \ inetpub \ Logs \ log4net.config, и все хорошо.

UDPATED ON REQUEST: отредактировано из более сложной версии.

<?xml version="1.0" encoding="utf-8"?>
<log4net>
    <appender name="TraceAppender" type="log4net.Appender.TraceAppender">
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date [%thread] %-5level (%logger:%line) - %message%newline" />
        </layout>
    </appender>\

    <root>
        <!--ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF-->
        <level value="ALL" />
        <appender-ref ref="TraceAppender" />
    </root>
</log4net>

И это настроено в коде следующим образом:

        var logpath = WebConfigurationManager.AppSettings["LogConfigPath"] ?? @"\Inetpub\Logs\log4net.config";
        var finfo = new System.IO.FileInfo ( logpath );
        XmlConfigurator.Configure( finfo );
5 голосов
/ 10 августа 2009

ASP.Net имеет ограничение на использование доступа к файловой системе, поэтому попробуйте явно указать каталог в App_Data (если это разрешено) Вот мой рабочий образец:

<log4net>
    <appender name="FileAppender" type="log4net.Appender.FileAppender">
        <file value="App_Data\logging\log-file.txt"/>

или с опрокидыванием

    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="App_Data\logging\log-append.txt"/>
3 голосов
/ 11 августа 2009

Хорошо, нашел ответ. Мне нужно было использовать TraceAppender .

Файл конфигурации приложения может быть использован для контроля того, что слушатели на самом деле используются. Смотрите MSDN документация для класса Trace для подробности о настройке трассировки система.

События записываются с использованием System.Diagnostics.Trace.Write (строка, строка) метод. Имя регистратора событий передается в качестве значения для категории имя для метода Write.

Вот данные моего конфигурационного файла ...

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


    <!-- Setup the root category, add the appenders and set the default level -->
    <root>
        <level value="ALL" />
        <appender-ref ref="TraceAppender" />
    </root>
</log4net>
0 голосов
/ 07 августа 2010

Я добавил следующую строку файла Global.asax, и она работает .. !! log4net.Config.XmlConfigurator.Configure ();

0 голосов
/ 10 августа 2009

Есть как минимум 2 возможных проблемы:

  • Способ указания адреса файла, попробуйте вместо этого использовать абсолютный путь.
  • Для процесса, выполняющего вызов, необходимы права на изменение файла. Убедитесь, что учетная запись пользователя, выполняющая запись в файл журнала, имеет на это права.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...