Serilog 使用 Microsoft ILogger语言 - 从 .NET Core 中的一个代码记录到不同位置



我通过Microsoft.Extensions.Logging.ILogger使用serilog。 这是我在程序.cs中的配置:

public class Program
{
public static void Main(string[] args)
{
IConfigurationRoot configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.CreateLogger();
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseSerilog()
.ConfigureLogging((context, logging) =>
{
logging.ClearProviders();
logging.AddSerilog();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}

我通过DI使用ILogger。一切正常。现在我想将一些特定的日志记录到某个文件,将一些特定的日志记录到数据库中。例如,我想将有关某事的信息记录到某处,并将有关其他某物的信息记录到其他地方。

例如:我有一个游戏。我想将连接玩家的姓名及其操作记录到游戏中的某些文件和事件中,并将错误记录到数据库中。

我知道如何登录数据库和文件,但我不知道如何分离日志。我该怎么做?

这是配置文件(现在仅用于文件接收器(。

{
"Serilog": {
"Using": [],
"MinimumLevel": {
"Default": "Debug",
"Override": {
"Microsoft": "Error",
"System": "Error"
}
},
"Enrich": [ "SomeName" ],
"WriteTo": [
{ "Name": "Console" },
{
"Name": "File",
"Args": {
"path": "log.log",
"rollingInterval": "Day",
"outputTemplate": "SomeFormat"
}
}
],
"Application": "SomeName"
},

可以通过设置筛选异常存储在不同的接收器中

您可以通过许多不同的方式进行过滤。对我有用的是按命名空间过滤,例如:

var isController = Matching.FromSource("MyApp.Controllers");
var isService = Matching.FromSource("MyApp.Services");
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.WriteTo.RollingFile("d:/logs/recon-api-all-{Date}.log")
.WriteTo.Logger(l => l
.Filter.ByIncludingOnly(isController)
.WriteTo.RollingFile("d:/logs/recon-api-controller-{Date}.log"))
.WriteTo.Logger(l => l
.Filter.ByIncludingOnly(isService)
.WriteTo.MSSqlServer(connectionString: ""))
.WriteTo.Logger(l => l
.Filter.ByExcluding(e => isController(e) || iService(e))
.WriteTo.RollingFile("d:/logs/recon-api-other-{Date}.log"))
.CreateLogger();

你可以在这里找到类似的帖子

您可以尝试编写自己的接收器。 Serilog 提供的 LogEvent 类有一个自定义

readonly Dictionary<string, LogEventPropertyValue> _properties

您可以使用它来传递一些标志。根据标志,接收器可以决定它们是否对消息执行操作。

但这一切都在Serilog lvl。与ILogger的集成可能需要更多思考。

相关内容

最新更新