欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 培训 > .NET 9.0 的 Blazor Web App 项目,自定义日志 TLog V2 使用备忘

.NET 9.0 的 Blazor Web App 项目,自定义日志 TLog V2 使用备忘

2025/2/22 2:10:51 来源:https://blog.csdn.net/cqths/article/details/145602402  浏览:    关键词:.NET 9.0 的 Blazor Web App 项目,自定义日志 TLog V2 使用备忘

一、TLog V1 使用静态数据库上下文,优点是速度快,缺点是内存占用大,参见 .NET 9.0 的 Blazor Web App 项目、Bootstrap Blazor 组件库、自定义日志 TLog 使用备忘_navigationmanager.tobaserelativepath-CSDN博客

 

二、 TLog V2 改为 依赖注入 方式,优点、缺点 与 V1 相反,使用方法与 V1 相同。

namespace BlazorWebAppNet9Shared.Services;using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using System.ComponentModel.DataAnnotations;/// <summary>
/// TLog 日志服务:首次使用 自动创建 数据库和数据表。<br/><br/>
/// 使用示例,第1步:Program.cs 中,注册服务,builder.Services.AddTLog();<br/>
/// 使用示例,第2步:TLog.Page(UserName, DisplayName, NavigationManager.ToBaseRelativePath(NavigationManager.Uri));
/// </summary>
public static class TLog
{private static DbContextOptions<TLogDbContext>? contextOptions;/// <summary>/// 注册 TLog 服务,示例:builder.Services.AddTLog();/// </summary>/// <param name="services"></param>/// <param name="dbType"></param>/// <param name="connectionString"></param>/// <returns></returns>public static IServiceCollection AddTLog(this IServiceCollection services, TLogDbType dbType = TLogDbType.Sqlite, string connectionString = "Data Source=SQLiteFileTLog.db"){switch (dbType){case TLogDbType.SqlServer://注册 日志上下文services.AddDbContext<TLogDbContext>(options => options.UseSqlServer(connectionString));//记录 DbContextOptions 其他方法使用contextOptions = new DbContextOptionsBuilder<TLogDbContext>().UseSqlServer(connectionString).Options;break;default:services.AddDbContext<TLogDbContext>(options => options.UseSqlite(connectionString));contextOptions = new DbContextOptionsBuilder<TLogDbContext>().UseSqlite(connectionString).Options;break;}// 自动创建数据库和数据表:修改实体定义后,删除原有的数据库自动重新建立;或者根据实体定义手动修改数据库和数据表。using var tLogDbContext = new TLogDbContext(contextOptions);if (tLogDbContext.Database.EnsureCreated()){TLog.Info("初始化数据库:成功!");TLog.Console("初始化数据库:成功!");}return services;}/// <summary>/// 等价:System.Console.WriteLine($"TLog————{输出信息}")/// </summary>/// <param name="输出信息"></param>public static void Console(string? 输出信息){System.Console.WriteLine($"TLog————{输出信息}");}/// <summary>/// 操作类型 = TLogOpStyle.其他信息/// </summary>/// <param name="用户名"></param>/// <param name="姓名"></param>/// <param name="操作对象"></param>/// <param name="操作说明"></param>public static void Info(string 用户名, string 姓名, string 操作对象 = "", string 操作说明 = ""){using var tLogDbContext = new TLogDbContext(contextOptions!);tLogDbContext.Add(new TLogEntity() { 操作类型 = TLogOpStyle.其他信息, 用户名 = 用户名, 姓名 = 姓名, 操作对象 = 操作对象, 操作说明 = 操作说明 });tLogDbContext.SaveChanges();tLogDbContext.Dispose();}/// <summary>/// 操作类型 = TLogOpStyle.其他信息/// </summary>/// <param name="操作说明"></param>public static void Info(string 操作说明){using var tLogDbContext = new TLogDbContext(contextOptions!);tLogDbContext.Add(new TLogEntity() { 操作类型 = TLogOpStyle.其他信息, 用户名 = "用户名", 姓名 = "姓名", 操作对象 = "", 操作说明 = 操作说明 });tLogDbContext.SaveChanges();tLogDbContext.Dispose();}/// <summary>/// 操作类型 = TLogOpStyle.页面访问/// </summary>/// <param name="用户名"></param>/// <param name="姓名"></param>/// <param name="操作对象"></param>public static void Page(string 用户名, string 姓名, string 操作对象){using var tLogDbContext = new TLogDbContext(contextOptions!);tLogDbContext.Add(new TLogEntity() { 操作类型 = TLogOpStyle.页面访问, 用户名 = 用户名, 姓名 = 姓名, 操作对象 = 操作对象 });tLogDbContext.SaveChanges();tLogDbContext.Dispose();}/// <summary>/// 操作类型 = TLogOpStyle.新建/// </summary>/// <param name="用户名"></param>/// <param name="姓名"></param>/// <param name="操作对象"></param>/// <param name="操作说明"></param>/// <param name="操作结果"></param>public static void Create(string 用户名, string 姓名, string 操作对象, string 操作说明 = "", bool 操作结果 = true){using var tLogDbContext = new TLogDbContext(contextOptions!);tLogDbContext.Add(new TLogEntity() { 操作类型 = TLogOpStyle.新建, 用户名 = 用户名, 姓名 = 姓名, 操作对象 = 操作对象, 操作说明 = 操作说明, 操作结果 = 操作结果 });tLogDbContext.SaveChanges();tLogDbContext.Dispose();}/// <summary>/// 操作类型 = TLogOpStyle.删除/// </summary>/// <param name="用户名"></param>/// <param name="姓名"></param>/// <param name="操作对象"></param>/// <param name="操作说明"></param>/// <param name="操作结果"></param>public static void Delete(string 用户名, string 姓名, string 操作对象, string 操作说明 = "", bool 操作结果 = true){using var tLogDbContext = new TLogDbContext(contextOptions!);tLogDbContext.Add(new TLogEntity() { 操作类型 = TLogOpStyle.删除, 用户名 = 用户名, 姓名 = 姓名, 操作对象 = 操作对象, 操作说明 = 操作说明, 操作结果 = 操作结果 });tLogDbContext.SaveChanges();tLogDbContext.Dispose();}/// <summary>/// 操作类型 = TLogOpStyle.编辑/// </summary>/// <param name="用户名"></param>/// <param name="姓名"></param>/// <param name="操作对象"></param>/// <param name="操作说明"></param>/// <param name="操作结果"></param>public static void Update(string 用户名, string 姓名, string 操作对象, string 操作说明 = "", bool 操作结果 = true){using var tLogDbContext = new TLogDbContext(contextOptions!);tLogDbContext.Add(new TLogEntity() { 操作类型 = TLogOpStyle.编辑, 用户名 = 用户名, 姓名 = 姓名, 操作对象 = 操作对象, 操作说明 = 操作说明, 操作结果 = 操作结果 });tLogDbContext.SaveChanges();tLogDbContext.Dispose();}/// <summary>/// 操作类型 = TLogOpStyle.查询/// </summary>/// <param name="用户名"></param>/// <param name="姓名"></param>/// <param name="操作对象"></param>/// <param name="操作说明"></param>/// <param name="操作结果"></param>public static void Read(string 用户名, string 姓名, string 操作对象, string 操作说明 = "", bool 操作结果 = true){using var tLogDbContext = new TLogDbContext(contextOptions!);tLogDbContext.Add(new TLogEntity() { 操作类型 = TLogOpStyle.查询, 用户名 = 用户名, 姓名 = 姓名, 操作对象 = 操作对象, 操作说明 = 操作说明, 操作结果 = 操作结果 });tLogDbContext.SaveChanges();tLogDbContext.Dispose();}}/// <summary>
/// 日志数据库上下文:建议使用独立数据库,与业务数据分开存放。
/// </summary>
/// <param name="options"></param>
public class TLogDbContext(DbContextOptions<TLogDbContext> options) : DbContext(options)
{public DbSet<TLogEntity> TLogEntitys { get; set; }
}/// <summary>
/// 日志实体:后续可以根据需要增加,注意不要编辑、删除已有属性。
/// </summary>
[Index(nameof(Id))]
[Index(nameof(时间))]
[Index(nameof(用户名))]
[Index(nameof(姓名))]
[Index(nameof(操作类型))]
[Index(nameof(操作对象))]
[Index(nameof(操作类型), nameof(操作对象))]
public class TLogEntity
{[Key]public long Id { get; set; }public DateTime 时间 { get; set; } = DateTime.Now;public required string 用户名 { get; set; }public required string 姓名 { get; set; }public TLogOpStyle 操作类型 { get; set; } = TLogOpStyle.页面访问;public required string 操作对象 { get; set; }public string 操作说明 { get; set; } = "";public bool 操作结果 { get; set; } = true;
}/// <summary>
/// 日志类型:后续可以根据需要增加,注意不要编辑、删除已有类型。
/// </summary>
public enum TLogOpStyle
{/// <summary>/// 记录页面访问日志:Page/// </summary>页面访问,/// <summary>/// 增删改查CRUD:Create/// </summary>新建,/// <summary>/// 增删改查CRUD:Read/// </summary>查询,/// <summary>/// 增删改查CRUD:Update/// </summary>编辑,/// <summary>/// 增删改查CRUD:Delete/// </summary>删除,/// <summary>/// Information:Info/// </summary>其他信息
}
/// <summary>
/// 日志使用数据库类型:默认使用 Sqlite
/// </summary>
public enum TLogDbType
{/// <summary>/// 使用 SQL Server database/// </summary>SqlServer,/// <summary>/// 使用 SQLite database/// </summary>Sqlite
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词