windows - Skridt til at konfigurere log4net i en C # service applikation

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg er meget forvirret om, hvordan man konfigurerer log4net i et Windows Service-projekt. Tilføj til det, at jeg er nybegynder med Visual Studio konfigurationer. Så jeg har oprettet dette Windows Service-program, og jeg vil gerne tilføje log4net til det. Alle instruktioner er forskellige, og et svar siges at inkludere følgende linje til forsamlingsoplysningerne. Et andet svar sagde at tilføje det til AssemblyInfo.cs (i din App\_Code-mappe). Det betyder også, at jeg skal tilføje en klasse, der hedder AssemblyInfo.cs i min kildermappe, og tilføj så blot denne linje i konstruktøren? Jeg ved ikke, hvad det betyder!


[assembly:log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]


Jeg har tilføjet appSettings til min app.config-fil:


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
    <appSettings>
        <add key="log4net.Internal.Debug" value="true"/>
    </appSettings> 
</configuration>


Skal jeg også oprette en log4net.config-fil?


Jeg forsøgte at følge instruktionerne fra disse spørgsmål, men der er bare ikke nok information til at give mening for mig. Jeg har brugt timer på udkig efter instruktioner, der giver mening. Kan nogen fortælle mig ( på højt niveau ), hvordan du konfigurerer log4net til et Windows Service-program? Hvilke filer skal jeg oprette hvilke konfigurationer skal jeg tilføje Jeg ved, at jeg bliver nødt til at oprette en logger klasse, men konfigurationen har mig fuldstændig forvirret.


--------------------------------- EDIT ------------- ---------------------


Trin 1) Min app.config ser sådan ud:


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>

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

    <log4net>
      <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="log.log" />
        <appendToFile value="true" />
        <rollingStyle value="Size" />
        <maxSizeRollBackups value="5" />
        <maximumFileSize value="100KB" />
        <staticLogFileName value="true" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="\%date \%level \%logger - \%message \%exception\%newline" />
        </layout>
      </appender>
      <root>
        <level value="ALL" />
        <appender-ref ref="LogFileAppender" />
      </root>
    </log4net>

</configuration>


Trin 2) Jeg har tilføjet dette hovedprogrammet Program.cs:


using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;

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

namespace MyAppService
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        static void Main()
        {
            log4net.Config.XmlConfigurator.Configure();


Trin 3) Jeg har tilføjet referencen til log4net


Trin 4) I mine klasser, hvor jeg logger, har jeg tilføjet dette:


private static ILog logger = LogManager.GetLogger(typeof(Reader));


Trin 4) Jeg har tilføjet logging erklæringer som denne:


logger.Info("Data Read Completed Successfully.");

Bedste reference


Du kan bruge app.config til din konfiguration: for en Windows-tjeneste med en separat fil er en præference snarere end en nødvendighed, da tjenesten kan se konfigurationsfilen for ændringer.


Hvad angår monteringsdirektivet hvor som helst, kan du tilføje det til en fil, så længe det er i opstartsprojektet - din tjeneste - selvom det er almindeligt at tilføje dem til den eksisterende AssemblyInfo.cs-fil.


Du skal også ringe til Log4net i din opstartsrutine, som dokumentationen siger med fed skrift: [10]



  Brug af attributter kan være en klarere metode til at definere, hvor applikationens konfiguration vil blive indlæst fra. Det er dog værd at bemærke, at attributter er rent passive.De er kun informationer. Derfor skal du, hvis du bruger konfigurationsattributter, påberåbe log4net for at tillade det læse attributterne. Et simpelt opkald til LogManager.GetLogger vil medføre, at attributterne på den opkaldende enhed læses og behandles. Derfor er det vigtigt at foretage et logoprop så tidligt som muligt under opstart af programmet og helt sikkert før nogen eksterne samlinger er blevet indlæst og påberåbt.



For at gøre dette skal din idriftsætningskode indeholde en linje som:


LogManager.GetLogger("initialise logging system");


Alternativt kan du droppe attributterne og bare ringe XmlConfigurator.ConfigureAndWatch() i opstartsprogrammet i stedet, hvilket som standard vil indlæse og se app.config-filen. Igen, et spørgsmål om præference om at bruge det eller forsamlingen tillader at indlæse konfigurationen.