using dotNET.Core;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text; namespace dotNET.EFCoreRepository
{
/// <summary>
/// ef 日志
/// </summary>
public class EFLoggerProvider : ILoggerProvider
{
public ILogger CreateLogger(string categoryName) => new EFLogger(categoryName);
public void Dispose() { }
} /// <summary>
///
/// </summary>
public class EFLogger : ILogger
{
private readonly string categoryName; public EFLogger(string categoryName) => this.categoryName = categoryName; public bool IsEnabled(LogLevel logLevel) => true; public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
{
//ef core执行数据库查询时的categoryName为Microsoft.EntityFrameworkCore.Database.Command,日志级别为Information
if (categoryName == "Microsoft.EntityFrameworkCore.Database.Command"
&& logLevel == LogLevel.Information)
{
var logContent = formatter(state, exception);
NLogger.Debug(logContent);
//TraceMessage("Something happened.");
// NLogger.Info(GetCodeLineAndFileName());
//TODO: 拿到日志内容想怎么玩就怎么玩吧
Console.WriteLine();
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine(logContent);
Console.ResetColor();
}
} public IDisposable BeginScope<TState>(TState state) => null; public void TraceMessage(string message,
[System.Runtime.CompilerServices.CallerMemberName] string memberName = "",
[System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "",
[System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = )
{
NLogger.Debug("message: " + message);
NLogger.Debug("member name: " + memberName);
NLogger.Debug("source file path: " + sourceFilePath);
NLogger.Debug("source line number: " + sourceLineNumber);
} public string GetCodeLineAndFileName()
{
StackTrace insStackTrace = new StackTrace(true);
var insStackFrames = insStackTrace.GetFrames();
string str = "";
foreach(var insStackFrame in insStackFrames)
{
str += String.Format("\nFile: {0}, Line: {1}\n", insStackFrame.GetFileName(), insStackFrame.GetFileLineNumber());
}
return str;
} }
}

第一步: 添加日志类

第二步:OnConfiguring  方法添加日志调用

   protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var loggerFactory = new LoggerFactory();
loggerFactory.AddProvider(new EFLoggerProvider());
optionsBuilder.UseLoggerFactory(loggerFactory);
base.OnConfiguring(optionsBuilder);
}

最新文章

  1. 如何卸载重装docker?
  2. ligerDialog的使用
  3. 解决treeview未选中时,默认选中首个根节点的问题!
  4. R语言的一些笔记
  5. Bzoj 1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐 深搜,bitset
  6. codeforces C. Ryouko&#39;s Memory Note
  7. 重装系统后搭建php环境
  8. [折腾纪实]JAVA的坑
  9. 迷宫 洛谷 p1605
  10. tomcat-users.xml 配置
  11. redis 3.2 新数据结构:quicklist、String的embstr与raw编码方式分界点
  12. python设计模式第六天【原型模式】
  13. UI与开发的必备神器!— iDoc一键适配不同平台尺寸(iDoc201902-2新功能)
  14. [LeetCode] 307. Range Sum Query - Mutable 解题思路
  15. 用CSS画基本图形
  16. L312 难看懂的
  17. ace admin
  18. Solr搜索结果说明 (转)
  19. javascript读取xml文件读取节点数据的例子
  20. [django] Deploy Django Applications Using uWSGI and Nginx on Ubuntu 14.04

热门文章

  1. Docker版zabbix
  2. Ueditor 自动设置上传图片的宽度或高度
  3. 一些坑 Java 执行命令行命令 Spring Boot 打包为jar ResourceUtils.getFile 等出现的问题
  4. discuz x3.3门户出现关键词和描述显示“首页”的解决方法
  5. python连接redis哨兵集群
  6. MapTask工作机制
  7. 装饰器vue-property-decorator
  8. spring:过滤器和拦截器
  9. Linux中tune2fs命令的-o选项
  10. 网络命令——write、wall、ping、ifconfig、mail