前言

本篇文章是學習與嘗試建 ASP .Net Core Web Application 持續整合遇到,比較基礎的問題
。主要是 deploy to IIS 後, stdoutLogFile 無法產生的問題 (permission issue),在這邊做一個
紀錄避免以後重蹈覆轍,也提供給有需要的開發者參考。若有說明錯誤或相關建議,請各
位先進不吝指教。


測試環境:
Windows 10
Visual Studio 2015 Update 3
Visual Studio Core
IIS Version 10.0.10586.0
ASP .Net Core 1.0

說明

步驟 1. 確認專案內 web.config 內 stdoutLogFile 設定正確,預設為 ".\logs\stdout" (相對路徑)
Step 1. Make sure stdoutLogFile value in web.config, default value is ".\logs\stdout" (relative path)



步驟 2. 發佈專案
Step 2. Publish the project

步驟 3. 將專案發佈於 C:\inetpub\
Step 3. Publish the project to C:\inetpub\

步驟 4. 建立一個新的資料夾,名稱為logs
Step 4. Create new folder "logs"

步驟 5. 加入新網站後點選瀏覽網站。進行操作後會發現stdout log沒有出現。
Step 5. Add web site and then click browse website.
            After that, we could not find any stdout log in logs folder.

步驟 6. 開啟事件檢視器, 我們會發現沒有權限建立log檔案的訊息。
Step 6. Open Event Viewer, we can find the message: "could not create stdoutLogFile".

步驟 7. 右鍵點選logs資料夾,點選內容。選擇安全性的頁簽 -> 進階
Step 7. Right click logs folder, click Properties. select security tab -> advanced.


步驟 8. 點選新增 -> 進階 -> 立即尋找,選取IIS_IUSER,點選確定
Step 8. Click Add -> advanced  -> search, select IIS_IUSER, click ok

步驟 9. 點選確定
Step 9. Click ok

步驟 10. 勾選修改權限,點選確定。
Step 10. Enable modify permission, click ok.

步驟 11. 於 IIS管理員重新啟動網站並且瀏覽網站。
Step 11. Click restart website then click browse web site.

步驟 12. 瀏覽網站,你會發現stdout log出現。
Step 12. after browse the web site, you will find stdout log under logs folder




感想

無法產生 stdoutLog 的主要原因在於沒有權限存取 inetpub 資料夾,個人設定其他 log path(
如 D:\logs\),是可以正常產生的。在解決問題的過程中,有開發者建議不要將 log 放
 C:\inetpub\ ,有安全性上的疑慮,這邊也提供參考。