Я пишу дополнитель для Serilog, и я хочу добавить свойство, которое на практике может запускать новое событие журнала:
public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory)
{
ISession session = /* HttpContext.Session */;
logEvent.AddPropertyIfAbsent(propertyFactory.CreateProperty("ValueFromSession", session.GetString("ValueFromSession")));
/* other properties ... */
}
Я хочу иметь возможность добавлять значение из моего http-сеанса в свои журналы, поэтому я использую LogContext.PushProperties
с настраиваемым обогатителем. ASP.NET Core регистрирует предупреждение при чтении истекшего сеанса, что запускает мой enricher, но всякий раз, когда я пытаюсь читать из сеанса в enricher, он предупреждает меня об истекшем сеансе, который запускает новый экземпляр моего enricher (ad infitum ). Это вызывает StackOverflowException
, который не может быть уловлен с try
блоком.
Есть ли способ отключить ведение журнала в Enrich
методе? Или я могу каким-то образом обнаружить такую рекурсию (кроме разбора трассировки стека)?
Enrich()
, должны перехватываться Serilog и не приводить к срабатыванию другого обработчика исключений верхнего уровня. Похоже, здесь может происходить что-то еще; Можете ли вы добавить к вопросу трассировку стека? Ваше здоровье! - person Nicholas Blumhardt   schedule 20.10.2016HttpContext.Session
в этом конкретном случае, что я хочу сделать в моем обогатителе. Конечным результатом этой взаимной рекурсии является переполнение стека. - person Jussi Kosunen   schedule 20.10.2016