Pertanyaan Log4Net: Menentukan secara terprogram beberapa penebang (dengan beberapa file appender)


Bagaimana caranya (secara programatis, tanpa konfigurasi xml) mengkonfigurasi beberapa penebang dengan Log4Net? Saya membutuhkan mereka untuk menulis ke file yang berbeda.


32
2017-11-21 11:06


asal


Jawaban:


Benang ini di Dasbor log4net menjelaskan suatu pendekatan.

Untuk meringkas sedikit, mudah-mudahan tanpa merobek terlalu banyak kode:

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

// Set the level for a named logger
public static void SetLevel(string loggerName, string levelName)
{
    ILog log = LogManager.GetLogger(loggerName);
    Logger l = (Logger)log.Logger;

    l.Level = l.Hierarchy.LevelMap[levelName];
    }

// Add an appender to a logger
public static void AddAppender(string loggerName, IAppender appender)
{
    ILog log = LogManager.GetLogger(loggerName);
    Logger l = (Logger)log.Logger;

    l.AddAppender(appender);
}

// Create a new file appender
public static IAppender CreateFileAppender(string name, string fileName)
{
    FileAppender appender = new
        FileAppender();
    appender.Name = name;
    appender.File = fileName;
    appender.AppendToFile = true;

    PatternLayout layout = new PatternLayout();
    layout.ConversionPattern = "%d [%t] %-5p %c [%x] - %m%n";
    layout.ActivateOptions();

    appender.Layout = layout;
    appender.ActivateOptions();

    return appender;
}

// In order to set the level for a logger and add an appender reference you
// can then use the following calls:
SetLevel("Log4net.MainForm", "ALL");
AddAppender("Log4net.MainForm", CreateFileAppender("appenderName", "fileName.log"));

// repeat as desired

41
2017-11-21 11:51



using System;
using Com.Foo;
using System.Collections.Generic;
using System.Text;
using log4net.Config;
using log4net;
using log4net.Appender;
using log4net.Layout;
using log4net.Repository.Hierarchy;


public class MyApp
{


    public static void SetLevel(string loggerName, string levelName)
    {
        ILog log = LogManager.GetLogger(loggerName);
        Logger l = (Logger)log.Logger;

        l.Level = l.Hierarchy.LevelMap[levelName];
    }

    // Add an appender to a logger
    public static void AddAppender(string loggerName, IAppender appender)
    {
        ILog log = LogManager.GetLogger(loggerName);
        Logger l = (Logger)log.Logger;

        l.AddAppender(appender);
    }
    // Add an appender to a logger
    public static void AddAppender2(ILog log, IAppender appender)
    {
       // ILog log = LogManager.GetLogger(loggerName);
        Logger l = (Logger)log.Logger;

        l.AddAppender(appender);
    }

    // Create a new file appender
    public static IAppender CreateFileAppender(string name, string fileName)
    {
        FileAppender appender = new
            FileAppender();
        appender.Name = name;
        appender.File = fileName;
        appender.AppendToFile = true;

        PatternLayout layout = new PatternLayout();
        layout.ConversionPattern = "%d [%t] %-5p %c [%logger] - %m%n";
        layout.ActivateOptions();

        appender.Layout = layout;
        appender.ActivateOptions();

        return appender;
    }

    private static readonly ILog log = LogManager.GetLogger(typeof(MyApp));
    static void Main(string[] args)
    {
        BasicConfigurator.Configure();
        SetLevel("Log4net.MainForm", "ALL");
        AddAppender2(log, CreateFileAppender("appenderName", "fileName.log"));
        log.Info("Entering application.");
        Console.WriteLine("starting.........");
        log.Info("Entering application.");
        Bar bar = new Bar();
        bar.DoIt();
        Console.WriteLine("starting.........");
        log.Error("Exiting application.");
        Console.WriteLine("starting.........");
    }
}


namespace Com.Foo
{
    public class Bar
    {
        private static readonly ILog log = LogManager.GetLogger(typeof(Bar));

        public void DoIt()
        {
            log.Debug("Did it again!");
        }
    }
}

3
2018-06-18 09:54



Saya harap ini membantu, itu mengkonfigurasi logger konsol sederhana.

static void Main(string[] args)
{
    const string logLayoutPattern =
        "[%date %timestamp][%level] %message %newline" +
        "Domain: %appdomain, User: %username %identity %newline" +
        "%stacktracedetail{10} %newline" +
        "%exception %newline";

    var wrapperLogger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
    var logger = (Logger) wrapperLogger.Logger;
    logger.Hierarchy.Root.Level = Level.All;

    var consoleAppender = new ConsoleAppender
    {
        Name = "ConsoleAppender",
        Layout = new PatternLayout(logLayoutPattern)
    };

    logger.Hierarchy.Root.AddAppender(consoleAppender);
    logger.Hierarchy.Configured = true;

    wrapperLogger.Debug("Hello");
    Console.ReadKey();
}

1
2017-08-07 14:23