sobota, 6 lipca 2013

Log4net, czyli logowanie błędów w .NET

W pracy programisty bardzo ważne jest logowanie błędów. Gorsze od nie logowania błędów jest tylko błędne logowanie błędów (np. poprzez napisanie własnego logera, co niestety miałem już okazję widzieć w praktyce). Aby poprawnie logować błędy, najlepiej użyć jakiegoś gotowego rozwiązania.

Dla aplikacji typu '.net' np. asp.net (ale z wyłączeniem aplikacji typu sharepoint) jednym z gotowych, darmowych rozwiązań jest biblioteka log4net. Biblioteka dostępna jest pod licencją apache 2.0 (link do wikipedii).

Początkowo myślałem, aby się rozpisywać, jak skonfigurować oraz obsługiwać tą bibliotekę, ale myślę, że inni zrobili to znacznie lepiej, więc odsyłam do linków:
Łukasz Gąsior - > log4net-logujemy-zdarzenia-w-aplikacji/
Codeproject.com - log4net-Tutorial
Log4net - manual introduction

Przykładowa konfiguracja:
- web.config
    <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.
ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="test.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
      <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
    </configSections>
  <log4net>
    <root>
      <level value="DEBUG"/>
      <appender-ref ref="LogFileAppender"/>
    </root>
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
        <param name="File" value="C:\dev\test\test\Logs\test_log.log"/>
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
        <datePattern value="dd.MM.yyyy" />
        <staticLogFileName value="true" />
        <appendToFile value="true" />
        <rollingStyle value="Date" />
        <maxSizeRollBackups value="10" />
        <maximumFileSize value="5MB" />
        <layout type="log4net.Layout.PatternLayout">
          <param name="ConversionPattern" value="%date [%thread] %-5level %type.%method - %message%newline"/>
        </layout>
    </appender>
  </log4net>

-global.asax:
        protected void Application_Start(object sender, EventArgs e)
        {
            log4net.Config.
XmlConfigurator.Configure();
        }

In application:
protected static readonly ILog log = LogManager.GetLogger(System.
Reflection.MethodBase.GetCurrentMethod().DeclaringType);

use:
log.Info("foo bar");

1 komentarz: