简体   繁体   中英

Log4Net in asp: no file is created when logging a message

I am using Microsoft.Extensions.Logging.Log4Net.AspNetCore . It should be straight-forward, but no log file is created and I ran out of ideas.

Minimal example (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
}

Relevant infos from the .csproj file:

<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>

In the log4net.config file, also tried adding <file value="logfile.log" /> under appender .

Solution given by @pfx in the comments:

Assuming the configuration gets hooked up; use the log4net.Appender.FileAppender instead of the log4net.Appender.DebugAppender; the DebugAppender doesn't write to file.

This means that the log4net.config needs to change like so:

  <?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>

And also, loggerFactory.AddLog4Net(); doesn't seem to automatically go find log4net.config (as it might be understood from the project's documentation). Instead, you must specify loggerFactory.AddLog4Net("log4net.config"); .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM