在webapi專案下使用serilog套件
同步更新於個人部落格
Serilog範例
選擇ASP.NET Core Web API專案範本,並執行下一步
命名你的專案名稱,並選擇專案要存放的位置。
直接進行下一步
在最外層包一個try catch目的是為了捕捉啟動階段的錯誤
using Serilog;
using Serilog.Events;
Log.Logger = new LoggerConfiguration()
//Serilog要寫入的最低等級為Information
.MinimumLevel.Information()
//Microsoft.AspNetCore開頭的類別等極為warning
.MinimumLevel.Override("Microsoft.AspNetCore", LogEventLevel.Warning)
//寫log到Logs資料夾的log.txt檔案中,並且以天為單位做檔案分割
.WriteTo.File("./Logs/log.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();
try {
Log.Information("Starting web host");
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
//controller可以使用ILogger介面來寫入log紀錄
builder.Host.UseSerilog();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment()) {
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
return 0;
} catch (Exception ex) {
Log.Fatal(ex, "Host terminated unexpectedly");
return 1;
} finally { Log.CloseAndFlush(); }
因預設就有注入ILogger,故可以直接使用
因微軟內建的介面ILogger等級區分與Serilog不一樣,故提供對照表格
ILogger | Serilog | |
---|---|---|
Level 0 | Trace | Verbose |
Level 1 | Debug | Debug |
Level 2 | Information | Information |
Level 3 | Warning | Warning |
Level 4 | Error | Error |
Level 5 | Critical | Fatal |
Level 6 | None | Serilog沒有 |
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger) {
_logger = logger;
}
[HttpGet(Name = "GetWeatherForecast")]
public IEnumerable<WeatherForecast> Get() {
//輸出log
_logger.LogInformation("This is Controller");
_logger.LogError("Test Error");
return Enumerable.Range(1, 5).Select(index => new WeatherForecast {
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
F5執行後,依照下列步驟操作,並確認結果
執行後就可以到我們的專案檔路徑下查看Logs資料夾
點進去資料夾後就可以看到以日期為單位的txt檔案