首页 > 解决方案 > 发生错误时,让 Azure Insights 记录入口方法(如果不是所有方法)的请求有效负载的方法?

问题描述

因此,我一直在尝试找出在多个 API 中抛出错误时记录有效负载的方法。但问题是我正在处理大量端点并且手动记录每个端点并编写一个 try catch 充其量似乎是噩梦。

谢谢。

标签: c#azureexception

解决方案


使用中间件在请求通过全局 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! ");
            }

        }


    }

推荐阅读