tycg_carviolation_BE/Traffic.Api/Program.cs

66 lines
2.7 KiB
C#

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<Startup>()
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.SetMinimumLevel(LogLevel.Trace);
})
.UseNLog(); // NLog: setup NLog for Dependency injection
}
}