如何在 .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 创建日志文件?的主要内容,如果未能解决你的问题,请参考以下文章

NHiberante从.net framework转移到.net standard(.net core 2.2)时遇到的坑及填坑

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

如何在 .net framework 4.0 中压缩文件夹

如何升级net framework

在使用 Entity Framework 进行数据库迁移期间,如何避免 .NET 5 WebApp 中出现 Windows 服务错误 1053?

如何安装.net framework