在.NET使用日志框架第一时间会想到NLog或是Log4Net,Serilog 是这几年快速崛起的Log框架之一,Serilog是以Structured logging 为基础进行设计,透过logging API 可以轻松的记录应用程式中对象属性,方便快速进行logging 内容进行查询与分析,并将其纪录内容透过json (可指定) 的方式输出。在过去的几年中,结构化日志已经大受欢迎。而Serilog是 .NET 中最著名的结构化日志类库 ,我们提供了这份的精简指南来帮助你快速了解并运用它。
//以下为常用记录日志方法 等级最高的是Fatal
log.Information("info");
log.Debug("debug");
log.Warning("warning");
log.Error("err");
log.Fatal("fatal");
无论是core或framework ,配置基本相同,就是声明一个(如下代码)
Log.Logger = new LoggerConfiguration() .CreateLogger();
当然上面的代码配置根本是不够的,你想个性化设置日志输出到什么地方,需要引用一些serilog的接收器。Serilog的输出对象称之为Sink(水槽,也就是接收器),nuget中搜索 关键词serilog.sinks, 会发现有一堆组件。
常见的接收器Console 输出到控制台 Debug 输出到VS的Debug窗口 Trace 输出到VS的控制台 File 输出到文件 Rolling File MongoDB 输出到MongoDB LiteDB 输出到文件数据库LiteDB SQLite 输出到文件数据库SQLite SignalR 输出为SignalR服务 HTTP 输出到REST服务下面介绍下CS架构和BS架构使用方法 1.首先安装Nuget包
Install-Package Serilog
也可以
2.
using Serilog;
构造函数中写
//以下表示在程序运行目录 以天为单位生成日志文件(也可以以小时等为单位)
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.File("logs\log.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();
2.输出日志方法
Log.Information("Information");
Log.Debug("debug");
Log.Error("error");
3.每一天会生成每天的日志文件
4.BS架构以net core为例
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Serilog;
using Serilog.Core;
using Serilog.Events;
namespace BoYuanCore.Web
{
public class Program
{
public static int Main(string[] args)
{
//CreateHostBuilder(args).Build().Run();
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()//最小的输出单位是Debug级别的
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)//将Microsoft前缀的日志的最小输出级别改成Information
.Enrich.FromLogContext()
.WriteTo.File(@"./logs/log.txt", rollingInterval: RollingInterval.Day).CreateLogger();
try
{
Log.Information("Starting web host");
CreateHostBuilder(args).Build().Run();
return 0;
}
catch (Exception ex)
{
Log.Fatal(ex, "Host terminated unexpectedly");
return 1;
}
finally
{
Log.CloseAndFlush();
}
}
}
}
4.1输出日志方法
using Serilog;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Http.Headers;
using System.Threading.Tasks;
namespace PublicTest.Controllers
{
[Route("api/[controller]/[action]")]
[ApiController]
public class TestController : ControllerBase
{
[HttpGet]
public ActionResult Getqwe()
{
Log.Information("123");
Log.Error("error");
}
}
}



