不带xml文件初始化log4net

Jep*_*sen 5 c# log4net .net-core

我需要为 log4net 包创建一个小包装。

我还需要在不使用 xml 配置文件的情况下初始化记录器(这是一个要求,这个项目中已经有很多配置文件)。

我已经编写了MyLogger该类,但是当我运行该程序时,我在控制台中看不到任何内容。

我试图缩小代码以获得最小的例子(我已经删除了我的配置文件加载和其他一些东西)。

首先我创建记录器实例,将级别设置为 Trace,然后添加一个AnsiColorTerminalAppender. 显然有什么问题或遗漏了,但我不明白是什么。

如何修复我的课程以打印日志消息?

using log4net;

namespace MyProgram
{
  static class MyLogger
  {
    static ILog logger = null;

    public static void SetConfiguration()
    {
      logger = LogManager.GetLogger(typeof(MyLogger));
      var l = (log4net.Repository.Hierarchy.Logger)logger.Logger;
      l.Level = log4net.Core.Level.Trace;
      AddConsoleAppender();
    }

    public static void Debug(string message)
    {
      logger.Debug(message);
    }

    public static void Info(string message)
    {
      logger.Info(message);
    }

    // Others here

    static private void AddConsoleAppender()
    {
      var appender = new log4net.Appender.AnsiColorTerminalAppender
      {
        Threshold = log4net.Core.Level.Info
      };
      var l = (log4net.Repository.Hierarchy.Logger)logger.Logger;
      log4net.Layout.PatternLayout layout = new log4net.Layout.PatternLayout
      {
        ConversionPattern = "%d [%t] %-5p %c [%x] - %m%n"
      };
      layout.ActivateOptions();
      appender.Name = "Console";
      appender.Layout = layout;
      appender.ActivateOptions();
      l.AddAppender(appender);
    }
  }

  class Program
  {
    static void Main(string[] args)
    {
      MyLogger.SetConfiguration();
      MyLogger.Info("Logger configuration loaded");
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

Cod*_*ler 4

如果您在不使用 of 的情况下添加附加程序BasicConfigurator,则应手动将ConfiguredLogger 存储库的属性设置为 true。只需将以下行添加到方法的底部AddConsoleAppender()

static private void AddConsoleAppender()
{
    // ...
    var l = (log4net.Repository.Hierarchy.Logger)logger.Logger;
    // ...
    l.Repository.Configured = true;
}
Run Code Online (Sandbox Code Playgroud)