【Entity Framework】EF日志-简单日志记录

【Entity Framework】EF日志-简单日志记录

文章目录

  • 【Entity Framework】EF日志-简单日志记录
    • 一、概述
    • 二、EF日志分类
    • 三、简单的日志记录
      • 3.1 配置
      • 3.2 日志记录到控制台
      • 3.3 记录到凋试窗口
      • 3.4 记录到文件
      • 3.5 敏感数据处理
      • 3.6 详细查询异常
      • 3.6 日志级别
      • 3.7 消息内容和格式设置

在这里插入图片描述

一、概述

Entity Framework Core (EF Core)包含一些用于生成日志,响应事件和获取诊断结果的机制。其中每种机制都针对不同情况进行了定制,务必针对手头上的任务选择最佳机制,即使是多个机制都适用也是如此。本文将介绍EF日志每种机制,及其描述每种机制应用场景。

二、EF日志分类

下表提供了有关此处所述机制之间的差异的快速参考。

序列机制Async范围已注册预期用途
1简单的日志记录按上下文上下文配置开发时日志记录
2Microsoft.Extension.Logging按上下文D.I或上下文配置生产日志记录
3事件按上下文任何时间对 EF 事件做出反应
4拦截器按上下文上下文配置进行 EF 操作
5诊断侦听器进程全局应用程序诊断

Microsoft.Extensions.Logging通常通过依赖项注入在每个应用程序中进行配置。但在EF级别,可使用不同的记录器配置没个上下文。

三、简单的日志记录

Entity Framework Core简单日志记录可用于在开发和调试应用程序时轻松获取日志。这种形式的日志记录只需进行极少的配置,不需要额外的NuGet包。

3.1 配置

可以在配置DbContext实例时使用LogTo从任意类型的应用程序访问EF Core日志。此配置通常通过替代DbContext.OnConfiguring来完成。

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)=> optionsBuilder.LogTo(Console.WriteLine);

或者,可将LogTo作为AddDbContext的一部分来调用,或者在创建DbContextOptions实例以传递给DbContext构造函数时进行调用。

当使用 AddDbContext 或将 DbContextOptions 实例传递给 DbContext 构造函数时,仍会调用 OnConfiguring。 这使得它成为应用上下文配置的理想位置,而无需考虑如何构造 DbContext。

3.2 日志记录到控制台

LogTo需要一个接受字符串Action<T>委托。EF Core将使用字符串为生成的每条日志消息调用此委托。然后由该委托对给定消息执行某些操作。

此委托通常使用Console.WriteLine方式,如上所示。这导致每条日志消息都被写入控制台。

3.3 记录到凋试窗口

Debug.WriteLine可用于将输出发送到Visual Studio或其他IDE中凋试窗口。在这种情况下必须使用Lambda语法,因此Debug类是从发布版本编译的。

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)=> optionsBuilder.LogTo(message => Debug.WriteLine(message));

3.4 记录到文件

写入文件时,需要为文件创建SteamWriter或相似的类。然后可以像上面的其他示例一样使用WriteLine方法。请记住,通过在释放上下文时是否编写器来确保文件完全关闭。示例:

private readonly StreamWriter _logStream=new StreamWriter("mylog.txt",append:true);
protected override void OnConfiguring(DbContextOptionsBuilder optionBuilder)
{optionBuilder.LogTo(_logStream.WriteLine);
}
public override void Dispose()
{base.Dispose();_logStream.Dispose();
}
public override async ValueTask DisposeAsync()
{await base.DisposeAsync();await _logStream.DisposeAsync();
}

3.5 敏感数据处理

默认情况下,EF Core不会在异常消息中包含任何数据的值。这是因为这些数据可能是机密数据,如果不处理异常,可能会在生产使用中泄露这些数据。

但是,了解数据值(尤其是键值)在凋试时非常有用。可以通过调用EnableSensitiveDataLogging()在EF Core中启用此功能。

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{optionsBuilder.LogTo(Console.WriteLine).EnableSensitiveDataLogging();   
}        

3.6 详细查询异常

出于性能原因,EF Core不会在try-catch块中包装每个调用以数据库提供程序读取值。但是,这有时会导致难以诊断的异常,尤其是当数据库在模型下允许的情况下返回NULL时。

