使用最新版本的slf4net1.0.0在代码中进行的配置不会记录日志

问题描述

我正在使用slf4net.log4net nuget包来处理项目中的日志记录。因为必须在运行时更改日志级别,所以我在代码中进行了配置。问题是该代码在slf4net.log4net 0.1.32.1版中可以正常工作,但是当我将其升级到1.0.0版时,会创建日志文件,但是日志文件中不存在日志。我创建了一个虚拟项目来显示此问题。我看不到如何在此处添加zip文件,因此我将在此处发布代码。它是Net Framework 4.7.2中的控制台应用程序;

class Program
{
    private static string GetLoggingPath()
    {
        var path = Path.Combine(
            Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData,Environment.SpecialFolderOption.DoNotVerify),"LoggingTesting");
        Directory.CreateDirectory(path);
        return path;
    }
    static void Main(string[] args)
    {
        var layout = new PatternLayout
        {
            ConversionPattern = "%d{ABSOLUTE}: %message %newline"
        };
        layout.ActivateOptions();

        var fileAppender = new RollingFileAppender();
        fileAppender.RollingStyle = log4net.Appender.RollingFileAppender.RollingMode.Date;
        fileAppender.Layout = layout;
        var path = GetLoggingPath();
        fileAppender.File = path + System.IO.Path.DirectorySeparatorChar + "LISlogging_.txt";
        fileAppender.AppendToFile = true;
        fileAppender.PreserveLogFileNameExtension = true;
        fileAppender.StaticLogFileName = false;
        fileAppender.DatePattern = "yyyy-MM-dd";
        fileAppender.MaxSizeRollBackups = 10;
        fileAppender.ActivateOptions();
        ILoggerRepository repository = log4net.LogManager.GetRepository(Assembly.GetCallingAssembly());
        BasicConfigurator.Configure(repository,fileAppender);
        var root = (repository as Hierarchy)?.Root;
        if (root == null) return;
        root.Level = log4net.Core.Level.All;
        //  Create log4net ILoggerFactory and set the resolver
        var factory = new slf4net.log4net.Log4netLoggerFactory();
        var resolver = new SimpleFactoryResolver(factory);
        slf4net.LoggerFactory.SetFactoryResolver(resolver);
        // trigger logging
        var log = slf4net.LoggerFactory.GetLogger(typeof(Program));
        log.Info("log this line");
    }
}

public class SimpleFactoryResolver : IFactoryResolver
{
    private readonly slf4net.ILoggerFactory _factory;

    public SimpleFactoryResolver(slf4net.ILoggerFactory factory)
    {
        _factory = factory;
    }
    public slf4net.ILoggerFactory GetFactory()
    {
        return _factory;
    }
}

此虚拟项目是在.net框架中创建的,但我在.net核心项目中需要此项目。这就是为什么我需要版本1.0.0的原因。 我还将这个问题发布在slf4net的github页面上(因为它看起来像个bug):https://github.com/ef-labs/slf4net/issues/6

我在堆栈溢出时遇到的主要问题是是否有解决方法,以便可以与slf4net.log4net 1.0.0版一起使用

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)