前言

本篇主要紀錄簡單應用,多會使用 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。

參考連結