首页 > 编程语言 >Asp.Net Core Serilog日志自定义Sink

Asp.Net Core Serilog日志自定义Sink

时间:2024-07-25 16:06:29浏览次数:15  
标签:Core DatabaseSink Asp 自定义 Sink new 日志 config public

项目的日志框架使用了Serilog,现在有需求要将异常日志记录一份到数据库中。

目前网上可以找到适配各个数据库的Sinkhttps://github.com/serilog/serilog/wiki/Provided-Sinks

但是由于项目需要适配多个不同类型的数据库,故打算自定义一个DatabaseSink,使用SqlSugar进行数据库操作。

创建DatabaseSink

这里使用PeriodicBatchingSink实现批量日志数据写入控制,DatabaseSink只要继承实现IBatchedLogEventSink接口即可。

public class DatabaseSink : IBatchedLogEventSink
{
    private SqlSugarClient _db;

    public DatabaseSink(ConnectionConfig config)
    {
        _db = new SqlSugarClient(config);
    }

    public async Task EmitBatchAsync(IEnumerable<LogEvent> batch)
    {
        var list = batch.Select(d => new SysExceptionLogEntity()
        {
            Level = d.Level.ToString(),
            Message = d.RenderMessage(),
            Exception = d.Exception?.ToString(),
            CreateTime = DateTime.Now,
        }).ToList();

        await _db.Insertable(list).ExecuteCommandAsync();
    }

    public Task OnEmptyBatchAsync()
    {
        return Task.CompletedTask;
    }
}

设置日志批处理参数,日志记录过滤等级

public static LoggerConfiguration DatabaseSink(
      this LoggerSinkConfiguration loggerConfiguration,
      ConnectionConfig config
      )
{
    return loggerConfiguration.Sink(new PeriodicBatchingSink(new DatabaseSink(config), new PeriodicBatchingSinkOptions()
    {
        BatchSizeLimit = 100, // 设置批处理大小
        Period = TimeSpan.FromSeconds(5),// 设置批处理时间
    }), LogEventLevel.Error);
}

配置DatabaseSink

var conn = builder.Configuration.GetSection("DbConfig").Get<ConnectionConfig>();
Log.Logger = new LoggerConfiguration()
    .ReadFrom.Configuration(builder.Configuration)
    .WriteTo.DatabaseSink(conn)
    .CreateLogger();

标签:Core,DatabaseSink,Asp,自定义,Sink,new,日志,config,public
From: https://www.cnblogs.com/cplemom/p/18323422

相关文章

  • 用于用 NotRequired 替换自定义 TypeAlias 的 Mypy 插件
    我想编写一个mypy插件,以便为NotRequired[Optional[T]]引入类型别名。(正如我在这个问题中发现的,不可能用普通的python编写这个类型别名,因为NotRequired在TypedDict定义之外不允许使用。)我的想法是定义一个通用Possibly类型,如......
  • 微信小程序-自定义导航栏
    参考文章:自定义navigationBar顶部导航栏,兼容适配所有机型(附完整案例)|微信开放社区(qq.com)1.设置导航栏样式自定义"navigationStyle":"custom"可以选择在页面json文件设置,也可选择在app.json文件设置,我选择页面配置2.定义想要的导航栏样式.navCustom{position:......
  • 基于jQuery的用户自定义页面
    1.需求在最简单的场景里面,我们需要在用户自定义页面显示一些数据,和输入一些数据。如下源代码:<!--AWP_In_VariableName='"enable_cycle"'--><!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transit......
  • 【正在编辑中...】ENVI56扩展工具:添加自定义光谱指数——以NDWI和NDBSI为例
    本工具适用于ENVI5.6及以上版本(本人测试最低版本为5.6.3)。ENVI内置了上百种指数公式,但是大家在使用过程中肯定会有自定义指数的需求。在之前只能通过波段运算工具实现指数计算,现在可以通过本工具方便的添加自定义光谱指数,然后可以通过如下工具或API使用新指数:光谱指数工具:Too......
  • 自定义菜单未显示在 odoo 门户视图上
    我想在odoo门户视图上显示自定义菜单。XML文件:<?xmlversion="1.0"encoding="UTF-8"?><odoo><data><templateid="portal_my_home_loan"name="PartnerLoan"customize_show="True"inh......
  • vue 2 实现自定义组件一到多个v-model双向数据绑定的方法(转)
    原文链接:https://blog.csdn.net/Dobility/article/details/110147985前言有时候我们需要对一个组件绑定自定义v-model,以更方便地实现双向数据,例如自定义表单输入控件。甚至有时候,我们想要实现绑定多个“v-model”,也就是多个“双向绑定”,例如带表单输入的模块框,想同时控制模态......
  • Exchange、Coremail、Postfix 等主流邮件系统数据存储格式介绍
    本文主要介绍主流邮件系统(如Exchange、Coremail、Postfix)的数据存储格式,旨在帮助大家对邮件系统的底层结构有更深刻的认识。由于小编能力有限,文中难免存在疏漏与不足之处,恳请各位读者指正。1.开源邮件系统数据存储在开放源代码的世界里,主流电子邮件服务主要有Sendmail、Qmai......
  • Flask-WTF:如何在 Flask FormField 中定义自定义变量
    我正在尝试在Flask中设置一个动态表单,其中该表单具有动态填充的FormFieldsFieldList。虽然大部分都有效,但我不断遇到每个FormField的变量问题。我需要每个FormField有一个标签,它是FormField的名称(并在页面上呈现)和一个在显示/隐藏脚本中使用的自定义ID,该脚本使用动态......
  • 一文弄清楚自定义流程表单开发的多个优势特征
    随着行业竞争的激烈化,很多企业都希望实现降本、提质、增效的发展目的。什么样的软件平台可以帮助企业实现这一目标?低代码技术平台、自定义流程表单开发拥有可视化界面、易操作、更灵活等优势特点,在助力降本增效的过程中事半功倍,深得客户喜爱。要了解它的重要性,可以先学习它的定义......
  • 天问物业ERP系统 ContractDownLoad.aspx 任意文件读取漏洞复现
    0x01产品简介天问互联科技有限公司以软件开发和技术服务为基础,建立物业ERP应用系统,向物管公司提供旨在降低成本、保障品质、提升效能为目标的智慧物管整体解决方案,实现物管公司的管理升级;以平台搭建和资源整合为基础,建立社区O2O服务平台,向物管公司提供旨在完善服务、方便业主......