启用EnableDetailedErrors将导致EF引入这些try-catch块,从而提供更详细的错误。例如:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{optionsBuilder.LogTo(Console.WriteLine).EnableDetailedErrors();
}

3.6 日志级别

系统会为每条EF Core日志消息分配由LogLevel枚举定义的级别。默认情况下,EF Core简单日志记录包括Debug级别或高级版的每条消息。LogTo可以传递一个更高的最低级别来筛选掉某些消息。

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)=> optionsBuilder.LogTo(Console.WriteLine, LogLevel.Information);

3.7 消息内容和格式设置

LogTo 中的默认内容跨多行设置格式。 第一行包含消息元数据:

  • LogLevel作为四字符前缀
  • 本地时间戳,针对当前域性设置格式
  • EventId,采用可以复制/粘贴以从CoreEventId或其他EventId类之一获取成员的格式,外加原始ID值。
  • 事件类别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/295479.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Scala开发Spark ML的ALS推荐模型实战

推荐系统&#xff0c;广泛应用到电商&#xff0c;营销行业。本文通过Scala&#xff0c;开发Spark ML的ALS算法训练推荐模型&#xff0c;用于电影评分预测推荐。 算法简介 ALS算法是Spark ML中实现协同过滤的矩阵分解方法。 ALS&#xff0c;即交替最小二乘法&#xff08;Alte…

Java SpringBoot中优雅地判断一个对象是否为空

在Java中&#xff0c;可以使用以下方法优雅地判断一个对象是否为空&#xff1a; 使用Objects.isNull()方法判断对象是否为空&#xff1a; import java.util.Objects;if (Objects.isNull(obj)) {// obj为空的处理逻辑 }使用Optional类优雅地处理可能为空的对象&#xff1a; impo…

Centos8/linux/虚拟机安装docker

docker分为ce版和ee版&#xff0c;个人使用ce版就行了&#xff0c;别问为什么&#xff0c;问就是ee版收费。 这是在线版的&#xff0c;离线版的请参考Centos8离线下载安装docker 1.首先切换到root用户 2.为确保安装时出现不必要的问题&#xff0c;先更新一下yum包 sudo yum…

Mac上Matlab_R2023b ARM 版 启动闪退(意外退出)解决方法

安装好后&#xff0c;使用 "libmwlmgrimpl.dylib" 文件替换掉"/Applications/Matlab_R2023b.app/bin/maca64/matlab_startup_plugins/lmgrimpl"文件夹下的同名文件 在终端下执行如下命令&#xff1a; codesign --verbose --force --deep -s - /Applicat…

大数据学习第十二天(hadoop概念)

1、服务器之间数据文件传递 1&#xff09;服务器之间传递数据&#xff0c;依赖ssh协议 2&#xff09;http协议是web网站之间的通讯协议&#xff0c;用户可已通过http网址访问到对应网站数据 3&#xff09;ssh协议是服务器之间&#xff0c;或windos和服务器之间传递的数据的协议…

golang和Java的简单介绍和对比

一、golang 1、Golang简介 Golang&#xff0c;也称为Go&#xff0c;是由Google公司在2009年推出的开源编程语言&#xff0c;由罗伯特格瑞史莫(Rob Pike)、肯汤普逊(Ken Thompson)、罗勃派克(Robert Griesemer)等人设计。Go语言的目标是在保持简单高效的编程模型的同时&#xf…

Linux系统----------探索mysql数据库MHA高可用

目录 一、MHA概述 1.1 什么是 MHA 1.2MHA 的组成 1.2.1MHA Node&#xff08;数据节点&#xff09; 1.2.2MHA Manager&#xff08;管理节点&#xff09; 1.3MHA 的特点 1.4MHA工作原理 1.5数据同步的方式 1.5.1同步复制 1.5.2异步复制 1.5.3半同步复制 二、搭建 MySQ…

ios 之 netty版本swiftNio(TLSHandler 创建)

SwiftNio 简介 用于高性能协议服务器和客户端的事件驱动、无阻塞的网络应用程序框架。 SwiftNIO是一个跨平台异步事件驱动的网络应用程序框架&#xff0c;用于快速开发可维护的高性能协议服务器和客户端。 这就像Netty&#xff0c;但是为Swift写的。 Xcode引入swiftNio 在实…

蓝桥杯第八届c++大学B组详解

