Ниже приведены некоторые идеи, которые могут помочь вам устранить неполадки:
Вы тестируете только с событиями Verbose
или Debug
?Это может быть причиной.Вы не указали глобальный минимальный уровень для Serilog (вы указали только минимальный уровень для приемника, который действует как фильтр), а минимальный по умолчанию равен Information
, что означает Verbose
и Debug
игнорируются ... Укажите глобальный MinimumLevel
для Serilog:
ILogger logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.WriteTo.MSSqlServer(connectionString,
tableName,
autoCreateSqlTable: autoCreateSqlTable,
restrictedToMinimumLevel: LogEventLevel.Verbose,
columnOptions: GetSQLSinkColumnOptions(),
batchPostingLimit: batchPostingLimit)
.CreateLogger();
Вы утилизируете свой регистратор?Serilog.Sinks.MSSqlServer
- это «периодический приемник дозирования», поэтому вам нужно убедиться, что вы расположили регистратор в конце, чтобы заставить его сбрасывать журналы в базу данных.См. Жизненный цикл регистраторов .
((IDisposable) logger).Dispose();
Даже если вы используете 1
для batchPostingLimit
, , по умолчанию 5
секунд перед отправкой журналов вбаза данных .Если ваше приложение закрывается до этого периода, и вы не утилизируете регистратор, сообщения теряются.
Для устранения неполадок используйте AuditTo
вместо WriteTo
(и удалите batchPostingLimit
, что не применимо для аудита).WriteTo
безопасен и будет есть любые исключения, в то время как AuditTo
позволит исключениям всплыть.
ILogger logger = new LoggerConfiguration()
.AuditTo.MSSqlServer(
connectionString,
tableName,
restrictedToMinimumLevel: LogEventLevel.Verbose,
autoCreateSqlTable: true)
.CreateLogger();
Конечно, когда вы поймете, что не так, вернитесь к WriteTo
.