.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=".\logs\stdout" hostingModel="OutOfProcess" />
</system.webServer>
</location>
</configuration>