前言
本篇主要紀錄簡單應用,多會使用 Linqpad 加以介紹。
本文
首先依據官方文件我們需要先安裝 Serilog 的 Nuget 套件。
要安裝的有以下三個:
安裝完成後就可以使用官方提供的範例來練習寫一個 Log
void Main()
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Console()
.WriteTo.File("D:/logs/myapp.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();
Log.Information("Log Test");
int a = 10, b = 0;
try
{
Log.Debug("Dividing {A} by {B}", a, b);
Console.WriteLine(a / b);
}
catch (Exception ex)
{
Log.Error(ex, "Something went wrong");
}
finally
{
Log.CloseAndFlush();
}
}
在上面這個範例中,我們指定了 Log 存放於 D:/logs/myapp.txt 這個檔案中,而後面這個變數則可以指定存放的檔案名稱是以甚麼來做為區分,目前是使用當天日期。
也是有其他的選項可以做選擇
範例
Log 內的檔案資訊如圖
這邊可以看到 Serilog 會幫我們整理好一個固定的格式,以及 Log 的等級,便於觀看。
Log 的等級則簡單的分為了以下六種:
結構化的優勢
紀錄 Array
void Main()
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Console()
.WriteTo.File("D:/logs/myapp.txt", rollingInterval: RollingInterval.Month)
.CreateLogger();
var fruit = new[] { "Apple", "Pear", "Orange" };
Log.Information("In my bowl I have {Fruit}", fruit);
}
紀錄 Dictionary
var fruit = new Dictionary<string,int> {{ "Apple", 1}, { "Pear", 5 }};
Log.Information("In my bowl I have {Fruit}", fruit);
最大優勢就是直接幫忙轉換成了 Json 這個易讀的格式,讓看 Log 的可讀性一下子提升了不少。
void Main()
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Console()
.WriteTo.File("D:/logs/myapp.txt", rollingInterval: RollingInterval.Month)
.CreateLogger();
var sensorInput = new { one = "123", two = 134 ,three = true};
Log.Information("Processing {SensorInput}", sensorInput);
}
對 Object 的支援也可以用輕鬆處理。
void Main()
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Console()
.WriteTo.File("D:/logs/myapp.txt", rollingInterval: RollingInterval.Month)
.CreateLogger();
var sensorInput = new[] {1,2,3};
Log.Information("Processing {$SensorInput}", sensorInput);
}
若要看紀錄的型別可以使用 $
如果想要把整個 Log 記錄成 Json 格式,則可以使用 Serilog.Formatting.Compact 來做格式的轉換。
void Main()
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Console()
.WriteTo.File(new CompactJsonFormatter(), "D:/logs/myapp.txt", rollingInterval: RollingInterval.Month)
.CreateLogger();
var sensorInput = new[] {1,2,3};
Log.Information("Processing {@SensorInput}", sensorInput);
}
後記
簡單的使用紀錄就到這邊,下一篇準備來個簡單的狀況題順便練習一下如何使用 Serilog 將想記錄的 Log 寫入目標 DB。