关于MVC+dapper 记录SQL日志的问题
公司有个项目底层用的dapper,现在需要记录SQL日志,请问如何获取dapper最后执行的sql进行记录...
公司有个项目底层用的dapper,现在需要记录SQL日志,请问如何获取dapper最后执行的sql进行记录
展开
展开全部
可以参考dapper源码,或者反编译一下dapper.dll,在dapper之上再封装一层拓展方法,正好最近我也在做这个,下面代码可以参考一下:
using Dapper;
//封装的拓展类
public static class DapperExtension
{
public static int CExecute(this IDbConnection cnn, string sql, object param = null, IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null)
{
var beginTime = DateTime.Now;
return SqlMapper.Execute(cnn, sql, param, transaction, commandTimeout, commandType).ToLog(sql,param, beginTime);
}
public static int CExecute(this IDbConnection cnn, CommandDefinition command)
{
var beginTime = DateTime.Now;
return SqlMapper.Execute(cnn, command).ToLog(command.CommandText,command.Parameters,beginTime);
}
……
}
//日志记录拓展方法
private static T ToLog<T>(this T result, string sql, object param, DateTime beginTime, IDbConnection conn =null)
{
//日志记录要异步进行,防止日志记录时报错,影响业务流程
Task.Run(()=> {
var now = DateTime.Now;
var log = new LogModel()
{
CreateTime = now,
SqlStr = sql,
ExcuteResult = result.ToJsonString(),
Timespan = (now - beginTime).TotalMilliseconds
};
if (param != null)
{
foreach (var p in param.GetType().GetProperties())
{
log.SqlStr=log.SqlStr.Replace("@"+p.Name,p.GetValue(param).ToString());
}
}
//日志记录到MongoDB中
MongoDbHelper.SetCollection(log, "Log_"+ now.ToString("yyyyMMdd"), "ExcuteLog");
});
return result;
}
//调用示例:
public int GetInfo(string sql, object param = null)
{
var connStr="....";//数据库连接字符串
using (var conn = new MySqlConnection(connStr))
{
var result = conn.CExecute(sql, param);
return result;
}
}
TableDI
2024-07-18 广告
2024-07-18 广告
VLOOKUP 是 Excel 中一个非常实用的函数,它允许用户在一个区域或表格的首列中查找特定值,并返回同一行中指定列中的值。当进行跨表匹配时,你可以使用 VLOOKUP 函数将两个不同表格中的数据关联起来。通过指定查找值、表格数组、列号...
点击进入详情页
本回答由TableDI提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询