c# - Serilog中不同级别的不同日志文件
问题描述
我正在使用 serilog,我需要将不同的日志级别保存到不同的文件(例如 debug-20200708.log 用于调试级别,info-20200798.log 用于调试级别......)
我使用了下面的代码,但它不能正常工作。
var baseLogger = new Serilog.LoggerConfiguration()
.WriteTo.Logger(l => l
.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Fatal))
.WriteTo.File(
path: GetLogPath(LogEventLevel.Fatal),
formatter: formatter)
.WriteTo.Logger(l => l
.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Error))
.WriteTo.File(
path: GetLogPath(LogEventLevel.Error),
formatter: formatter)
.WriteTo.Logger(l => l
.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Warning))
.WriteTo.File(
path: GetLogPath(LogEventLevel.Warning),
formatter: formatter)
.WriteTo.Logger(l => l
.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Information))
.WriteTo.File(
path: GetLogPath(LogEventLevel.Information),
formatter: formatter)
.WriteTo.Logger(l => l
.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Debug))
.WriteTo.File(
path: GetLogPath(LogEventLevel.Debug),
formatter: formatter)
.WriteTo.Logger(l => l
.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Verbose))
.WriteTo.File(
path: GetLogPath(LogEventLevel.Verbose),
formatter: formatter)
.Enrich.FromLogContext();
_logger = baseLogger.CreateLogger();
解决方案
我在不同表中插入 SQLServer 时遇到了这个问题。我通过这样做解决了它
Log.Logger = new LoggerConfiguration()
.WriteTo.Conditional(x => x.Level == Serilog.Events.LogEventLevel.Error, conf => conf.MSSqlServer(Configuration.GetConnectionString("LogConnectionString"),
new SinkOptions { AutoCreateSqlTable = true, TableName = "Error" }))
.WriteTo.Conditional(x => x.Level == Serilog.Events.LogEventLevel.Warning, conf => conf.MSSqlServer(Configuration.GetConnectionString("LogConnectionString"),
new SinkOptions { AutoCreateSqlTable = true, TableName = "Warning" }))
.WriteTo.Conditional(x => x.Level == Serilog.Events.LogEventLevel.Debug, conf => conf.MSSqlServer(Configuration.GetConnectionString("LogConnectionString"),
new SinkOptions { AutoCreateSqlTable = true, TableName = "Debug" }))
.WriteTo.Conditional(x => x.Level == Serilog.Events.LogEventLevel.Information, conf => conf.MSSqlServer(Configuration.GetConnectionString("LogConnectionString"),
new SinkOptions { AutoCreateSqlTable = true, TableName = "Information" }))
.WriteTo.Conditional(x => x.Level == Serilog.Events.LogEventLevel.Verbose, conf => conf.MSSqlServer(Configuration.GetConnectionString("LogConnectionString"),
new SinkOptions { AutoCreateSqlTable = true, TableName = "Verbose" }))
.CreateLogger();
推荐阅读
- javascript - 悬停在其他元素下方的元素可能悬停
- vue.js - Gitlab CI / Pipelines 中忽略了 VueJS Webpack 别名
- emacs - emacs 在 gud 调试命令上保存所有缓冲区
- julia - Julia 中的类型错误
- dll - Inno Setup“外部”子句是否负责加载和上传?
- ruby - Rails 使用 has_many 自我引用一个模型
- php - 为什么今天的工作日加二不工作?
- android-studio - 颤动的android studio 4.1无法找到adb
- apache-kafka - Kafka连接过滤器jsonpath的问题
- python - 如何在 matplotlib / seaborn 中缩放直方图条的高度?