.Net Core IIS下无Log4Net日志输出,命令行下却有(dotnet运行)

.Net Core IIS下无Log4Net日志输出,命令行下却有(dotnet运行)

遇到个诡异的问题,项目发布并寄宿到 IIS上后,Log4Net没有日志输出

1.原因分析

这不应该啊,所有的配置都在.Net Core控制台做了测试

因为控制台上会有输出信息,所以切到控制台下运行(dotnet *.dll),确实有特意抛出的异常信息,且文件夹会被创建并写入异常信息。但是IIS寄宿死活不出输出日志(这里应该怀疑时IIS的配置问题 orz)。

百度无果,就Google,终于找到原因了

其实:ASP.NET CoreInProcess & OutOfProcess两种托管模型

在 IIS 工作进程 (w3wp.exe) 内托管 ASP.NET Core 应用,称为进程内托管模型。
将 Web 请求转发到运行 Kestrel 服务器的后端 ASP.NET Core 应用,称为进程外托管模型。

将IIS下的InProcess 托管模型切换成Kestrel下的OutOfProcess托管模型

2. 解决办法

直接修改项目文件(*.csproj)

<PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
 </PropertyGroup>

修改发布后的web.config文件

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".RiChooseCourse.dll" stdoutLogEnabled="false" stdoutLogFile=".logsstdout" hostingModel="OutOfProcess" />
    </system.webServer>
  </location>
</configuration>
原文地址:https://www.cnblogs.com/liushen/p/Findout_Why_IIS_Has_Not_Log_But_Console_Has.html