如何在 .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 创建日志文件?
在使用 Entity Framework 进行数据库迁移期间,如何避免 .NET 5 WebApp 中出现 Windows 服务错误 1053?