廈門網(wǎng)絡建站公司網(wǎng)站seo專員
ASP.NET Core 提供了豐富日志系統(tǒng)。
可以通過多種途徑輸出日志,以滿足不同的場景,內(nèi)置的幾個日志系統(tǒng)包括:
- Console,輸出到控制臺,用于調(diào)試,在產(chǎn)品環(huán)境可能會影響性能。
- Debug,輸出到 System.Diagnostics.Debug.WriteLine
- EventSource,輸出到對應操作系統(tǒng)的日志系統(tǒng)中,在Windows上是輸出到ETW中。
- EventLog,Windows特有,輸出到Windows Event Log。
可以同時輸出到多個日志系統(tǒng),也可以只輸出到某一個日志系統(tǒng),因為默認會添加所有內(nèi)置的日志系統(tǒng)
可以通過下面的代碼指定輸出到控制臺:
var builder = WebApplication.CreateBuilder(args);
builder.Logging.ClearProviders(); //清除其他日志輸出系統(tǒng)
builder.Logging.AddConsole(); //輸出到控制臺
第三方的文件為主的日志系統(tǒng):
- Log4Net
- NLog
- Serilog
設置日志輸出到Serilog文件日志系統(tǒng),但是Serilog會阻止控制臺日志的輸出,
Log.Logger = new LoggerConfiguration().WriteTo.File(Config.PathLogFile,fileSizeLimitBytes: 1024 * 1024 * 5,rollOnFileSizeLimit: true).CreateLogger();builder.Host.UseSerilog();var app = builder.Build();
然后用的時候,在每個類里都可以注入使用Log類:
public class AboutModel : PageModel
{private readonly ILogger _logger;public AboutModel(ILogger<AboutModel> logger){_logger = logger;}public void OnGet(){_logger.LogInformation("About page visited at {DT}", DateTime.UtcNow.ToLongTimeString());}
}
注意,這里會把日志分類成 AboutModel,以便查找。
日志的級別
級別越高,輸出的內(nèi)容越少,直到什么都不輸出。
- Trace
- Debug
- Information
- Warning
- Error
- Critical
- None
比如在appsettings.json配置中,Console只輸出Information以上的日志, EventSource只輸出Warning以上的日志,其他所有的輸出Error以上的。
{"Logging": {"LogLevel": { // All providers, LogLevel applies to all the enabled providers."Default": "Error", // Default logging, Error and higher."Microsoft": "Warning" // All Microsoft* categories, Warning and higher.},"Console": { // Debug provider."LogLevel": {"Default": "Information", // Overrides preceding LogLevel:Default setting."Microsoft.Hosting": "Trace" // Debug:Microsoft.Hosting category.}},"EventSource": { // EventSource provider"LogLevel": {"Default": "Warning" // All categories of EventSource provider.}}}
}
Log的ID
可以設置Log的ID進一步區(qū)分不同的日志:
public class MyLogEvents
{public const int GenerateItems = 1000;public const int ListItems = 1001;public const int GetItem = 1002;public const int InsertItem = 1003;public const int UpdateItem = 1004;public const int DeleteItem = 1005;public const int TestItem = 3000;public const int GetItemNotFound = 4000;public const int UpdateItemNotFound = 4001;
}
_logger.LogInformation(MyLogEvents.GetItem, "Getting item {Id}", id);
輸出 App 運行之前的日志
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.Logger.LogInformation("Adding Routes");
app.MapGet("/", () => "Hello World!");
app.Logger.LogInformation("Starting the app");
app.Run();
記錄 HTTP 請求
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.UseHttpLogging(); //啟用Http log系統(tǒng)
if (!app.Environment.IsDevelopment())
{app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.MapGet("/", () => "Hello World!");
app.Run();