c# - 设置 Log4Net 以记录类库的输出

标签 c# log4net .net-assembly

我正在尝试设置 Log4Net(这是我第一次使用 Log4Net)以记录到程序集中的文本文件。我没有收到任何错误,但它也不起作用。我可以在记录输出的行断点并查看它们是否已到达,但就像我说什么都没有发生一样。

我哪里错了?

我已将以下内容添加到我的 packages.config文件,在 <packages> 内属性:

  <log4net>
    <appender name="FileAppender" type="log4net.Appender.FileAppender,log4net">
      <file value="c:\CTI\log.txt" />
      <appendToFile value="true" />
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="INFO" />
        <levelMax value="FATAL" />
      </filter>
    </appender>

    <root>
      <level value="DEBUG"/>
      <appender-ref ref="FileAppender"/>
    </root>
  </log4net>
</configuration>

我已将以下行添加到 AssemblyInfo.cs :

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

我使用 NuGet 添加了 Log4Net 程序集,并且我是这样记录的:

private log4net.ILog _Log;
_Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
_Log.Debug("FooBar");

就像我说的,没有错误,但也没有任何反应。

我错过了什么?

最佳答案

错误的一件事是您将 log4net 配置部分添加到 nuget 配置文件 (packages.config)。

您可以在应用程序/网络配置中或在您从 appSettings 指向的单独文件中进行配置,例如 配置位于名为 config.log4net 的文件中(该文件的 copy to output directory 属性设置为 copy always),您添加app/web.config 中的以下条目:

<add key="log4net.config" value="config.log4net"/>

如果您不想依赖网络/应用程序配置,您可以设置 ConfigFileExtension AssemblyInfo.cs 中的 XmlConfiguratorAttribute 特性:

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

然后将 log4net 配置文件命名为与您的 exe/程序集相同的名称加上配置的扩展名,例如MyApplication.exe.log4netMyLibrary.dll.log4net

另一件错误的事情是你的附加过滤器。您设置的范围不包括您希望记录的 DEBUG 级别。这里都是logging levels :

ALL
DEBUG
INFO
WARN
ERROR
FATAL
OFF

如您所见,DEBUG 不在 INFOFATAL 之间。

关于c# - 设置 Log4Net 以记录类库的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11561610/

相关文章:

C# 等同于 TypeScript 模板文字类型?

Log4net:记录器实例化

C# - log4Net 不写入控制台

c# - 如何将 Roslyn 脚本提交用作其他 Roslyn 编译中的程序集

plugins - .NET 反射器 + Reflexil 插件

c# - EF Core Linq 使用方法语法加入 OR 条件

c# - 为什么VS2017在watch View 中查看基类对象时显示的是派生类的成员值?

c# - 粒子引擎 - XNA/C#

c# - log4net 自定义附加程序不工作

asp.net-core - 如何更改asp.net核心中的程序集信息?