c# - Serilog 范围级别过滤
问题描述
在 log4net 中,您可以选择使用 levelMin levelMax 范围声明不同的 fileappender。这样,您可以拥有一个用于调试的文件和一个用于错误的文件。如何在 serilog 文件接收器中具有相同的行为。我有此代码,但您只能指定 MinimumLevel
Log.Logger = new LoggerConfiguration()
.WriteTo.Async(a =>
{
a.RollingFile($"{AppDomain.CurrentDomain.BaseDirectory}\\Logs\\error.txt",
restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Error);
})
.WriteTo.Async(a =>
{
a.RollingFile($"{AppDomain.CurrentDomain.BaseDirectory}\\Logs\\log.txt",
restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Debug);
})
.CreateLogger();
它创建了两个文件,但在 log.txt 我还看到了错误级别消息
解决方案
在 Serilog 中,您可以使用对每个子记录器应用过滤器的子记录器:
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.WriteTo.Logger(c =>
c.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Debug)
.WriteTo.File("Debug.log"))
.WriteTo.Logger(c =>
c.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Error)
.WriteTo.File("Error.log"))
.CreateLogger();
Log.Debug("This goes to Debug.log only");
Log.Error("This goes to Error.log only");
Log.CloseAndFlush();
或者,如果您只想将 a 映射到文件,则可以使用Serilog.Sinks.Map 。LogEventLevel
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.WriteTo.Map(evt => evt.Level, (level, wt) => wt.File($"{level}.log"))
.CreateLogger();
Log.Debug("This goes to Debug.log only");
Log.Error("This goes to Error.log only");
Log.CloseAndFlush();
推荐阅读
- java - 如何解决recyclerview中的重复数据
- java - 如何使用适配器位置将数据从 firebase 检索到新活动
- javascript - 尝试隐藏元素并在单击按钮时将其回调
- python - 范围内浮点值的numpy数组
- python - 如何将文件上传到动态创建的 Django 模型?
- spring-mongodb - 如何在spring boot项目中添加mongodb副本集
- javascript - Javascript过滤器/查找功能是四舍五入的数字
- java - 为什么是“IOUtils.copy(blob.getBinaryStream(), out);” 不下载,而是显示图像
- android - 权限对话框未出现在片段中
- python - AttributeError:“DataFrame”对象没有属性“set_value”