log4netAan de slag met log4net


Opmerkingen

Deze sectie geeft een overzicht van wat log4net is en waarom een ontwikkelaar het misschien wil gebruiken.

Het moet ook alle grote onderwerpen binnen log4net vermelden en een link naar de gerelateerde onderwerpen bevatten. Aangezien de documentatie voor log4net nieuw is, moet u mogelijk eerste versies van die gerelateerde onderwerpen maken.

Log4net instellen

Laten we een eenvoudige Hello World- consoletoepassing maken en iets loggen op de console met log4net. Zodra we dit hebben uitgevoerd, kunnen we het opschalen om het in echte ontwikkelingsscenario's in de volgende voorbeelden te gebruiken. Laten we klein beginnen en het vanaf daar opbouwen.

Eerst moeten we een eenvoudig WriteLine("Hello World") in Visual Studio en WriteLine("Hello World") zoals hieronder wordt weergegeven

voer hier de afbeeldingsbeschrijving in

Vervolgens moeten we de log4net-bibliotheek aan ons project toevoegen. We moeten dus met de rechtermuisknop op Referenties klikken en NuGet-pakketten beheren selecteren

voer hier de afbeeldingsbeschrijving in

Zoek vervolgens naar log4net en installeer

voer hier de afbeeldingsbeschrijving in

We hebben nu met succes log4net.dll aan ons project toegevoegd.

Nu moeten we onze app.config (of web.config als het een webapplicatie is) configureren. Dit deel is een beetje lastig, maar raak niet in paniek. We zullen het stap voor stap doorlopen en inloggen en draaien.

Onder app.config moeten we eerst een configuratiegedeelte maken onder configuratie. We moeten een naam en een type opgeven, zoals hieronder wordt weergegeven:

<configSections>
  <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
</configSections>
 

Wat we hier hebben gedaan, is dat we een gedeelte in ons configuratiebestand met de naam log4net waarnaar moet worden gezocht. Alles wat met loggen te maken heeft, vindt u hier. Van het maken van ons logbestand, hoe lang en welke informatie moet worden vastgelegd. Laten we nu dus doorgaan en de log4net sectie maken.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
  </configSections>
  <log4net>
    
  </log4net>
  <startup> 
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration>
 

Het eerste dat we onder onze log4net-sectie gaan toevoegen, is een appender. Een appender is eigenlijk een logging-tool. Daar willen we onze logboeken naartoe loggen. Er zijn veel appenders beschikbaar om in te loggen bij bestanden, database enz. In dit voorbeeld loggen we in ons consolevenster in, dus laten we een console-appender maken:

<log4net>
  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
  
  </appender>
</log4net>
 

Vervolgens moeten we een lay-out definiëren:

<log4net>
  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
    
    </layout>
  </appender>
</log4net>
 

Onder layout bepalen we wat we op de console willen weergeven en hoe we het willen weergeven. Hiervoor hebben we een conversiepatroon nodig. Er zijn veel verschillende soorten patronen die we kunnen gebruiken, voor dit voorbeeld houden we ons aan een vrij eenvoudig patroon.

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

Wat we hierboven doen, is dat we de volgende informatie nodig hebben: de absolute tijdstempel, de lopende thread die de uitzondering veroorzaakt en het logboekniveau. Er zijn 7 logboekniveaus die worden aangeboden door log4net.

  • UIT - er wordt niets vastgelegd (kan niet worden genoemd)
  • FATAL
  • FOUT
  • WAARSCHUWEN
  • INFO
  • DEBUG
  • ALL - alles wordt gelogd (kan niet worden genoemd)

Van de 7 kunnen we echter slechts 5 gebruiken (DEBUG, INFO, WARN, ERROR en FATAL). Het logboekniveau declareren bij DEBUG betekent dat het alles logt, dwz DEBUG, INFO, WARN, ERROR en FATAL. Als u het logniveau bij WARN aangeeft, worden alleen WARN, ERROR en FATAL vastgelegd. Ik hoop dat je de hiërarchie begrijpt.

Het laatste wat we nodig hebben onder de app.config is een root-sectie. Het hoofdgedeelte bevat onze loggers van het hoogste niveau en het niveau waarop moet worden ingelogd. Het is belangrijk om te begrijpen dat alles van de root wordt geërfd, dus geen appender zal loggen tenzij er naar wordt verwezen onder de root. Met dat toegevoegd, is dit hoe je app.config eruit zou moeten zien:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
  </configSections>
  <log4net>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date{ABSOLUTE} [%thread] %level %logger - %message%newline"/>
      </layout>
    </appender>
    <root>
      <level value="DEBUG"/>
      <appender-ref ref="ConsoleAppender" />
    </root>
  </log4net>
  <startup> 
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration> 
 

Het is geen slecht idee om secties van het configuratiebestand te kopiëren en plakken, maar het is belangrijk om te weten waarvoor ze verantwoordelijk zijn. Nu we klaar zijn met het configureren van onze app.config , moeten we een beetje code toevoegen aan ons console-project. Eerst moeten we een eenmalige invoer definiëren die buiten uw klas moet worden geplaatst.

[assembly: log4net.Config.XmlConfigurator(Watch = true)]
 

Zet het recht onder mijn gebruik verklaringen in het Program.cs bestand. Vervolgens moeten we een exemplaar van de logger maken om het voor logboekregistratie te gebruiken. Dit wordt eenmaal per klas gedaan.

private static readonly log4net.ILog log = log4net.LogManager.GetLogger
(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
 

En tot slot moeten we iets loggen

log.Error("This is my error");
 

Uw Program.cs-bestand zou er ongeveer zo uit moeten zien:

using System;

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

namespace Log4netTutorial
{
    class Program
    {
        private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

        static void Main(string[] args)
        {
            Console.WriteLine("Hello World");
            log.Error("This is my error");

            Console.ReadLine();
        }
    }
}
 

Ga je gang en voer het programma uit, je moet je fout hebben vastgelegd in de console:

voer hier de afbeeldingsbeschrijving in