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

news2024/11/27 2:22:52

【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.coloradmin.cn/o/1565149.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Paragon NTFS for Mac15直装版2024最新安装包下载

Paragon NTFS for Mac 是一款专为 Mac 用户设计的软件&#xff0c;它解决了 Mac 系统无法直接读写 NTFS 格式硬盘的问题。通过安装这款软件&#xff0c;Mac 用户可以像使用本机磁盘一样&#xff0c;轻松地在 NTFS 格式的硬盘、U 盘等存储设备上读写文件&#xff0c;无需进行任何…

Protobuf 二进制文件学习及解析

0. 简介 protobuf也叫protocol buffer是google 的一种数据交换的格式&#xff0c;它独立于语言&#xff0c;独立于平台。google 提供了多种语言的实现&#xff1a;java、c#、c、go 和 python&#xff0c;每一种实现都包含了相应语言的编译器以及库文件。 由于它是一种二进制的…

【吊打面试官系列】Redis篇 -Redis 最适合的场景?

大家好&#xff0c;我是锋哥。今天分享关于 【Redis 最适合的场景&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; Redis 最适合的场景&#xff1f; Redis 最适合的场景? Redis最适合的场景通常包括以下几点&#xff1a; 缓存系统&#xff1a;Redis提供了快速…

SpringBoot中操作Bean的生命周期的方法

引言 在 Spring Boot 应用中&#xff0c;管理和操作 Bean 的生命周期是一项关键的任务。这不仅涉及到如何创建和销毁 Bean&#xff0c;还包括如何在应用的生命周期中对 Bean 进行精细控制。Spring 框架提供了多种机制来管理 Bean 的生命周期&#xff0c;这些机制使得开发者可以…

应用方案D78040场扫描电路,偏转电流可达1.7Ap-p,可用于中小型显示器

D78040是一款场扫描电路&#xff0c;偏转电流可达1.7Ap-p&#xff0c;可用于中小型显示器。 二 特 点 1、有内置泵电源 2、垂直输出电路 3、热保护电路 4、偏转电流可达1.7Ap-p 三 基本参数 四 应用电路图 1、应用线路 2、PIN5脚输出波形如下&#xff1a;

多态的综合练习

题目要求 Animal类&#xff08;父类&#xff09; package www.jsu.com;public class Animal {private int age;private String color;public Animal() {}public Animal(int age, String color) {this.age age;this.color color;}public int getAge() {return age;}public voi…

数据安全之认识数据库防火墙

文章目录 一、什么是数据库防火墙二、数据库防火墙的主要功能三、数据库防火墙的工作原理四、数据库防火墙如何防护数据库免受SQL注入攻击五、数据库防火墙的部署方式六、数据库防火墙与网络防火墙的关系与区别七、数据库防火墙的应用场景 随着信息技术的快速发展&#xff0c;数…

ubuntu16如何使用高版本cmake

1.引言 最近在尝试ubuntu16.04下编译开源项目vsome&#xff0c;发现使用apt命令默认安装cmake的的版本太低。如下 最终得知&#xff0c;ubuntu16默认安装确实只能到3.5.1。解决办法只能是源码安装更高版本。 2.源码下载3.20 //定位到opt目录 cd /opt 下载 wget https://cmak…

蓝桥杯 - 受伤的皇后

解题思路&#xff1a; 递归 回溯&#xff08;n皇后问题的变种&#xff09; 在 N 皇后问题的解决方案中&#xff0c;我们是从棋盘的顶部向底部逐行放置皇后的&#xff0c;这意味着在任何给定时间&#xff0c;所有未来的行&#xff08;即当前行之下的所有行&#xff09;都还没…

昆仑万维将在4月17日正式开启“天工大模型3.0”的公测,并选择开源,音乐生成大模型“天工SkyMusic”开启内测

&#x1f989; AI新闻 &#x1f680; 昆仑万维发布全球最大MoE模型“天工3.0” 摘要&#xff1a;昆仑万维集团近日通过官方公众号宣布&#xff0c;将在4月17日正式开启“天工大模型3.0”的公测&#xff0c;并选择开源。此版本采用4000亿参数的混合专家模型(MoE)&#xff0c;被…

(echarts)vue中循环生成多个相同的echarts图表,但数据动态、第一次渲染失败问题

(echarts)vue中循环生成多个相同的echarts图表&#xff0c;但数据动态 效果&#xff1a; 代码&#xff1a; <!-- 动态图表 --> <el-row :gutter"20"><el-col v-for"(item,index) in echartsList" :key"index" :span"10&quo…

Android Studio学习7——常用控件view

Android控件 双击shift键——>搜索想要找的文件 Ctrlshift回车——>补全“&#xff1b;”号 CtrlX——>删除一行&#xff0c;只需把鼠标放在那一行 windows自带字体

如何备份极狐GitLab 信任域名证书

本文作者&#xff1a;徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了如何使用极狐GitLa…

深信服:借助观测云实现全链路可观测性

导读 深信服科技股份有限公司 简称「深信服」&#xff08; Sangfor Technologies Inc. &#xff09;&#xff0c;是一家领先的网络安全和云计算解决方案提供商&#xff0c;致力于为全球客户提供高效、智能、安全的网络和云服务。随着公司业务的不断扩展&#xff0c;也面临着监…

超市销售数据-python数据分析项目

Python数据分析项目-基于Python的销售数据分析项目 文章目录 Python数据分析项目-基于Python的销售数据分析项目项目介绍数据分析结果导出数据查阅 数据分析内容哪些类别比较畅销?哪些商品比较畅销?不同门店的销售额占比哪个时间段是超市的客流高封期?查看源数据类型计算本月…

HTML - 请你谈一谈img标签图片和background背景图片的区别

难度级别&#xff1a;中级及以上 提问概率&#xff1a;65% 面试官当然不会问如何使用img标签或者background来加载一张图片&#xff0c;这些知识点都很基础&#xff0c;相信只要从事前端开发一小段时间以后&#xff0c;就可以轻松搞定加载图片…

stream使用

stream流式计算 在Java1.8之前还没有stream流式算法的时候&#xff0c;我们要是在一个放有多个User对象的list集合中&#xff0c;将每个User对象的主键ID取出&#xff0c;组合成一个新的集合&#xff0c;首先想到的肯定是遍历&#xff0c;如下&#xff1a; List<Long> u…

游戏引擎中的物理系统

一、物理对象与形状 1.1 对象 Actor 一般来说&#xff0c;游戏中的对象&#xff08;Actor&#xff09;分为以下四类&#xff1a; 静态对象 Static Actor动态对象 Dynamic Actor ---- 可能受到力/扭矩/冲量的影响检测器 TriggerKinematic Actor 运动学对象 ---- 忽略物理法则…

go: go.mod file not found in current directory or any parent directory.如何解决?

这个错误表明你正在执行 go get 命令&#xff0c;但是当前目录或任何父目录中都找不到 go.mod 文件。这可能是因为你的项目还没有使用 Go Modules 进行管理。 要解决这个问题&#xff0c;有几种方法&#xff1a; go mod init <module-name> 其中 <module-name>…

【力扣】11. 盛最多水的容器

11. 盛最多水的容器 题目描述 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&…