zoukankan      html  css  js  c++  java
  • 请问在 .NET Core 中如何让 Entity Framework Core 在日志中记录由 LINQ 生成的SQL语句?






    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 = 0) { 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(" File: {0}, Line: {1} ", 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);
            }
  • 相关阅读:
    洛谷P3886 [JLOI2009]神秘的生物(插头dp)
    Leetcode 842 将数组拆分成斐波那契序列
    Leetcode 08.07 无重复字符串的排列组合
    Leetcode131 分割回文串
    Leetcode 516 最长回文子序列
    Leetcode08.12 N皇后
    Leetcode 813 最大平均值和分组
    Leetcode 79 单词搜索 二维平面上的回溯
    题解 洛谷 P4694 【[PA2013]Raper】
    跳表的基本认识
  • 原文地址:https://www.cnblogs.com/lyl6796910/p/11241071.html
Copyright © 2011-2022 走看看