导航

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