考虑使用Serilog作为日志库的AspNetCore应用程序。
我正在将一个异常打印到SelfLog。从堆栈跟踪中,我猜测在某个地方,我正在记录一个破坏失败的对象。到目前一切尚好。我认为找出违规的日志调用并修复它是一件微不足道的事情。简单地说就是不使用破坏之类的方法。
不幸的是,在我的应用程序中,我很难准确定位出违规日志调用的确切位置。
堆栈跟踪就在相关行的前面结束。
我该如何解决这个问题?我怎样才能找到呼叫网站?
这也很正常吗?堆栈跟踪是否通常终止于应用程序/库边框?他们为什么要这样做呢,这是没有意义的IMHO。
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。
发布于 2022-01-07 11:56:27
不太确定这个具体,我只能给你几个关于如何记录和找出原因的指点。
我开发容错企业应用程序的方法是使用具有可配置日志级别的try-catch-finally。使用这种方法,如果您正在调试、获取信息或只是简单的错误,您可以根据需要打开或关闭级别。
我用:
如果我真的想再走一步,我就会有额外的日志记录级别:
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;
}使用这种方法,我可以轻松地将几个断点放置在捕获点或最后一个断点中,并找出破坏应用程序的原因。在上面,有详细的日志记录要调试。
https://stackoverflow.com/questions/70620353
复制相似问题