Một số lỗi trong lúc khởi động hệ thống ASP.NET Core trên Windows Server mà chúng ta chưa rõ nguyên nhân tại sao ứng dụng không hoạt động. Vậy bạn có thể dùng đểns stdout để chẩn đoán lỗi.
Thông thường khi deploy ứng dụng ASP.NET Core lên Windows Server mình thường gặp một số lỗi thông dụng sau:
1. Do Windows Server chưa cài bản Dotnet Core Runtime hoặc cài rồi nhưng không đúng phiên bản
2. Sai cấu hình chuỗi kết nối
3. Một số lỗi liên quan quyền hệ thống hoặc config trên IIS
Các lỗi xảy ra khi đã khởi động được ứng dụng thì thường do chức năng logging của ứng dụng ghi lại nhưng còn các lỗi xảy ra lúc khởi động thì nó chưa chạy vào chức năng ghi log của ứng dụng. Mà lại là trên server nên chúng ta rất khó xác định.
Mình xin giới thiệu đến các bạn tính năng stdout log của ASP.NET giúp các bạn xem log rất dễ dàng. Chả là khi các bạn publish ứng dụng nó cũng vẫn tạo cho chúng ta một file web.config rất đơn giản thường như sau:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<security>
<requestFiltering removeServerHeader="true" />
</security>
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath=".\WebApp.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
</system.webServer>
</location>
</configuration>
Các bạn có thấy phần cấu hình trong thẻ <aspNetCore> có thuộc tính stdoutLogEnabled="false" không? Mặc định mình đang để là false vì nếu không cần tìm lỗi thì các bạn nên tắt nó đi. Tiếp theo là thuộc tính stdoutLogFile sẽ ghi file log ra thư mục đó ở đây là thư mục logs/stdout trong thư mục root của ứng dụng.
Nếu thư mục logs chưa tồn tại thì các bạn nên tạo nó nhé. Khi các bạn enable lên thì nhớ vào hosting set quyền ghi file cho Application Pools có thể ghi file vào thư mục logs này nhé. Tên file sau khi sinh ra sẽ là stdout_timestamp.log và các bạn có thể xem được lỗi.
Setup xong thì lưu file web.config lại rồi thử chạy lại ứng dụng.
Sau khi tìm lỗi xong các bạn nên set lại stdoutLogEnabled là false để không ghi log thừa ra nhé và đảm bảo performance lẫn bảo mật.
Nếu trong trường hợp các bạn vẫn chưa tìm ra lỗi hoặc log không ghi ra thì có thể do lỗi phía IIS hoặc Windows, các bạn có thể tra tiếp trong Event Viewer --> Windows Logs --> Application của Windows. Cái này các bạn tìm trong thanh tìm kiếm là ra nhé.
Tác giả: Bạch Ngọc Toàn
Chú ý: Tất cả các bài viết trên TEDU.COM.VN đều thuộc bản quyền TEDU, yêu cầu dẫn nguồn khi trích lại trên website khác.