
1.首先来一大串的安装
- Install-Package Serilog
- //控制台输出
- Install-Package Serilog.Sinks.Console
- //文件输出
- Install-Package Serilog.Sinks.File
-
- //除了上面的 vs输出
- Install-Package Serilog.Sinks.Debug
- //改变文件输出格式包
- Install-Package Serilog.Sinks.RollingFile
- //数据库输出
- Install-Package Serilog.Sinks.MSSqlServer
2.封装Logger类
- public class SerilogConfiguration
- {
- /// <summary>
- /// 创建全局Logger
- /// </summary>
- public static void CreateLogger()
- {
- // 这一部分是配置Sql Server的Sink
- // 数据库连接字符串
- string connectionString = Application.GetConfigConnectionString();
- // 表名
- string tableName = Application.GetConfigLogTableString();
- // 自定义字段
- var columnOptions = new ColumnOptions
- {
- AdditionalDataColumns = new Collection<DataColumn>
- {
- new DataColumn {DataType = typeof (string), ColumnName = "User"},
- new DataColumn {DataType = typeof (string), ColumnName = "Class"},
- }
- };
- // Sql Server的表中加入Json格式Log Event的数据字段
- //columnOptions.Store.Add(StandardColumn.Level);
- // 输出模板,Sql Server不能用这个
- const string outputTemplate = "[{Timestamp:HH:mm:ss.FFF} {Level}] {Message} ({SourceContext:l}){NewLine}{Exception}";
- Serilog.Log.Logger = new LoggerConfiguration()
- .MinimumLevel.Verbose() // 所有Sink的最小记录级别
- .Enrich.WithProperty("SourceContext", null) //加入属性SourceContext,也就运行时是调用Logger的具体类
- //.Enrich.FromLogContext() //动态加入属性,主要是针对上面的自定义字段User和Class,当然也可以随时加入别的属性。
- .WriteTo.Debug(
- outputTemplate: outputTemplate) // 写到VS Output 窗口
- .WriteTo.RollingFile("logs\\{Date}.log", shared: true, restrictedToMinimumLevel: LogEventLevel.Debug,
- outputTemplate: outputTemplate) // 写到文件,每天一个,最小记录级别是Debug,文件格式是 yyyyMMdd.log
- // 记录到Sql Server,最小级别是Information
- .WriteTo.MSSqlServer(connectionString, tableName, columnOptions: columnOptions, autoCreateSqlTable: true, restrictedToMinimumLevel: LogEventLevel.Debug)
- .CreateLogger();
- //.net Core 需添加
- //Serilog.Debugging.SelfLog.Enable(msg =>
- //{
- // Debug.Print(msg);
- // Debugger.Break();
- //});
- }
- /// <summary>
- /// 刷新全局Logger并提交到数据库
- /// </summary>
- public static void ReferenceLogger()
- {
- Log.CloseAndFlush();
- CreateLogger();
- }
- }
2.测试代码
- SerilogConfiguration.CreateLogger();
- Log.Logger.Information("Information Test");
- SerilogConfiguration.ReferenceLogger();
-
- string User = "Bob";
- string TClass = nameof(Program);
- using (LogContext.PushProperty("User", User))
- using (LogContext.PushProperty("Class", TClass))
- {
-
- Log.Logger.Error("Error Test {UserType}", User, TClass);
- Log.Logger.Warning("Warning Test");
-
- }
- SerilogConfiguration.ReferenceLogger();
3.运行结果
4.说明以及遇到的问题
全程只需要你把连接字符串写好,字段加好和 autoCreateSqlTable: true 就可以了,不需要在数据库中创建表结构程序会自动创建
【注意】:想把Serilog写到sqlserver需要调用Log.CloseAndFlush();方法即可实现,不然光建立好了表数据不会到达数据库
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
评价
排名
2
文章
657
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 :
好是好,这个对效率影响大不大哇,效率高不高
一个bug让程序员走上法庭 索赔金额达400亿日元
剑轩 : 有点可怕
ASP.NET Core 服务注册生命周期
剑轩 :
http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术