.NET Web API - 添加日志记录

Posted

技术标签:

【中文标题】.NET Web API - 添加日志记录【英文标题】:.NET Web API - Add Logging 【发布时间】:2014-08-10 16:01:59 【问题描述】:

我正在寻求有关处理 API 日志记录的最佳方式的帮助。如果这是最好的方法,我想记录对 sql 或文本文件的所有请求和响应。目前我一直在 SQL Server 的日志表中插入一行。我使用一个名为 LogAction 的静态方法来执行此操作,并在我的 Web API 中每个控制器的末尾附近运行它。我还记录了捕获的异常。有没有办法通过原生的 MVC Web API 来做到这一点,还是我走在正确的轨道上?

目前看起来是这样的:

// Log API Call
System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(request.GetType());
StringWriter s = new StringWriter();
x.Serialize(s, request);
Utilities.LogAction(Utilities.LogType.MAIN, false, response.ToString(), s.ToString(), "MainController: Successful");

有没有办法让它在本地记录所有 API 操作?这对我来说感觉不对,因为如果在这个静态方法和实际返回响应之间发生了一些事情,那么这个日志就不再有效。记录 API 操作的最有效方法是什么?

【问题讨论】:

***.com/questions/147557/error-logging-in-c-sharp 【参考方案1】:

为了记录对 API 操作的调用,我使用了一个自定义属性,如下所示:

public class LogApiRequestAttribute : System.Web.Http.Filters.ActionFilterAttribute

    /// <summary>
    /// For Web API controllers
    /// </summary>
    /// <param name="actionExecutedContext"></param>
    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
    
        base.OnActionExecuted(actionExecutedContext);

        var request = actionExecutedContext.Request;
        var response = actionExecutedContext.Response;
        var actionContext = actionExecutedContext.ActionContext;

        // Log API Call
        ...
    

您可能需要检查 actionExecutedContext 以查看它是否具有您想要的请求和响应信息。您可能想要替代或同时覆盖 OnActionExecuting 方法。

然后用属性装饰你的 Web API 控制器:

[LogApiRequest]
public void Post(SomeThingInputModel thing)

    // Controller code
    ...

【讨论】:

这是很棒的信息。谢谢!

以上是关于.NET Web API - 添加日志记录的主要内容,如果未能解决你的问题,请参考以下文章

来自静态类的 ASP.NET Core Web API 日志记录

ASP.NET Web API 记录请求响应数据到日志的一个方法

csharp 使用Log4net日志记录的自定义Web API过滤器。

最小 API .net 核心中的 Application Insight 日志记录

ASP.NET Web API 消息处理程序

.NET Worker Service 添加 Serilog 日志记录