首页 > 其他分享 >.net 8中使用过滤器记录系统日志 ActionFilter+Serilog

.net 8中使用过滤器记录系统日志 ActionFilter+Serilog

时间:2024-05-07 16:13:50浏览次数:20  
标签:ActionFilter Serilog RouteValues controller ActionDescriptor context action 日志 

1、添加自定义日志过滤器类

using Serilog;
using Microsoft.AspNetCore.Mvc.Filters;

namespace ADTO.CMS.Common.Filter
{
/// <summary>
/// 日志记录过滤器
/// </summary>
public class LogActionFilter : IActionFilter
{
/// <summary>
/// 在动作执行前记录日志
/// </summary>
/// <param name="context"></param>
public void OnActionExecuting(ActionExecutingContext context)
{
Log.Information("Starting action {ActionName} on controller {ControllerName}",
context.ActionDescriptor.RouteValues["action"],
context.ActionDescriptor.RouteValues["controller"]);
}

/// <summary>
/// 动作完成后
/// </summary>
/// <param name="context"></param>
public void OnActionExecuted(ActionExecutedContext context)
{
if (context.Exception != null)
{
// 如果发生异常,记录错误日志
Log.Error(context.Exception, "An error occurred in action {ActionName} on controller {ControllerName}",
context.ActionDescriptor.RouteValues["action"],
context.ActionDescriptor.RouteValues["controller"]);
}
else
{
// 在动作执行后记录日志
Log.Information("Completed action {ActionName} on controller {ControllerName} with status code {StatusCode}",
context.ActionDescriptor.RouteValues["action"],
context.ActionDescriptor.RouteValues["controller"],
context.HttpContext.Response.StatusCode);
}
}
}
}

 

2、在Program中注入日志过滤器

#region 日志过滤器
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Console()
.WriteTo.File("logs/myapp.txt", rollingInterval: RollingInterval.Day)  //写入文本文件
.CreateLogger();

builder.Services.AddControllers(options =>
{
options.Filters.Add(typeof(LogActionFilter));
});
#endregion

标签:ActionFilter,Serilog,RouteValues,controller,ActionDescriptor,context,action,日志,
From: https://www.cnblogs.com/liaer/p/18177574

相关文章

  • 在Linux中,如何查看系统日志?
    在Linux中查看系统日志有多种方法,主要取决于你的Linux发行版和所使用的日志管理系统。以下是几种常见的查看系统日志的方法:1.使用journalctl(Systemd日志系统)对于使用Systemd作为初始化系统的现代Linux发行版(如Ubuntu22.04及以后、Fedora、CentOS7及以上版本等),journalctl是......
  • simpread-课程 27:系统日志之 ILogger 与 Log4Net
    一、ILogger介绍1.1简介ILogger是.NET框架提供的一个接口,用于统一不同日志库的调用方式。ILogger本身并不提供具体的日志记录功能,而是通过实现它的类来执行这些操作。所以我们可以借助第三方日志库或自定义实现ILoggerProvider,将日志消息写入到文件、控制台或数据库中,也......
  • Serilog简单使用指南
    Serilog是.net平台上的一个记录程序诊断信息的日志框架,主要工作内容是决定将日志内容以何种格式保存到外部存储介质中(可以是控制台、文件、数据库和第三方日志服务)。除此之外还有NLog和Log4Net等类似的日志框架。Serilog的优点是在云服务厂商中有支持Serilog的插件可以直接使用,而......
  • Serilog
    一、简介    Serilog,Microsoft.NET的结构化日志记录库,Checkout.com.NET首选日志记录库。支持各种日志记录目的地(接收器)包从标准控制台和基于文件的接收器到日志服务,如Datadog。二、包    常用的Nuget安装包如下:Serilog:主包Serilog.AspNetCore:Core环境......
  • 对比.Net平台下三大日志库:Serilog、log4net和NLog
    原文链接:Serilog,log4netandNLogComparison:LoggingLibrariesfor.NETApplications(bytehide.com)译者前言:最近在搭建一套自己用的后端开发的架构,涉及到日志系统的选型,一番检索下找到了这篇文章,还算比较新,翻译过来跟大家分享一下。这篇文章运用了大量的比喻,不知道各位是......
  • java使用注解实现系统日志记录
    不论在神魔类型的项目中,日志系统绝对是一个不可少的存在,那么,怎末用一个最简便的方式来实现日志在数据库中的存储呢??最近在项目中正好负责了日志模块的实现,就简单记录一下。我在这个项目中使用的是aop自定义注解的方式,大致步骤如下:1.第一步,首先需要先定义一个注解类,来实现部分方法......
  • Serilog 日志记录库
    Serilog是一个.NET平台上的强大的日志记录库。它提供了丰富的API以及可插拔的日志格式化器和输出器,使得在.NET应用程序中实现可定制化的、可扩展的日志记录变得轻而易举。在本文中,我们将探讨Serilog的一些基础知识、API、配置和示例。基础知识日志级别Serilog支持多......
  • .Net Core微服务 - Serilog+Seq记录日志
    Serilog介绍Serilog是用于.NET应用程序的诊断日志记录库。它易于设置,具有干净的API,并且可以在所有最新的.NET平台上运行。Serilog通过NuGet分发,项目包括一个Seirlog核心项目Seirlog和很多接收器sinks(超过100个),这些接收是通过插件的方式来实现将日志写入到各种终端、文件......
  • 不通过 Host 将 Serilog 转换成 ILogger
    安装SerilogpublicstaticclassLoggerExtension{publicstaticILogger<T>CreateLogger<T>(){varlogPath="log.txt";conststringoutputTemplate="[{Timestamp:yyyy-MM-ddHH:mm:ss}{Level:u3}]{Message:......
  • Windows 系统日志是记录操作系统活动的重要组成部分,对于入侵排查和溯源来说,分析系统日
    Windows系统日志是记录操作系统活动的重要组成部分,对于入侵排查和溯源来说,分析系统日志是非常关键的一步。以下是针对Windows系统日志分析和溯源的基础技术原理:事件日志:Windows操作系统生成多个类型的事件日志,包括应用程序日志、安全日志和系统日志。了解不同类型的事件日......