首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Serilog SelfLog生成异常堆栈跟踪,该异常堆栈无法提供终止到早期的表位。

Serilog SelfLog生成异常堆栈跟踪,该异常堆栈无法提供终止到早期的表位。
EN

Stack Overflow用户
提问于 2022-01-07 11:11:48
回答 1查看 238关注 0票数 0

考虑使用Serilog作为日志库的AspNetCore应用程序。

我正在将一个异常打印到SelfLog。从堆栈跟踪中,我猜测在某个地方,我正在记录一个破坏失败的对象。到目前一切尚好。我认为找出违规的日志调用并修复它是一件微不足道的事情。简单地说就是不使用破坏之类的方法。

不幸的是,在我的应用程序中,我很难准确定位出违规日志调用的确切位置。

堆栈跟踪就在相关行的前面结束。

我该如何解决这个问题?我怎样才能找到呼叫网站?

这也很正常吗?堆栈跟踪是否通常终止于应用程序/库边框?他们为什么要这样做呢,这是没有意义的IMHO。

代码语言:javascript
复制
System.NotSupportedException: Specified method is not supported.
   at System.Reflection.RuntimeMethodInfo.ThrowNoInvokeException()
   at System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.RuntimePropertyInfo.GetValue(Object obj, Object[] index)
   at Serilog.Capturing.PropertyValueConverter.GetProperties(Object value)+MoveNext()
   at System.Collections.Generic.LargeArrayBuilder`1.AddRange(IEnumerable`1 items)
   at System.Collections.Generic.EnumerableHelpers.ToArray[T](IEnumerable`1 source)
   at Serilog.Events.StructureValue..ctor(IEnumerable`1 properties, String typeTag)
   at Serilog.Capturing.PropertyValueConverter.TryConvertCompilerGeneratedType(Object value, Destructuring destructuring, Type valueType, LogEventPropertyValue& result)
   at Serilog.Capturing.PropertyValueConverter.CreatePropertyValue(Object value, Destructuring destructuring, Int32 depth)
   at Serilog.Capturing.PropertyValueConverter.DepthLimiter.CreatePropertyValue(Object value, Destructuring destructuring)
   at Serilog.Capturing.PropertyValueConverter.GetProperties(Object value)+MoveNext()
   at System.Collections.Generic.LargeArrayBuilder`1.AddRange(IEnumerable`1 items)
   at System.Collections.Generic.EnumerableHelpers.ToArray[T](IEnumerable`1 source)
   at Serilog.Events.StructureValue..ctor(IEnumerable`1 properties, String typeTag)
   at Serilog.Capturing.PropertyValueConverter.TryConvertCompilerGeneratedType(Object value, Destructuring destructuring, Type valueType, LogEventPropertyValue& result)
   at Serilog.Capturing.PropertyValueConverter.CreatePropertyValue(Object value, Destructuring destructuring, Int32 depth)
   at Serilog.Capturing.PropertyValueConverter.DepthLimiter.CreatePropertyValue(Object value, Destructuring destructuring)
   at Serilog.Capturing.PropertyValueConverter.<TryConvertEnumerable>g__MapToSequenceElements|14_1(IEnumerable sequence, Destructuring destructure)+MoveNext()
   at System.Collections.Generic.LargeArrayBuilder`1.AddRange(IEnumerable`1 items)
   at System.Collections.Generic.EnumerableHelpers.ToArray[T](IEnumerable`1 source)
   at Serilog.Events.SequenceValue..ctor(IEnumerable`1 elements)
   at Serilog.Capturing.PropertyValueConverter.TryConvertEnumerable(Object value, Destructuring destructuring, Type valueType, LogEventPropertyValue& result)
   at Serilog.Capturing.PropertyValueConverter.CreatePropertyValue(Object value, Destructuring destructuring, Int32 depth)
   at Serilog.Capturing.PropertyValueConverter.DepthLimiter.CreatePropertyValue(Object value, Destructuring destructuring)
   at Serilog.Capturing.PropertyValueConverter.GetProperties(Object value)+MoveNext()
   at System.Collections.Generic.LargeArrayBuilder`1.AddRange(IEnumerable`1 items)
   at System.Collections.Generic.EnumerableHelpers.ToArray[T](IEnumerable`1 source)
   at Serilog.Events.StructureValue..ctor(IEnumerable`1 properties, String typeTag)
   at Serilog.Capturing.PropertyValueConverter.TryConvertCompilerGeneratedType(Object value, Destructuring destructuring, Type valueType, LogEventPropertyValue& result)
   at Serilog.Capturing.PropertyValueConverter.CreatePropertyValue(Object value, Destructuring destructuring, Int32 depth)
   at Serilog.Capturing.PropertyValueConverter.DepthLimiter.CreatePropertyValue(Object value, Destructuring destructuring)
   at Serilog.Capturing.PropertyValueConverter.GetProperties(Object value)+MoveNext()
   at System.Collections.Generic.LargeArrayBuilder`1.AddRange(IEnumerable`1 items)
   at System.Collections.Generic.EnumerableHelpers.ToArray[T](IEnumerable`1 source)
   at Serilog.Events.StructureValue..ctor(IEnumerable`1 properties, String typeTag)
   at Serilog.Capturing.PropertyValueConverter.TryConvertCompilerGeneratedType(Object value, Destructuring destructuring, Type valueType, LogEventPropertyValue& result)
   at Serilog.Capturing.PropertyValueConverter.CreatePropertyValue(Object value, Destructuring destructuring, Int32 depth)
   at Serilog.Capturing.PropertyValueConverter.DepthLimiter.CreatePropertyValue(Object value, Destructuring destructuring)
   at Serilog.Capturing.PropertyValueConverter.<TryConvertEnumerable>g__MapToSequenceElements|14_1(IEnumerable sequence, Destructuring destructure)+MoveNext()
   at System.Collections.Generic.LargeArrayBuilder`1.AddRange(IEnumerable`1 items)
   at System.Collections.Generic.EnumerableHelpers.ToArray[T](IEnumerable`1 source)
   at Serilog.Events.SequenceValue..ctor(IEnumerable`1 elements)
   at Serilog.Capturing.PropertyValueConverter.TryConvertEnumerable(Object value, Destructuring destructuring, Type valueType, LogEventPropertyValue& result)
   at Serilog.Capturing.PropertyValueConverter.CreatePropertyValue(Object value, Destructuring destructuring, Int32 depth)
   at Serilog.Capturing.PropertyValueConverter.DepthLimiter.CreatePropertyValue(Object value, Destructuring destructuring)
   at Serilog.Capturing.PropertyValueConverter.GetProperties(Object value)+MoveNext()
   at System.Collections.Generic.LargeArrayBuilder`1.AddRange(IEnumerable`1 items)
   at System.Collections.Generic.EnumerableHelpers.ToArray[T](IEnumerable`1 source)
   at Serilog.Events.StructureValue..ctor(IEnumerable`1 properties, String typeTag)
   at Serilog.Capturing.PropertyValueConverter.TryConvertCompilerGeneratedType(Object value, Destructuring destructuring, Type valueType, LogEventPropertyValue& result)
   at Serilog.Capturing.PropertyValueConverter.CreatePropertyValue(Object value, Destructuring destructuring, Int32 depth)
   at Serilog.Core.Logger.BindProperty(String propertyName, Object value, Boolean destructureObjects, LogEventProperty& property)
   at Serilog.Extensions.Logging.SerilogLogger.Write[TState](LogEventLevel level, EventId eventId, TState state, Exception exception, Func`3 formatter)
   at Serilog.Extensions.Logging.SerilogLogger.Log[TState](LogLevel logLevel, EventId eventId, TState state, Exception exception, Func`3 formatter)

