05-006 Logging 之 Serilog http://serilog.net
Posted on 2015-03-18 14:07 DotNet1010 阅读(250) 评论(0) 收藏 举报这个Log组件的特点是:拥有强大的结构化数据处理能力
Unlike other logging libraries, Serilog is built with powerful structured event data in mind.
废话不多说 上代码:
var position = new { Latitude = 25, Longitude = 134 }; var elapsedMs = 34; log.Information("Processed {@Position} in {Elapsed:000} ms.", position, elapsedMs);
以JSON 格式输出: 上面的@ 符号指明了需要对对象进行序列化 而不是调用 ToString()
{"Position": {"Latitude": 25, "Longitude": 134}, "Elapsed": 34}
控制台输出的内容为:
2015-03-20 13:32:32 [Information] Processed { Latitude: 25, Longitude: 134 } in 034 ms.
API 写文件;
Log.Logger = new LoggerConfiguration()
.WriteTo.ColoredConsole()
.WriteTo.RollingFile(@"C:\Log-{Date}.txt")
.CreateLogger();
API 写MongoDB 立马高大上起来了:
Log.Logger = new LoggerConfiguration()
.WriteTo.ColoredConsole()
.WriteTo.MongoDB("mongo://myserver/logs", minimumLevel: LogEventLevel.Warning)
.CreateLogger();
我在控制台测试一下:代码如下: 有一个全局的Log 可以用 比较方便。
输出内容为:2015-03-20 13:27:09 [Information] test
默认个格式为:{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level}] {Message}{NewLine}{Exception}
这个是可以修改的 见下方的例子
var log = new LoggerConfiguration()
.WriteTo.ColoredConsole()
.CreateLogger();
Log.Logger = log;
Log.Information("test");
Console.Read();
再看一个例子:修改了输出的格式:
var log = new LoggerConfiguration()
.Enrich.WithMachineName()
.Enrich.WithProcessId()
.Enrich.WithThreadId()
.WriteTo.ColoredConsole(outputTemplate: " {Timestamp:HH:mm} {xiaoming} {SourceContext} {MachineName} [{Level}] ({ThreadId}) {Message} {Exception} {NewLine}")
.CreateLogger();
var ilog = log.ForContext(Constants.SourceContextPropertyName, "Tom"); //Add {SourceContext}
ilog = ilog.ForContext("xiaoming", "xioming:");
Log.Logger = ilog;
Log.Information("Test");
输出的结果是: 13:24 "xioming:" "Tom" "PHSHALPB18D02" [Information] (9) Test
依次是 时间 自定义的两个 xiaoming tom 然后是 机器名 Level ThreadId MEssage 等。
具体的存储类型 这里称作 Sinks 列表参见:https://github.com/serilog/serilog/wiki/Provided-Sinks
浙公网安备 33010602011771号