当前位置: 首页 > news >正文

.NET 6.0 日志处理之Serilog 写入到sql server(一)

.NET 6.0里使用Serilog 写入日志到sql server数据库表。

1、安装依赖包

Serilog:

Serilog.Sinks.MSSqlServer:

Serilog.AspNetCore:

2、添加静态类SerilogConfig

using Serilog;
using Serilog.Sinks.MSSqlServer;
using System.Collections.ObjectModel;
using System.Net;namespace Demo_Serilog.Function;public static class SerilogConfig
{public static void CreateLogger(){try{var filePath = Path.Combine(AppContext.BaseDirectory, "Logs/Serilog/log.txt");var logDB = @"Server=192.168.0.0;Database=DB;User ID=Admin;Password=123456;TrustServerCertificate=true;";var sinkOpts = new MSSqlServerSinkOptions();sinkOpts.TableName = "Logs";sinkOpts.AutoCreateSqlTable = false;sinkOpts.BatchPostingLimit = 100;sinkOpts.BatchPeriod = TimeSpan.FromMilliseconds(1);var columnOpts = new ColumnOptions();columnOpts.Store.Remove(StandardColumn.MessageTemplate);columnOpts.Store.Remove(StandardColumn.Properties);//columnOpts.Properties.ExcludeAdditionalProperties = true;columnOpts.AdditionalColumns = new Collection<SqlColumn>{new SqlColumn{DataType = System.Data.SqlDbType.VarChar, DataLength = -1, ColumnName = "SourceContext"},new SqlColumn{DataType = System.Data.SqlDbType.VarChar, DataLength = 50, ColumnName = "LineId"}};Log.Logger = new LoggerConfiguration().MinimumLevel.Information().Enrich.FromLogContext().Enrich.WithProperty("LineId", "Web").WriteTo.MSSqlServer(connectionString: logDB,sinkOptions: sinkOpts,columnOptions: columnOpts).CreateLogger();}catch (Exception ex){ }     }public static void RefreshLogger(){if (Log.Logger != null){Log.CloseAndFlush();}CreateLogger();}private static string GetIpAddress(){string ipAddress = "127.0.0.1";IPAddress[] ips = Dns.GetHostAddresses(Dns.GetHostName());foreach (IPAddress ip in ips){if (ip.AddressFamily.ToString().ToLower().Equals("internetwork")){ipAddress = ip.ToString();return ipAddress;}}return ipAddress;}
}

3、Program.cs中配

using Demo_Serilog;
using Demo_Serilog.Function;
using Serilog;
using Serilog.Settings.Configuration;SerilogConfig.CreateLogger();
Log.Information("Starting web application");try
{var builder = WebApplication.CreateBuilder(args); //创建一个Web应用程序构建器。LineConsts.InitConfig(builder.Configuration);builder.Host.UseSerilog();//配置Serilog。builder.Services.AddControllers();//向依赖注入容器添加控制器服务。// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbucklebuilder.Services.AddEndpointsApiExplorer(); //用于API文档生成。builder.Services.AddSwaggerGen();//添加Swagger生成器,生成API文档。var app = builder.Build(); //构建Web应用程序。// Configure the HTTP request pipeline.if (app.Environment.IsDevelopment())  //检查当前环境是否是开发环境。{app.UseSwagger(); //启用Swagger中间件,提供API文档UI。app.UseSwaggerUI();}app.UseHttpsRedirection(); //强制使用HTTPS。app.UseAuthorization(); //启用授权中间件。app.MapControllers(); //将控制器映射到路由app.Run(); //运行Web应用程序。
}
catch (Exception ex)
{Log.Fatal(ex, "Web服务异常退出");
}

4、日志表:

5、写入日志测试样例:

using Microsoft.AspNetCore.Mvc;
using Serilog;namespace Demo_Serilog.Controllers
{    [ApiController][Route("[controller]")]public class WeatherForecastController : ControllerBase{private static readonly string[] Summaries = new[]{"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"};public WeatherForecastController(){}[HttpGet(Name = "GetWeatherForecast")]public IEnumerable<WeatherForecast> Get(){try{Log.Information("Get");if (Summaries.Length > 0){throw new Exception("Error Created By SomeOne.");}return Enumerable.Range(1, 5).Select(index => new WeatherForecast{Date = DateTime.Now.AddDays(index),TemperatureC = Random.Shared.Next(-20, 55),Summary = Summaries[Random.Shared.Next(Summaries.Length)]}).ToArray();}catch (Exception ex){Log.Error("Error:" + ex.Message);return Enumerable.Empty<WeatherForecast>();}           }}
}

6、运行结果:

http://www.dtcms.com/a/351615.html

相关文章:

  • OOM问题排查思路及解决方案
  • 【Notepad++免费版下载安装教程(附安装包)2025最新整理】
  • 如何用Wireshark捕获当前房间路由器和主机的数据包
  • iOS 26 正式版即将发布,Flutter 完成全新 devicectl + lldb 的 Debug JIT 运行支持
  • 剖析graph-rag中最核心的一步:切片文本如何输入到大模型并且构建整体的关系
  • 食用油平台:油香里的生活哲学课
  • 使用 Vue 3 <script setup> 语法实现基于 token 的登录功能
  • 100种交易系统(4)顺势回调开仓
  • android多线程与线程间通信
  • python-多线程(笔记)(持续更新)
  • 基于dify+ollama+bge组合搭建本地知识库
  • 10分钟快速搭建 SkyWalking 服务
  • 【Apache MXNet】
  • Med-SA 论文总结
  • Apache Shiro基本使用指南
  • 基于SpringBoot的社团管理系统【2026最新】
  • 《C++ Primer 第五版》initializer_list 涉及到的范围 for 循环(range-based for) 的语义差别
  • 车载铁框矫平机:把“钣金诊所”开到工地上
  • 【软考论文】论原型开发方法及其应用
  • Ubuntu 24.04 LTS 桌面版安装问题记录
  • 2025年8月27日,七月初五,生活指南
  • Python包管理与安装机制详解
  • pytorch-利用letnet5框架深度学习手写数字识别
  • 漫谈《数字图像处理》之霍夫变换发展历程与演进脉络
  • 类似ant design和element ui的八大Vue的UI框架详解优雅草卓伊凡
  • (vue)el-progress左侧添加标签/名称
  • C++学习(4)模板与STL
  • 虚幻5引擎:我们是在创造世界,还是重新发现世界?
  • 8.26 review
  • 【大前端】React统计所有网络请求的成功率、失败率以及统一入口处理失败页面