在 Rider 中为 dotnet 2.1 项目配置无代码的 log4net

Configuring log4net without code in Rider for dotnet 2.1 project

我正在使用 Rider IDE 开发宠物 .netcore2.1 项目。我目前正在尝试为该项目添加 log4net 支持,并尝试使用 "proper way"(单独的配置文件,自动配置 log4net,而无需编写初始化代码等)。到目前为止,我发现所有教程 (ex1, ex2) 建议通过添加程序集 属性

来配置它
[assembly: log4net.Config.XmlConfigurator(Watch=true)] 

到 AssemblyInfo.cs 文件。但是我似乎找不到该文件,并且从其他问题(例如 )看来它可能根本不与 .netcore 一起使用,有利于通过其他方式进行配置(例如 .csproj 文件) .

到目前为止,我已经找到了一种解决方法 here,它可以工作,但它使用通过代码的显式配置,与程序集级配置相比,这看起来像是倒退了一步。

有没有办法以更静态的方式执行此操作(例如,在 .csproj 中使用一些 ItemGroup)?

更新:供将来参考 - 这只是 https://docs.microsoft.com/en-us/dotnet/standard/assembly/set-attributes 的自定义案例,因此它直接转到 .cs 文件。

在控制台中将 log4net 用于 .net 核心的简单示例:

[assembly: XmlConfigurator(Watch = true)]
namespace ConsoleApp
{
    class Program
    {
        private static readonly ILog log = LogManager.GetLogger(typeof(Program));

        static void Main(string[] args)
        {
            var logRepository = LogManager.GetRepository(Assembly.GetEntryAssembly());
            XmlConfigurator.Configure(logRepository, new FileInfo("log4net.config"));
            log.Info("Entering application.");
            log.Error("Error application.");
        }
    }
}

您需要将带有设置 log4net 的文件添加到您的项目:log4net.config,并且不要忘记将其选项 "Copy to output directory" 更改为 "Copy if newer" 或 "Copy always"

log4net.config 示例:

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
    </layout>
  </appender>
  <appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <file value="logs/" />
    <datePattern value="yyyy-MM-dd'.log'" />
    <staticLogFileName value="false" />
    <appendToFile value="true" />
    <rollingStyle value="Composite" />
    <layout type="log4net.Layout.PatternLayout">
      <IgnoresException value="False" />
      <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
    </layout>
    <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="INFO"/>
    </filter>
  </appender>
  <root>
    <level value="ALL" />
    <appender-ref ref="FileAppender" />
    <appender-ref ref="ConsoleAppender" />
  </root>
</log4net>

顺便说一句:log4net 不支持 2020 年 4 月 1 日:http://logging.apache.org/log4net/