using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using NLog.Web; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace Traffic.Api { public class Program { //Trace 0 LogTrace() Logs messages only for tracing purposes for the developers. // 此類 Log 通常用於開發階段,讓開發人員檢查資料使用,可能會包含一些帳號密碼等敏感資料,不適合也不應該出現在正式環境的 Log 中。 (預設不會輸出) //Debug 1 LogDebug() Logs messages for short-term debugging purposes. 預設不會輸出 // 這類型的 Log 是為了在正式環境除錯使用,但平常不應該開啟,避免 Log 量太大,反而會造成正式環境的問題。 (預設不會輸出) //Information 2 LogInformation() Logs messages for the flow of the application. // 常見的 Log 類型,主要是紀錄程試運行的流程。 //Warning 3 LogWarning() Logs messages for abnormal or unexpected events in the application flow. // 紀錄可預期的錯誤或者效能不佳的事件;不改不會死,但改了會更好的問題。 //Error 4 LogError() Logs error messages. // 紀錄非預期的錯誤,不該發生但卻發生,應該要避免重複發生的錯誤事件。 //Critical 5 LogCritical() Logs failures messages that require immediate attention. // 只要發生就準備見上帝的錯誤事件,例如會導致網站重啟,系統崩潰的事件。 public static void Main(string[] args) { // NLog: setup the logger first to catch all errors var logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger(); try { logger.Debug("init main"); BuildWebHost(args).Build().Run(); } catch (Exception ex) { //NLog: catch setup errors logger.Error(ex, "Stopped program because of exception"); throw; } finally { // Ensure to flush and stop internal timers/threads before application-exit (Avoid segmentation fault on Linux) NLog.LogManager.Shutdown(); } } public static IWebHostBuilder BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup() .ConfigureLogging(logging => { logging.ClearProviders(); logging.SetMinimumLevel(LogLevel.Trace); }) .UseNLog(); // NLog: setup NLog for Dependency injection } }