Puoi configurare log4net nel codice invece di usare un file di configurazione?

Puoi configurare log4net nel codice invece di usare un file di configurazione?

SOLUZIONE FINALE: 1

Per chiunque possa imbattersi in questo in futuro, ecco cosa ho fatto. Ho creato la classe statica di seguito:

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

E poi tutto quello che dovevo fare era sostituire il codice in cui avevo chiamato il file XML con la seguente chiamata:

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

1(questa risposta è stata modificata nella domanda dall'OP, mi sono preso la libertà di farne una risposta della community, vedi qui perché)


Puoi anche sfuggire completamente a XML, ho scritto un esempio con una configurazione programmatica minima qui.

In poche parole, ecco di cosa hai bisogno

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

Sì, puoi configurare log4net chiamando:

log4net.Config.XmlConfigurator.Configure(XmlElement element)

Vedi la documentazione di log4net.