首页 > 解决方案 > ASP 中的 Log4Net:记录消息时不创建文件

问题描述

我正在使用Microsoft.Extensions.Logging.Log4Net.AspNetCore。它应该是直截了当的,但没有创建日志文件,我没有想法。

最小示例(Startup.cs):

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    loggerFactory.AddLog4Net();
    var logger = loggerFactory.CreateLogger("Global exception logger");
    logger.LogError("test");
    // Result: no file seems to be created under \bin\Debug\netcoreapp2.0
}

.csproj 文件中的相关信息:

<TargetFramework>netcoreapp2.0</TargetFramework>

...

<PackageReference Include="Microsoft.Extensions.Logging.Log4Net.AspNetCore" Version="2.1.0" />

...

<Content Update="log4net.config">
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>

log4net.config:

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <appender name="DebugAppender" type="log4net.Appender.DebugAppender" >
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
  </appender>
  <root>
    <level value="ALL"/>
    <appender-ref ref="DebugAppender" />
  </root>
</log4net>

在 log4net.config 文件中,也尝试<file value="logfile.log" />appender.

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

解决方案


@pfx 在评论中给出的解决方案:

假设配置已连接;使用 log4net.Appender.FileAppender 而不是 log4net.Appender.DebugAppender;不DebugAppender写入文件。

这意味着log4net.config需要像这样改变:

  <?xml version="1.0" encoding="utf-8" ?>
  <log4net>
    <appender name="FileAppender" type="log4net.Appender.FileAppender" >
      <file value="C:\path\to\your\logfile.log" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      </layout>
    </appender>
    <root>
      <level value="ALL"/>
      <appender-ref ref="FileAppender" />
    </root>
  </log4net>

而且,loggerFactory.AddLog4Net();似乎不会自动查找log4net.config(从项目文档中可以理解)。相反,您必须指定loggerFactory.AddLog4Net("log4net.config");.


推荐阅读