Tạo và chuyển hướng Log với ASP.NET Core Module
ASP.NET Core Module (mô-đun ASP.NET Core) chuyển hướng đầu ra console stdout và stderr ra đĩa nếu các thuộc tính stdoutLogEnabled và stdoutLogFile của phần tử aspNetCore được thiết lập. Mọi thư mục trong đường dẫn stdoutLogFile sẽ được mô-đun tạo ra khi tạo file log. App pool (nhóm ứng dụng) phải có quyền ghi vào vị trí nơi các log được ghi (sử dụng IIS AppPool\{APP POOL NAME} để cấp quyền ghi, trong đó placeholder {APP POOL NAME} là tên app pool).
Log không được xoay vòng (rotate) trừ khi quá trình được khởi động lại hoặc tái chế. Hoster (nhà cung cấp hosting) có trách nhiệm giới hạn dung lượng đĩa mà log tiêu thụ.
Sử dụng stdout log chỉ được khuyến nghị để xử lý sự cố khởi động ứng dụng khi hosting trên IIS hoặc khi sử dụng hỗ trợ IIS tại thời điểm phát triển với Visual Studio, không phải khi debug cục bộ và chạy ứng dụng với IIS Express.
Không sử dụng stdout log cho mục đích ghi log chung của ứng dụng. Để ghi log thông thường trong ứng dụng ASP.NET Core, hãy sử dụng thư viện ghi log có giới hạn kích thước file log và xoay vòng log. Để biết thêm thông tin, xem third-party logging providers.
Timestamp (dấu thời gian) và phần mở rộng file được thêm tự động khi file log được tạo. Tên file log được tạo thành bằng cách thêm timestamp, process ID và phần mở rộng file (.log) vào phân đoạn cuối cùng của đường dẫn stdoutLogFile (thường là stdout) được phân tách bằng dấu gạch dưới. Nếu đường dẫn stdoutLogFile kết thúc bằng stdout, một log cho ứng dụng có PID là 1934 được tạo vào ngày 2/5/2018 lúc 19:42:32 sẽ có tên file stdout_20180205194132_1934.log.
Nếu stdoutLogEnabled là false, các lỗi xảy ra khi khởi động ứng dụng sẽ được ghi vào event log (nhật ký sự kiện) tối đa 30 KB. Sau khi khởi động, tất cả các log bổ sung sẽ bị loại bỏ.
Phần tử aspNetCore mẫu sau đây cấu hình stdout logging tại đường dẫn tương đối .\log\. Xác nhận rằng danh tính người dùng AppPool có quyền ghi vào đường dẫn được cung cấp.
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="true"
stdoutLogFile=".\logs\stdout"
hostingModel="inprocess">
</aspNetCore>Khi publish (xuất bản) ứng dụng để triển khai Azure App Service, Web SDK đặt giá trị stdoutLogFile thành \\?\%home%\LogFiles\stdout. Biến môi trường %home được xác định trước cho các ứng dụng được hosted bởi Azure App Service.
Để tạo các quy tắc lọc log, xem phần Apply log filter rules in code trong tài liệu ghi log ASP.NET Core.
Để biết thêm thông tin về định dạng đường dẫn, xem File path formats on Windows systems.
Log chẩn đoán nâng cao (Enhanced diagnostic logs)
ASP.NET Core Module có thể được cấu hình để cung cấp log chẩn đoán nâng cao. Thêm phần tử <handlerSettings> vào phần tử <aspNetCore> trong web.config. Đặt debugLevel thành TRACE để hiển thị thông tin chẩn đoán với độ chính xác cao hơn:
<aspNetCore processPath="dotnet"
arguments=".\MyApp.dll"
stdoutLogEnabled="false"
stdoutLogFile="\\?\%home%\LogFiles\stdout"
hostingModel="inprocess">
<handlerSettings>
<handlerSetting name="debugFile" value=".\logs\aspnetcore-debug.log" />
<handlerSetting name="debugLevel" value="FILE,TRACE" />
</handlerSettings>
</aspNetCore>Mọi thư mục trong đường dẫn (logs trong ví dụ trên) sẽ được mô-đun tạo ra khi file log được tạo. App pool phải có quyền ghi vào vị trí nơi các log được ghi (sử dụng IIS AppPool\{APP POOL NAME} để cấp quyền ghi, trong đó placeholder {APP POOL NAME} là tên app pool).
Giá trị debug level (debugLevel) có thể bao gồm cả mức độ lẫn vị trí.
Các mức độ (theo thứ tự từ ít đến nhiều chi tiết nhất):
- ERROR
- WARNING
- INFO
- TRACE
Các vị trí (nhiều vị trí được phép):
- CONSOLE
- EVENTLOG
- FILE
Các cài đặt handler cũng có thể được cung cấp qua các biến môi trường:
ASPNETCORE_MODULE_DEBUG_FILE: Đường dẫn đến file debug log. (Mặc định:aspnetcore-debug.log)ASPNETCORE_MODULE_DEBUG: Cài đặt debug level.
Cảnh báo: Không để debug logging bật trong môi trường triển khai lâu hơn thời gian cần thiết để khắc phục sự cố. Kích thước log không bị giới hạn. Để debug log bật có thể làm cạn kiệt dung lượng đĩa và làm crash server hoặc app service.
Xem Cấu hình ASP.NET Core Module với web.config để biết ví dụ về phần tử aspNetCore trong file web.config.