66 lines
2.7 KiB
C#
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
|
|
}
|
|
}
|