Serilog简介
Serilog是.NET应用程序的诊断日志库。它易于设置,具有干净的API,并可在所有最新的.NET平台上运行。虽然它在最简单的应用程序中也很有用,但Serilog对结构化日志记录的支持在处理复杂,分布式和异步应用程序和系统时仍然很有用。——GithubSerilog的介绍
通过Console使用Serilog
使用Serilog之前先得在NuGet下载几个包,在NuGet控制台并输入
>Install-Package Serilog
>Install-Package Serilog.Sinks.Console
第一个是Serilog的核心软件包,另外一个是接收器,用于接收日志事件并展示出来,这里只下载了控制台的接收器,关于其它接收器可在下面网址查到
https://github.com/serilog/serilog/wiki/Provided-Sinks
class Program
{
static void Main(string[] args)
{
//日志的输出模板
string Logformat = @"{Timestamp:yyyy-MM-dd HH:mm-dd }[{Level:u3}] {Message:lj}{NewLine}";
//类似创建一个管道
var log = new LoggerConfiguration()
//设置最低等级
.MinimumLevel.Debug()
//将事件发送到控制台并展示
.WriteTo.Console(outputTemplate:Logformat)
.CreateLogger();
//
Log.Logger = log;
//这里因为设置了最低等级为Debug,
//所以比Debug低的Verbose不会展示在控制台
Log.Verbose("这是一个Verbose");
Log.Information("开始");
int a = 0;
int b = 2;
try
{
Log.Debug("计算两者相除");
Console.WriteLine(b / a);
}catch(Exception ex)
{
Log.Error(ex, "计算出现意外的错误");
}
Log.Information("结束");
}
}
LoggerConfiguration的MinimumLevel默认是Information等级
如果还想将日志记录到文件的话,先在NuGet下载相关的Sinks
>Install-Package Serilog.Sinks.File
然后在上面的程序添加一些代码.WriteTo.File()
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Console(outputTemplate:Logformat)
//第一个参数是文件路径,第二个参数是输出模板的选择,第三个参数是表示程序隔什么事件新创造一个日志文件
.WriteTo.File("logs\\myConsole.log",outputTemplate:Logformat,rollingInterval:RollingInterval.Day)
.CreateLogger();
rollingInterval参数默认是RollingInterval.Infinite 永远不创建新文件并不将日志回滚到新文件
在Web程序中使用Serilog
下面使用 ASP.NET Core 来展示效果
首先先在NuGet下载相关的包
>Install-Package Serilog
>Install-Package Serilog.AspNetCore
>Install-Package Serilog.Sinks.Console
>Install-Package Serilog.Sinks.File
>Install-Package Serilog.Settings.Configuration
第一个和第二个包是ASP.NET Core所需要的核心包,第二个和第三个是接收器包,第四个用于通过外部配置文件来配置Serilog
通过Program.cs添加Serliog
public class Program
{
public static void Main(string[] args)
{
//选择配置文件appsetting.json
var Configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
Log.Logger = new LoggerConfiguration()
//管道的配置由配置文件进行修改
.ReadFrom.Configuration(Configuration)
.CreateLogger();
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
//Serilog.AspNetCore的方法
.UseSerilog()
.Build();
}
在appsettings.json文件添加配置信息
"Serilog": {
"MinimumLevel": {
"Default": "Debug"
},
"WriteTo": [
{
"Name": "Console",
"Args": {
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm-dd }[{Level:u3}] {Message:lj}{NewLine}{Exception}"
}
},
{
"Name": "File",
"Args": {
"path": "logs\\myWeb.log",
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm-dd }[{Level:u3}] {Message:lj}{NewLine}{Exception}"
}
}
]
}
控制器
public class HomeController : Controller
{
private readonly ILogger<HomeController> _log;
public HomeController(ILogger<HomeController> Logger)
{
_log = Logger;
}
public IActionResult Index()
{
_log.LogInformation("开始");
int a = 0;
int b = 2;
try
{
_log.LogDebug("计算两者相除");
Console.WriteLine(b / a);
}
catch (Exception ex)
{
_log.LogError(ex, "计算出现意外的错误");
}
_log.LogInformation("结束");
return View();
}
}
参考资料
Serilog官方文档:https://github.com/serilog/serilog/wiki/Getting-Started