142 votes

Pouvez-vous configurer log4net en code au lieu d'utiliser un fichier de configuration?

Je comprends pourquoi log4net utilise app.config fichiers pour la configuration de la journalisation de sorte que vous pouvez facilement changer la façon dont l'information est connecté sans avoir besoin de recompiler le code. Mais dans mon cas, je ne veux pas de pack un app.config le fichier avec mon exécutable. Et je n'ai pas envie de modifier mon journalisation de la configuration.

Est-il un moyen pour moi de configurer la journalisation dans le code plutôt que d'utiliser l' app.config?

Voici mon simple fichier de configuration:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="Logs\EventLog.txt" />
      <appendToFile value="false" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="5" />
      <maximumFileSize value="1GB" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      </layout>
    </appender>
    <appender name="MemoryAppender" type="log4net.Appender.MemoryAppender">
    </appender>
    <root>
      <level value="Info" />
      <appender-ref ref="RollingLogFileAppender" />
      <appender-ref ref="MemoryAppender" />
    </root>
  </log4net>
</configuration>

EDIT:

Pour être parfaitement clair: C'est mon objectif est de ne pas avoir de fichier XML. Même pas en tant que ressource incorporée que je me tourne vers un cours d'eau. Mon objectif a été de définir l'enregistreur complètement par programmation. Juste curieux de savoir si c'est possible et si oui où je pourrais trouver un exemple de la syntaxe.

234voto

Philipp M Points 1518

(Cette réponse a été intégrée à la question par le PO, j'ai pris la liberté d'en faire une réponse communautaire, voyez ici pourquoi )

SOLUTION FINALE:

Pour tous ceux qui pourraient tomber dans le futur, voici ce que j'ai fait. J'ai fait la classe statique ci-dessous:

 using log4net;
using log4net.Repository.Hierarchy;
using log4net.Core;
using log4net.Appender;
using log4net.Layout;

namespace Spectrum.Logging
{
    public class Logger
    {
        public static void Setup()
        {
            Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();

            PatternLayout patternLayout = new PatternLayout();
            patternLayout.ConversionPattern = "%date [%thread] %-5level %logger - %message%newline";
            patternLayout.ActivateOptions();

            RollingFileAppender roller = new RollingFileAppender();
            roller.AppendToFile = false;
            roller.File = @"Logs\EventLog.txt";
            roller.Layout = patternLayout;
            roller.MaxSizeRollBackups = 5;
            roller.MaximumFileSize = "1GB";
            roller.RollingStyle = RollingFileAppender.RollingMode.Size;
            roller.StaticLogFileName = true;            
            roller.ActivateOptions();
            hierarchy.Root.AddAppender(roller);

            MemoryAppender memory = new MemoryAppender();
            memory.ActivateOptions();
            hierarchy.Root.AddAppender(memory);

            hierarchy.Root.Level = Level.Info;
            hierarchy.Configured = true;
        }
    }
}
 

Et tout ce que je devais faire était de remplacer le code dans lequel j'ai appelé le fichier XML avec l'appel suivant:

 //XmlConfigurator.Configure(new FileInfo("app.config")); // Not needed anymore
Logger.Setup();
 

12voto

oleksii Points 17099

Vous pouvez également échapper complètement XML, je l' ai écrit un échantillon avec une configuration minimale de programmation ici .

En bref, voici ce dont vous avez besoin

 var tracer = new TraceAppender();
var hierarchy = (Hierarchy)LogManager.GetRepository();
hierarchy.Root.AddAppender(tracer);
var patternLayout = new PatternLayout {ConversionPattern = "%m%n"};
tracer.Layout = patternLayout;
hierarchy.Configured = true;
 

11voto

Joe Points 60749

Oui, vous pouvez configurer log4net en appelant:

 log4net.Config.XmlConfigurator.Configure(XmlElement element)
 

Voir la documentation de log4net .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X