目录 1.购物单 2.等差素数列 3.承压计算 4.方格分割 5.日期问题 6.包子凑数 7.全球变暖 8.k倍区间 1.购物单 题目解析&#xff1a;就是将折扣字符串转化为数字&#xff0c;进行相加求和。 #include<iostream> #include<string> #include<cmath> usin…

git源码泄露

Git 源码泄露 开发人员会使用 git 进行版本控制&#xff0c;对站点自动部署。但如果配置不当&#xff0c;可能会将 .git 文件夹直接部署到线上环境&#xff0c;这就引起了 git 泄露漏洞&#xff0c;我们可以利用这个漏洞直接获得网页源码。 确定是否存在泄漏 &#xff08;1&…

自动驾驶的世界模型:综述

自动驾驶的世界模型&#xff1a;综述 附赠自动驾驶学习资料和量产经验&#xff1a;链接 24年3月澳门大学和夏威夷大学的论文“World Models for Autonomous Driving: An Initial Survey”。 在快速发展的自动驾驶领域&#xff0c;准确预测未来事件并评估其影响的能力对安全性…

视频汇聚/安防监控/视频存储EasyCVR平台EasyPlayer播放器更新:新增【性能面板】

视频汇聚/安防监控/视频存储平台EasyCVR基于云边端架构&#xff0c;可以在复杂的网络环境中快速、灵活部署&#xff0c;平台视频能力丰富&#xff0c;可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云…

从零开始,构建智慧企业:人事管理软件新升级全攻略

本文从智能化人事管理的六大核心要素探讨如何打造一个适应现代企业需求的智能化人事管理系统&#xff0c;并介绍几款市场上表现优秀的人事管理软件。 随着我国经济的发展&#xff0c;企业全球化是大势所趋&#xff0c;难免会出现跨国员工数量增加、办公地点分散、跨部门协作等…

重学SpringBoot3-SpringBoot可执行JAR的原因

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-SpringBoot可执行JAR的原因 Spring Boot可执行JAR的结构打包运行JAR 包内部结构 工作原理优点总结 Spring Boot 的一个核心特性是它的可执行 JAR&#x…

Canvas实现数字电子时钟(带粒子掉落效果)

前置知识 Canvas实现简易数字电子时钟 效果 逻辑代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>粒子时钟</title><style>body {margin: 0;overflow: hidden}</style> </…

Redis开源协议调整,我们怎么办?

2024年3月20日, Redis官方宣布&#xff0c;从 Redis 7.4版本开始&#xff0c;Redis将获得源可用许可证 ( RSALv2 ) 和服务器端公共许可证 ( SSPLv1 ) 的双重许可&#xff0c;时间点恰逢刚刚完成最新一轮融资&#xff0c;宣布的时机耐人寻味。 Redis协议调整&#xff0c;对云计算…

Nginx三大常用功能“反向代理,负载均衡,动静分离”

注意&#xff1a;以下案例在Windows系统计算机作为宿主机&#xff0c;Linux CentOS 作为虚拟机的环境中实现 一&#xff0c;Nginx配置实例-反向代理 1.反向代理 案例一 实现效果&#xff1a;使用nginx反向代理&#xff0c;访问 www.123.com 直接跳转到127.0.0.1:8080 准备工…

Golang Context是什么

一、这篇文章我们简要讨论Golang的Context有什么用 1、首先说一下Context的基本作用&#xff0c;然后在讨论他的实现 (1)数据传递&#xff0c;子Context只能看到自己的和父Context的数据&#xff0c;子Context是不能看到孙Context添加的数据。 (2)父子协程的协同&#xff0c;比…

vue两个特性和什么是MVVM

一、什么是vue 1.构建用户界面 用vue往html页面中填充数据&#xff0c;非常的方便 2.框架 框架是一套线成的解决方案 vue的指令、组件&#xff08;是对ui结构的复用&#xff09;、路由、vuex 二、vue的特性 1.数据驱动视图 2.双向数据绑定 1.数据驱动视图 数据的变化会驱动…

面试题 之 vue

1.vue里怎样实现双向数据绑定&#xff1f; Viewmodel 中的Domlisteners 工具会帮我们检测页面上Dom元素的变化&#xff0c;如果有变化&#xff0c;则更改Model中的数据&#xff0c;更新model中的数据时&#xff0c;数据事件绑定工具会帮我们更新页面中的Dom元素 2.Vue的响应式原…