记录EFCore产生的SQL语句到日志
以下以ABP项目为例子
1, 先创建LoggerProvider
using Microsoft.Extensions.Logging;
using System;
namespace demo
{
public class EfLoggerProvider : ILoggerProvider
{
public Castle.Core.Logging.ILogger Logger;
public EfLoggerProvider(Castle.Core.Logging.ILogger logger)
{
Logger = logger;
}
public ILogger CreateLogger(string categoryName)
{
return new EfLogger(categoryName, Logger);
}
public void Dispose()
{
}
}
public class EfLogger : ILogger
{
public Castle.Core.Logging.ILogger Logger { get; set; }
private readonly string _categoryName;
public EfLogger(string categoryName, Castle.Core.Logging.ILogger logger)
{
this._categoryName = categoryName;
this.Logger = logger;
}
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
//过滤掉了定时任务的日志,读取多语言,记录接口日志等SQL
var logContent = formatter(state, exception);
if (logLevel == LogLevel.Error)
{
Logger.Fatal(logContent); //错误日志
return;
}
//过滤掉定时任务等脚本的日志
if (logContent.Contains("AbpBackgroundJob") || logContent.Contains("AbpLanguage") || logContent.Contains("AbpAuditLog") || logContent.Contains("AbpSetting"))
{
ret

本文介绍如何在EFCore中自定义记录SQL语句到日志的方法,包括创建自定义LoggerProvider和ILogger,并通过DbContextOptionsBuilder配置日志记录。
最低0.47元/天 解锁文章
565

被折叠的 条评论
为什么被折叠?



