无法为.NET Core 2.1框架配置log4net

时间:2018-11-21 12:44:11

标签: c# asp.net-core .net-core log4net asp.net-core-2.1

我想我尝试了所有可能的调用组合以使log4net在ASP.NET Core 2.1上都能正常工作,但到目前为止还算不上成功。我遵循How to use log4net in Asp.net core 2.0中描述的步骤。我还探索了ASP.NET Core 2.1 + Log4Net中描述的所有变体。

到目前为止没有运气。将log4net.config复制到二进制文件夹。它被使用(服务运行时我注意到它被锁定了)。我使用了绝对路径和相对路径。 已调用,未调用loggerFactory.AddLog4Net(“ log4net.config”); 我都打电话给了

${1//\//\\\/}
${            - bash expansion starts
  1           - first positional argument - the pattern
   //         - bash pattern substitution pattern separator "replace-all" variant
     \/       - literal slash
       /      - bash pattern substitution replacement separator
        \\    - literal backslash
          \/  - literal slash
            } - bash expansion ends

$ input="ka/pus/ta"
$ pattern="/pus/"
$ replacement="/re/"
$ safe_replace "$pattern" "$replacement" <<< "$input"
ka/re/ta

ILog是通过以下方式创建的:

var log4netConfig = new System.Xml.XmlDocument();
log4netConfig.Load(File.OpenRead(@"log4net.config"));
var repo = LogManager.CreateRepository(Assembly.GetEntryAssembly(), typeof(log4net.Repository.Hierarchy.Hierarchy));
XmlConfigurator.Configure(repo, log4netConfig["log4net"]);

但是我也使用了这种方法:

ILoggerRepository repository = LogManager.GetRepository(Assembly.GetEntryAssembly());
XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));

即使调用了Configure方法,每个时间日志也没有创建任何Appender(列表为空)。

当然不会创建任何文件。我注意到有人报告说它可以添加到您的Core 2.1项目中,但是我还没有发现正确的调用和操作排列方式。

有没有一种方法可以跟踪log4net实际能够解决的问题?到目前为止,以我的长期经验来看,log4net是最难使用的组件。 还是步骤的确切组合? 我正在使用log4net 2.0.8 nuget。

1 个答案:

答案 0 :(得分:0)

就像我上面所描述的,看起来好像有两个问题加起来就是问题。实际上,至少根据我提供的第一个链接的说明创建了日志WAS。但是,它是在错误的目录中创建的。 此处解释了该错误(.NET Core控制台应用程序的默认工作目录是源目录,而不是bin目录):https://github.com/dotnet/project-system/issues/589

第二个问题是由于Logger的Appender列表为空,即使加载和使用了Appender也是如此。这显然是令人误解的,但我没有对此行为做出任何解释。似乎是“设计使然”。

因此,默认情况下,.NET Core Console Appliaction工作目录是项目根目录(原文如此),而不是.NET Framework情况下的bin目录。

其次,记录器中没有Appenders,但这并不表示有任何问题。