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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM