Frage

Ich habe einen .NET-DLL geschrieben, die aus einer anderen Anwendung mit COM-Interop aufgerufen wird. Ich mag log4net verwenden, aber ich brauche die Position der Protokolldatei zur Laufzeit aus der anderen Anwendung zu spezifizieren.

Ich habe immer log4net auf möglichst einfache Art und Weise für WinForms-Projekt verwendet, aber da ein DLL-Projekt keine app.config hat, und meine Berufung Anwendung hat auch nicht ein (es ist nicht einmal .NET), ich habe versucht, ein wenig darüber, wie log4net Werke zu lesen, und versuchte, es zu setzen, ohne eine CONFIG-Datei überhaupt verwendet wird.

Ich habe es auf die Bühne kam, wo es kompiliert und Art entspricht der zu meinem kleinen Verständnis von log4net, aber es schreibt nicht in die Protokolldatei.

Hier ist, was ich bisher, kann meine eklatante Fehler / Missverständnisse oder aber sagen Sie mir einen besseren Weg der Protokollierung von meiner dll jemand darauf hinweisen?

    private log4net.Core.ILogger _ilogger;
    private ILog _logger;

    public void Initialize(String LogFileName)
    {
        log4net.Repository.ILoggerRepository Repo = null;
        try {
            Repo = log4net.LogManager.GetRepository(Assembly.GetExecutingAssembly().FullName);

        } catch (log4net.Core.LogException) {
            //ignore, domain not yet created
        }

        if (Repo == null) {
            Repo = log4net.LogManager.CreateRepository(Assembly.GetExecutingAssembly().FullName);

            log4net.Appender.RollingFileAppender appender = new log4net.Appender.RollingFileAppender();
            appender.Layout = new log4net.Layout.PatternLayout("%d - %m%n");
            appender.File = LogFileName;
            appender.MaxSizeRollBackups = 10;
            appender.MaximumFileSize = "100MB";
            appender.AppendToFile = true;
            appender.Threshold = log4net.Core.Level.Debug; //NEW: set level to Debug
            appender.ActivateOptions();

            Repo.Threshold = log4net.Core.Level.Debug; //NEW: set level to Debug

            log4net.Config.BasicConfigurator.Configure(Repo, appender);
        }

       // This doesn't seem to create the interface I need for logging
        _ilogger = Repo.GetLogger(MethodBase.GetCurrentMethod().DeclaringType.FullName);

       // This doesn't seem to write to the log file for some reason.
        _logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType.FullName);
        _logger.Debug("Application started");
    }

Danke!

War es hilfreich?

Lösung

Bearbeiten- aktualisieren. Lesen Sie noch einmal die Frage. Es sieht aus wie Sie gerade href="http://logging.apache.org/log4net/release/sdk/log4net.Config.XmlConfigurator.Configure_overload_5.html" rel="nofollow zum die überladene Version von Call diese (in Einzelheiten einer Konfigurationsdatei vorbei?) - Sie im Grunde wollen nur die Protokollierung von innerhalb des COM-DLL konfigurieren

Im Scherz google'd I log4com und dieses . Ich habe es nicht, aber es könnte sich lohnen sein, aussehen!

Andere Tipps

Ich denke, die Antwort war ich habe das neue Repository überhaupt nicht brauchen. Ich wollte nur Dinge zu kompliziert. Diese dezimierte Version scheint gut zu funktionieren:

public void Initialize(String LogFileName)
    {
        log4net.Appender.RollingFileAppender appender = new log4net.Appender.RollingFileAppender();
        appender.Layout = new log4net.Layout.PatternLayout("%d - %m%n");
        appender.File = LogFileName;
        appender.MaxSizeRollBackups = 10;
        appender.MaximumFileSize = "100MB";
        appender.AppendToFile = true;
        appender.Threshold = log4net.Core.Level.Debug;
        appender.ActivateOptions();
        log4net.Config.BasicConfigurator.Configure(appender);

        _logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType.FullName);
        _logger.Debug("Application started");
    }

Versuchen Sie explizit die Pegeleinstellung sowohl auf dem Logger und Appender zu debuggen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top