Log4Net 未在 Asp.Net Core 3.1 API 的 bin 文件夹中创建日志

Log4Net is not creating logs in bin folder in Asp.Net Core 3.1 API

我正在尝试在 Asp.NEt Core 3.1 API 中写入日志。但它没有写入 bin 文件夹。相反,它在项目目录的 Temp 文件夹中创建了日志文件。

Microsoft.Extensions.Logging.Log4Net.AspNetCore 版本 3.1.0

log4net.config

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
    <file value="Temp\" />
    <datePattern value="yyyy-MM-dd.'txt'"/>
    <staticLogFileName value="false"/>
    <appendToFile value="true"/>
    <rollingStyle value="Date"/>
    <maxSizeRollBackups value="100"/>
    <maximumFileSize value="15MB"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level App  %newline %message %newline %newline"/>
    </layout>
  </appender>
  <root>
    <level value="ALL"/>
    <appender-ref ref="RollingLogFileAppender"/>
  </root>
</log4net>

Startup.cs

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddLog4Net();
}

此行将文件夹设置为 Temp:<file value="Temp\" />

将其更改为 bin 文件夹的完整路径或 bin 文件夹相对于应用程序 working directory 的路径。

例如:.\.\bin\

默认情况下 Visual Studio 将 运行 您的项目并将 working directory 设置为项目路径。

在您的项目设置中,您可以在“调试”部分手动将 working directory 覆盖为 bin,或者您可以将启动模式从 Project 更改为 Executable 和 select bin 文件夹中的可执行文件。

log4net 将始终使用当前目录(工作目录)作为配置文件中定义的实际路径的根,因此当通过 VS 启动应用程序时,它指向项目文件夹,当应用程序直接在 bin 文件夹中启动时, 日志文件将放在 bin 文件夹中。