Исключение журнала Serilog и другие свойства
Я реализую Serilog в приложении службы WCF. В моем Global.asax я пытаюсь настроить глобальный регистратор для печати времени журнала, идентификатора потока, любых исключений, которые могут быть зарегистрированы, и дополнительных свойств в формате json, включенных в события.
Мои настройки журнала:
Log.Logger = new LoggerConfiguration()
.Enrich.WithThreadId()
.Enrich.WithThreadName()
.Enrich.WithExceptionDetails()
.Enrich.FromLogContext()
.WriteTo.File(
path: "\\LogFiles\\Gateway\\gateway-properties-.log",
rollingInterval: RollingInterval.Day,
outputTemplate: "{Timestamp:HH:mm} [{Level}] ({ThreadId}) {Message}{NewLine}{Exception} {Properties:j}")
.CreateLogger();
Log.Information("Initilizing Application");
Когда я смотрю на журнал, созданный для информационного события во фрагменте, он выглядит так
16:28 [Information] (1) Initilizing Application
{}
Когда я пытаюсь зарегистрировать исключение:
throw new Exception("This is a forced exception");
...
catch (Exception ex)
{
Log.Fatal("Application could not be started", ex);
}
Я вижу это в журнале:
16:28 [Fatal] (1) Application could not be started
{}
Я ожидал увидеть сообщение об исключении и трассировку стека, включенную в элемент журнала.
В другом месте я пытаюсь зарегистрировать успешное выполнение запроса:
Log.Information("Transaction {0} successfully processed", request.TransactionId, request);
И я вижу:
16:40 [Information] (8) Transaction "the correct transaction ID" successfully processed
{}
Очевидно, я неправильно настраиваю или не регистрирую события должным образом.
Конкретные вопросы
- Вопрос 1: Что-нибудь в моей конфигурации противоречит желаемому результату?
- Вопрос 2: автоматически ли Serilog включает фигурные скобки для свойств, даже если они не включены в событие журнала? (пустой {} после журнала)
- Вопрос 3. Когда я предоставляю свойства, почему они включаются в интерполированное поле, но не в раздел свойств журнала?
- Вопрос 4: Нужна ли мне дополнительная настройка для включения деталей исключения?