如何在 .Net Framework 中使用 Serilog 为每个 API 创建日志文件?

Posted

技术标签:

【中文标题】如何在 .Net Framework 中使用 Serilog 为每个 API 创建日志文件?【英文标题】:How to create logfile for each API using Serilog in .Net Framework? 【发布时间】:2022-01-16 00:05:22 【问题描述】:

我使用 4.6.2 框架创建了 .Net Web API 项目。我在我的应用程序中使用 Serilog。到目前为止,它是一个静态类,如下所示。

public static class Logger

    private static readonly ILogger _logger;

    static A1Logger()
    
        _logger = new LoggerConfiguration()
            .WriteTo.File(("C:/logs/log-.txt"), rollingInterval: RollingInterval.Day)
            .CreateLogger();
    

    public static void LogError(string error)
    
        //_logger.ToJSON(error);
        _logger.Error(error);
    

    public static void LogInformation(string info)
    
        _logger.Information(info);
    

它创建日志文件并记录信息。但是我想为每个 API 创建日志文件。

例如,如果我点击 http://localhost:52137/Controller/sessions 它应该创建会话日志文件并应该在该文件中登录,如果我点击 http://localhost:52137/Controller/Event API 它应该创建事件日志文件并开始在其中记录。

RollingInterval 在我的静态类中应该如上。我在谷歌上查了很多,有很多 .NetCore fir Serilogs 的例子,但我在 .NET Framework 上看不到任何东西。我想我必须根据我的研究使用过滤器,但是我不确定如何在 .Net Framework 中配置它。另外,我认为静态类不会帮助我创建多个日志文件。日志文件操作也应该是异步的。

提前感谢您的帮助,如果您需要更多信息,请告诉我。

【问题讨论】:

有人请帮忙。我在网上找不到任何相关的内容。 【参考方案1】:

我不能评论,所以我会在这里发帖。

看看这个other question。

它向您展示了如何使用 serilog-expressions 根据请求路径进行过滤。

本质上,添加配置以按路径过滤日志。 在代码中:

Log.Logger = new LoggerConfiguration()
    .Filter.ByIncludingOnly("RequestPath like '/Event API%'")
    .WriteTo.File("path/to/file/Event API.log");

在 JSON 中:

    "Filter": 
        "Name": "ByIncluding",
        "Args": 
          "expression": "RequestPath like '/Event API%'"
        
    
    "WriteTo": "File",
    "Path": "path/to/files/Event API.log"

您可以为希望使用此日志库的每个应用程序执行此操作。

您还可以根据传入的请求动态构建这些路径和表达式,以便在文件不存在时创建文件,但我没有这样做的经验。

【讨论】:

static A1Logger() _logger = new LoggerConfiguration() .Filter.ByIncludingOnly("EndsWith(RequestPath, '/inventory/devices')") .WriteTo.Async(a => a.File(("C:/logs/devices.txt"), rollingInterval: RollingInterval.Day); ).CreateLogger(); 感谢 Jonny 先生的回复。我最终为我的记录器创建了上面的代码。它不起作用。它是我创建记录器的构造函数。我正在为记录器使用静态类。我也不明白 In Json 部分。我没有 appSettings.json 之类的 .net 核心应用程序。 json 部分只是 In Code 部分的替代品,您不必使用它。对我来说,单个接收器的异步似乎是不必要的。至于为什么它对你不起作用,我不确定。确保你拥有所有必要的 Serilog nuget 包。

以上是关于如何在 .Net Framework 中使用 Serilog 为每个 API 创建日志文件?的主要内容,如果未能解决你的问题,请参考以下文章