【问题标题】:Configuring log4net without code in Rider for dotnet 2.1 project在 Rider 中为 dotnet 2.1 项目配置不带代码的 log4net
【发布时间】:2020-09-03 21:06:42
【问题描述】:

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

[assembly: log4net.Config.XmlConfigurator(Watch=true)] 

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

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

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

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

【问题讨论】:

    标签: c# .net-core log4net rider assemblyinfo


    【解决方案1】:

    在控制台中将 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,并且不要忘记将其选项“复制到输出目录”更改为“如果较新则复制”或“始终复制”

    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/

    【讨论】:

    • 感谢您指出它处于休眠状态;我正在寻找替代方案(如 NLog)。另外,感谢您指出 [assembly: ...] 是一个注释并直接转到 .cs 文件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-19
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    相关资源
    最近更新 更多