利用在AOP中记录sql日志,是否可以用Task? 返回

老师,发现一个问题,如果在AOP的委托方法中记录日志时,使用了Task.Run的话,会造成整个项目运行的卡顿。您遇到过吗?
热忱回答(8)
-
fate sta VIP0
2024/6/6在这个里面加task.Run
0 回复 -
fate sta VIP0
2024/6/6还有疑问提供DEMO
0 回复 -
历历 VIP0
2024/6/6@fate sta:就是在这里面加的 老师。
public static void OnLogExecutedHandle(string sql, SugarParameter[] pars)
{
Task.Run(() =>
{
// 替换sql语句中的\f\n\r\t\v
//sql = Regex.Replace(sql, @"\s", " ");
// 替换sql语句中的参数,如果要将oracle的日期类型参数前加to_date函数,请使用下面自己写的私有方法ReplaceSQLPars
// 这个方法是sqlsugar自带的,兼容性好,但是性能比较差
string replSql = UtilMethods.GetSqlString(DbType.Oracle, sql, pars);
// 输出Nlog日志
//logger.Info(replSql);
// 通过Eventbus将日志发布到MQ
IntegrationEvent? @event = GetDbLogEventType(replSql, "Info");
if (@event != null)
{
var eventBus = AppHttpContext.GetSerivce<IEventBus>();
eventBus.Publish(@event);
}
// 控制台日志,调试用,正式环境请注释,比较影响性能
Console.WriteLine(replSql + "\r\n");
});
}
去掉Task之后,虽然记日志慢了,但是不影响整体了
0 回复 -
fate sta VIP0
2024/6/6看不出问题,需要DEMO
0 回复 -
历历 VIP0
2024/6/6@fate sta:demo太大,不好提供 老师。写法就是上面的写法,感觉是不出问题,但是加上Task.Run后,确实是记日志虽然快了,但是会造成其他读数据接口十几二十秒的卡顿,去掉Task.Run后,这种情况就好了。 感觉是不是Db对象释放的问题?
0 回复 -
历历 VIP0
2024/6/6@fate sta:用的是单例模式的SqlSugarScope
0 回复 -
fate sta VIP0
2024/6/6@历历:不清楚你的实现task.run 要看你怎么写的,有没有数据库操作等,如果没有数据库操作是不会有影响的
0 回复 -
历历 VIP0
2024/6/6@fate sta:明白,我是通过 Rabbitmq 和 Nlog 向记事本写日志,我再研究下
0 回复