c# - 发生错误时,让 Azure Insights 记录入口方法(如果不是所有方法)的请求有效负载的方法?
问题描述
因此,我一直在尝试找出在多个 API 中抛出错误时记录有效负载的方法。但问题是我正在处理大量端点并且手动记录每个端点并编写一个 try catch 充其量似乎是噩梦。
谢谢。
解决方案
使用中间件在请求通过全局 try { //AI Log request info } catch { //AI Log error } 到达控制器/操作 API 之前拦截请求
以 .NET 4.5 Owin 中间件为例:
public class LogGlobalErrorMiddleware : OwinMiddleware
{
private readonly OwinMiddleware _Next;
private readonly ILog _logger;
/// <summary>
/// Ctror
/// </summary>
/// <param name="next"></param>
/// <param name="healthCheck"></param>
public LogGlobalErrorMiddleware(OwinMiddleware next, ILog logger) : base(next)
{
this._Next = next;
this._logger = logger;
}
public async override Task Invoke(IOwinContext context)
{
await LogGlobalError(context);
}
/// <summary>
/// Middleware logic to log global errors in our microservice
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
private async Task LogGlobalError(IOwinContext context)
{
try
{
//Moving through pipeline
await Next.Invoke(context);
}
catch (Exception ex)
{
_logger.Error(ex, "An unhandled exception happened! ");
}
}
}
推荐阅读
- python - 使用 mpi4py 在计算集群上并行化“for”循环
- sass - 使用 Bootstrap SASS mixins 来支持浏览器
- wordpress - 使用 rediect 301 从 URL 中删除文件夹
- r - 根据另一列删除一列中的重复项
- python - 与替换 Python 匹配的最近邻
- c++ - cout 可以抛出异常吗?
- r - 使用字符串查找唯一行并对数据框列的相应值求和
- node.js - Mongo 使用 req.query.id 节点查找 id
- tfs - 如何在自定义 TFS 小部件中引入节点模块?
- python - MySQL 语句 python 转义单引号 '