ASP .NET CORE 6 在项目中集成WatchDog开源项目

概念

WatchDog是一个开源的项目,可以实现对.Net 应用程序和API实现实时应用日志和性能监控平台。可以实现实时记录和查看应用程序中的消息、事件、HTTP请求和响应,以及运行时捕获的异常,有效帮助开发人员去排查应用异常,提升开发效率和减低运维成本。

项目集成

1、安装 WatchDog

可以使用 NuGet 包管理器来安装它:

复制代码
dotnet add package WatchDog
2、配置WatchDog

在程序主入口Pragram.cs里配置:

复制代码
//整合WatchDog:性能异常监控
builder.Services.AddWatchDogServices(option =>
{
    option.IsAutoClear = true;
    option.ClearTimeSchedule = WatchDog.src.Enums.WatchDogAutoClearScheduleEnum.Hourly;
});
builder.Logging.AddWatchDogLogger();
3、启用WatchDog

在Pragram.cs文件里启用WatchDog中间件和配置登录的账号密码:

复制代码
//添加WatchDog
app.UseWatchDogExceptionLogger();
app.UseWatchDog(config =>
{
    config.WatchPageUsername = "admin";
    config.WatchPagePassword = "123456";   
});

app.Run();

运行测试

启动项目运行

访问https://localhost:8085/watchdog 对应自己应用的地址和端口,可以看到WatchDog的登录界面,使用设置的账号密码登录

使用WatchDog功能

踩坑异常解决

异常

如果你运行项目时也出现如下异常:

fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1] An unhandled exception has occurred while executing the request. System.InvalidOperationException: Property 'JsonResult.SerializerSettings' must be an instance of type 'Newtonsoft.Json.JsonSerializerSettings'. at Microsoft.AspNetCore.Mvc.NewtonsoftJson.NewtonsoftJsonResultExecutor.GetSerializerSettings(JsonResult result) at Microsoft.AspNetCore.Mvc.NewtonsoftJson.NewtonsoftJsonResultExecutor.ExecuteAsync(ActionContext context, JsonResult result) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeResultAsync>g__Logged|22_0(ResourceInvoker invoker, IActionResult result) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeResultFilters>g__Awaited|28_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker) at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger) at Microsoft.AspNetCore.Session.SessionMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Session.SessionMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) at WatchDog.src.WatchDog.InvokeAsync(HttpContext context) at WatchDog.src.WatchDogExceptionLogger.InvokeAsync(HttpContext context) at WatchDog.src.WatchDogExceptionLogger.InvokeAsync(HttpContext context) at StackExchange.Profiling.MiniProfilerMiddleware.Invoke(HttpContext context)

解决

这个问题通常出现在 ASP.NET Core 项目中,当项目中使用了 Microsoft.AspNetCore.Mvc.NewtonsoftJson 包来处理 JSON 序列化时,可能会与其他包或配置产生冲突,这里时因为与WatchDog默认的序列化配置冲突,需要设置WatchDog的序列化采用NewtonsoftJson。

代码修复如下,在Pragram.cs文件里启用WatchDog中间件和配置登录的账号密码时,设置WatchDog的序列化为NewtonsoftJson:

复制代码
app.UseWatchDog(config =>
{
    config.WatchPageUsername = "admin";
    config.WatchPagePassword = "123456";
    //设置序列化采用Newtonsoft
    config.Serializer = WatchDog.src.Enums.WatchDogSerializerEnum.Newtonsoft;
});

重新运行,登录WatchDog界面,控制器没有前面的异常打印输出,说明异常已解决修复。

总结:

很好用的一个开源项目,有助于开发者,方便实时记录和查看一些信息。

相关推荐
乱蜂朝王36 分钟前
使用 C# 和 ONNX Runtime 部署 PaDiM 异常检测模型
开发语言·c#
JosieBook2 小时前
【C#】VS中的 跨线程调试异常:CrossThreadMessagingException
开发语言·c#
追雨潮3 小时前
BGE-M3 多语言向量模型实战:.NET C# 从原理到落地
开发语言·c#·.net
CheerWWW4 小时前
GameFramework——Download篇
笔记·学习·unity·c#
格林威6 小时前
ZeroMQ 在视觉系统中的应用
开发语言·人工智能·数码相机·机器学习·计算机视觉·c#·视觉检测
格林威6 小时前
工业相机图像采集:如何避免多相机数据混乱
人工智能·数码相机·opencv·机器学习·计算机视觉·c#·视觉检测
武藤一雄6 小时前
C#万字详解 栈与托管堆 的底层逻辑
windows·microsoft·c#·.net·.netcore
山檐雾7 小时前
C#泛型缓存
缓存·c#
波波0077 小时前
.NET真的被上海信创排除在外?
.net