tnblog
首页
视频
资源
登录

Serilog日志记录到Sqlserver以及其中存在的问题

9731人阅读 2019/10/8 13:40 总访问:3660905 评论:0 收藏:1 手机
分类: .net后台框架

1.首先来一大串的安装


  1. Install-Package Serilog
  2. //控制台输出
  3. Install-Package Serilog.Sinks.Console
  4. //文件输出
  5. Install-Package Serilog.Sinks.File
  6. //除了上面的 vs输出
  7. Install-Package Serilog.Sinks.Debug
  8. //改变文件输出格式包
  9. Install-Package Serilog.Sinks.RollingFile
  10. //数据库输出
  11. Install-Package Serilog.Sinks.MSSqlServer


2.封装Logger类


  1. public class SerilogConfiguration
  2. {
  3.     /// <summary>
  4.     /// 创建全局Logger
  5.     /// </summary>
  6.     public static void CreateLogger()
  7.     {
  8.         // 这一部分是配置Sql Server的Sink
  9.         // 数据库连接字符串
  10.         string connectionString = Application.GetConfigConnectionString();
  11.         // 表名
  12.         string tableName = Application.GetConfigLogTableString();
  13.         // 自定义字段
  14.         var columnOptions = new ColumnOptions 
  15.         {
  16.             AdditionalDataColumns = new Collection<DataColumn>
  17.             {
  18.                 new DataColumn {DataType = typeof (string), ColumnName = "User"},
  19.                 new DataColumn {DataType = typeof (string), ColumnName = "Class"},
  20.             }
  21.         };
  22.         // Sql Server的表中加入Json格式Log Event的数据字段
  23.         //columnOptions.Store.Add(StandardColumn.Level);
  24.         // 输出模板,Sql Server不能用这个
  25.         const string outputTemplate = "[{Timestamp:HH:mm:ss.FFF} {Level}] {Message} ({SourceContext:l}){NewLine}{Exception}";
  26.         Serilog.Log.Logger = new LoggerConfiguration()
  27.             .MinimumLevel.Verbose() // 所有Sink的最小记录级别
  28.             .Enrich.WithProperty("SourceContext"null//加入属性SourceContext,也就运行时是调用Logger的具体类
  29.             //.Enrich.FromLogContext() //动态加入属性,主要是针对上面的自定义字段User和Class,当然也可以随时加入别的属性。
  30.             .WriteTo.Debug(
  31.                 outputTemplate: outputTemplate) // 写到VS Output 窗口
  32.             .WriteTo.RollingFile("logs\\{Date}.log", shared: true, restrictedToMinimumLevel: LogEventLevel.Debug,
  33.                 outputTemplate: outputTemplate) // 写到文件,每天一个,最小记录级别是Debug,文件格式是 yyyyMMdd.log
  34.                                                 // 记录到Sql Server,最小级别是Information
  35.             .WriteTo.MSSqlServer(connectionString, tableName, columnOptions: columnOptions, autoCreateSqlTable: true, restrictedToMinimumLevel: LogEventLevel.Debug)
  36.             .CreateLogger();
  37. //.net Core 需添加
  38.         //Serilog.Debugging.SelfLog.Enable(msg =>
  39.         //{
  40.         //    Debug.Print(msg);
  41.         //    Debugger.Break();
  42.         //});
  43.     }
  44.     /// <summary>
  45.     /// 刷新全局Logger并提交到数据库
  46.     /// </summary>
  47.     public static void ReferenceLogger()
  48.     {
  49.         Log.CloseAndFlush();
  50.         CreateLogger();
  51.     }
  52. }


2.测试代码


  1.  SerilogConfiguration.CreateLogger();
  2.  Log.Logger.Information("Information Test");
  3.  SerilogConfiguration.ReferenceLogger();
  4.  string User = "Bob";
  5.  string TClass = nameof(Program);
  6.  using (LogContext.PushProperty("User", User))
  7.  using (LogContext.PushProperty("Class", TClass))
  8.  {
  9.      Log.Logger.Error("Error Test {UserType}", User, TClass);
  10.      Log.Logger.Warning("Warning Test");
  11.  }
  12.  SerilogConfiguration.ReferenceLogger();


3.运行结果




4.说明以及遇到的问题


全程只需要你把连接字符串写好,字段加好和 autoCreateSqlTable: true 就可以了,不需要在数据库中创建表结构程序会自动创建

【注意】:想把Serilog写到sqlserver需要调用Log.CloseAndFlush();方法即可实现,不然光建立好了表数据不会到达数据库





欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

Serilog 日志简用

Serilog是一个用于.NET应用程序的日志记录开源库,配置简单,接口干净,并可运行在最新的.NET平台上,与其他日志库不同, Se...

.net core 结构化日志组件Serilog:记录对查询分析友好的日志

.net core 结构化日志组件Serilog:记录对查询分析友好的日志[TOC] 结构化日志的好处 易于检索易于分析统计 场景举例 ...

.net 使用 Serilog 和 Seq 构建强大的日志系统

.net 使用 Serilog 和 Seq 构建强大的日志系统[TOC] 在现代软件开发中,日志记录是确保应用程序稳定性和可维护性的关键环...

Sqlserver order by

order by 字段名order by 第几个字段(整形)order by 排序:order by 字段名:通过字段名指定的字段排序 order by 字段数...

Sqlserver保障远程连接的安全性

如果是只读的话建个视图,建个普通用户只对该视图进行读。读写的话就只能自己在加一层代理服务,由代理来进行读写,各客户...

Sqlserver约束

添加表后操作约束--删除约束 altertableaj_testdropconstraintCK__aj_test__userAge__5EBF139D --为表aj_test添加默认...

Sqlserver存储过程拼接sql语句,分页

在写有些存储过程的时候需要进行sql的拼接,然后在使用exec函数执行sql语句注意字符串的拼接,看下面一段存储过程的sql语句...

Sqlserver常用操作

创建临时表createtable#表名() select字段1,字段2....字段ninto#表名from表[where1=1]删除临时表ifOBJECT_ID(&#39;tempdb....

Sqlserver监控sql语句

首先在工具中打开sql server profiler然后登录一下这里可以进行一些常规的筛选,不然监控的sql语句很多的右下方还可以进行...

Sqlserver数据库+DBHelper

原始的ASP.NET数据库查询,所需要的帮助类publicclassDBHelper {//创建全局对象 staticSqlConnectionconn=newSqlConnecti...

Core使用codefirst创建Sqlserver数据库

1.先添加以下程序包Install-PackageMicrosoft.EntityFrameworkCore Install-PackageMicrosoft.EntityFrameworkCore.SqlSer...

Sqlserver ROW_NUMBER 分页

很简单的一个sql语句根据行号分页即可 select * from (select *,ROW_NUMBER() over(order by id) as rownumber from[dbo]....

Sqlserver跨库复制表

sql语句:select*intoResourcefromXJ.[dbo].[Resource]注意主键、外键、约束、触发器、索引都不会被复制,只是数据会被复制...

Sqlserver基础查询

select top 1 from table1 //————返回表中第一条数据 select top 10 percent * from table1 //...

Sqlserver存储过程

什么是存储过程: 预编译的sql语句,可以放很多sql语句,里边可以写条件,循环,可以把一些逻辑放到存储过程里边处理 比如...
这一世以无限游戏为使命!
排名
2
文章
657
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术