学习SeriLog(一)
SeriLog的创建
SeriLog项目在Github上的说明Readme,使用NuGet包管理器控制台安装。
Install-Package Serilog
Install-Package Serilog.Sinks.Console
Install-Package Serilog.Sinks.File
创建动态实例
var log = new LoggerConfiguration()
.WriteTo.Console()
.WriteTo.File("log.txt")
.CreateLogger();
log.Information("Hello, Serilog!");
创建全局静态实例
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Information()
.WriteTo.Console()
.WriteTo.File("log.txt",
rollingInterval: RollingInterval.Day,
rollOnFileSizeLimit: true)
.CreateLogger();
Log.Information("Hello, Serilog!");
Log.CloseAndFlush();
一个简单的模板
//日志的输出模板
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("结束");
在线文档
一个完整的例子
using System;
using System.Text;
using System.Diagnostics;
using Serilog;
namespace SerilogConsole
{
class Program
{
static void Main()
{
// 创建全局静态实例
Log.Logger = new LoggerConfiguration()
//设置最低等级
.MinimumLevel.Verbose()
//将事件发送到文件
.WriteTo.File(@".\Log\Log.txt", // 日志文件名
outputTemplate: // 设置输出格式,显示详细异常信息
@"{Timestamp:yyyy-MM-dd HH:mm-ss.fff }[{Level:u3}] {Message:lj}{NewLine}{Exception}",
rollingInterval: RollingInterval.Day, // 日志按月保存
rollOnFileSizeLimit: true, // 限制单个文件的最大长度
encoding:Encoding.UTF8, // 文件字符编码
retainedFileCountLimit:10, // 最大保存文件数
fileSizeLimitBytes:10*1024) // 最大单个文件长度
.CreateLogger();
var stopWatch = new Stopwatch();
stopWatch.Start();
Log.Verbose("Hello SeriLog!");
Log.Information("开始测试");
for (var i = 0; i < 1000; i++) // 产生1000次异常测试
{
try
{
Log.Debug("抛出异常");
throw new InvalidProgramException("程序错误。");
}
catch (Exception e)
{
Log.Error(e, "捕获异常");
}
}
stopWatch.Stop();
Log.Information($"结束测试, 共运行{stopWatch.ElapsedMilliseconds}ms。");
Log.CloseAndFlush();
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
}
运行产生的日志文件:
可看到一共产生了25个日志文件,每个文件最大10K,只保留最新的10个文件。