编辑:我问了另一个关于堆栈跟踪结束“早期”这里的问题。事实证明,这是正常的/按设计的,因为它是一个异常堆栈,这就是捕获异常的地方。

EDIT2:这似乎是特定于https://github.com/serilog/serilog-extensions-logging,即当通过Microsoft使用Serilog时。我创建了一个pull请求来添加一个更完整的堆栈跟踪。见#198

EN

回答 1

Stack Overflow用户

发布于 2022-01-07 11:56:27

不太确定这个具体,我只能给你几个关于如何记录和找出原因的指点。

我开发容错企业应用程序的方法是使用具有可配置日志级别的try-catch-finally。使用这种方法,如果您正在调试、获取信息或只是简单的错误,您可以根据需要打开或关闭级别。

我用:

  • 试着-去做逻辑
  • 捕获-捕获异常并记录它
  • 最后-释放资源

如果我真的想再走一步,我就会有额外的日志记录级别:

代码语言:javascript
复制
  try {
       logger.Info("Info :: I'm doing business call X");
       logger.Debug($"Debug :: I'm using object {foo}, calling foo.logic()");
       
       foo.Logic();
       
       logger.Info("Debug :: Succesfully called foo.logic()");
   }
   catch (Exception exc) {
    logger.Debug($"Error :: Failed business case foo.logic() and object info : {foo}");
    logger.Error($"Error :: Exception {exc}");

   }
   finally {
    foo.CleanUp();
    foo = null;
   }

使用这种方法,我可以轻松地将几个断点放置在捕获点或最后一个断点中,并找出破坏应用程序的原因。在上面,有详细的日志记录要调试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70620353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档