.Net Core IIS下无Log4Net日志输出,命令行下却有(dotnet运行)
遇到个诡异的问题,项目发布并寄宿到 IIS上后,Log4Net没有日志输出
1.原因分析
这不应该啊,所有的配置都在.Net Core控制台做了测试
因为控制台上会有输出信息,所以切到控制台下运行(dotnet *.dll),确实有特意抛出的异常信息,且文件夹会被创建并写入异常信息。但是IIS寄宿死活不出输出日志(这里应该怀疑时IIS的配置问题 orz)。
百度无果,就Google,终于找到原因了
其实:ASP.NET Core
有InProcess & 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>