设置Log4Net以记录类库的输出

JMK*_*JMK 6 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>
Run Code Online (Sandbox Code Playgroud)

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

[assembly: log4net.Config.XmlConfigurator(Watch=true)]
Run Code Online (Sandbox Code Playgroud)

我使用NuGet添加了Log4Net程序集,我记录如下:

private log4net.ILog _Log;
_Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
_Log.Debug("FooBar");
Run Code Online (Sandbox Code Playgroud)

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

我错过了什么?

Pen*_*hev 6

有一点是错误的,就是将log4net配置部分添加到nuget配置文件(packages.config)中.

您可以在app/web配置中或在appSettings指向的单独文件中进行配置,例如配置在一个名为config.log4net(文件的copy to output directory属性设置为copy always)的文件中,并在app /中添加以下条目web.config中:

<add key="log4net.config" value="config.log4net"/>
Run Code Online (Sandbox Code Playgroud)

如果你不希望依赖于网络/应用程序的配置,可以设置ConfigFileExtension的财产XmlConfiguratorAttribute的属性AssemblyInfo.cs:

[assembly: log4net.Config.XmlConfigurator(ConfigFileExtension = "log4net", Watch = true)]
Run Code Online (Sandbox Code Playgroud)

然后将log4net配置文件命名为exe/assembly以及配置的扩展名,例如MyApplication.exe.log4netMyLibrary.dll.log4net

另一个错误的是你的appender过滤器.您设置的范围不包括您希望记录的DEBUG级别.以下是所有日志记录级别:

ALL
DEBUG
INFO
WARN
ERROR
FATAL
OFF
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,DEBUG不是INFO和之间FATAL.