软件包Serilog.Exceptions
非常适合记录异常。它具有大量受支持的异常类型列表。
例如当前设置:
Log.Logger = new LoggerConfiguration()
.Enrich.WithExceptionDetails()
.CreateLogger();
当前,如果找不到异常类型的解构器,则它会退回到“基于反射的解构器”。
由于性能,但更重要的是可预测性,我们希望禁用反射回退。
我尝试使用DestructuringOptions
进行配置,例如禁用一些默认的析构函数或将DestructuringDepth设置为0
。
不幸的是,这些选项不起作用:
ReflectionBasedDestructurer
不在默认析构函数列表中
不允许将DestructuringDepth
设置为0
(例外)
任何想法如何为此配置Serilog.Exceptions吗?
参考方案
我认为您最好的选择是实现自己的ExceptionDecostructor
,如下所示:
public class FallbackExceptionDestructurer : ExceptionDestructurer
{
public override Type[] TargetTypes => new[]
{
typeof(Exception),
};
public override void Destructure(
Exception exception,
IExceptionPropertiesBag propertiesBag,
Func<Exception, IReadOnlyDictionary<string, object>> destructureException)
{
base.Destructure(exception, propertiesBag, destructureException);
}
}
这样,您将保留所有可用的析构函数,并且基于反射的将被忽略,因为FallbackExceptionDestructurer
将覆盖由于以下代码而导致的所有未知异常:
public override Type[] TargetTypes => new[]
{
typeof(Exception),
};
这就是您注册解构器的方式
.Enrich.WithExceptionDetails(new DestructuringOptionsBuilder()
.WithDefaultDestructurers()
.WithDestructurers(new[] { new FallbackExceptionDestructurer () }))
如果检查ExceptionDestructurer.Decostruct(...)的源代码,则不会使用任何反射-只会使用Exception类型的众所周知的属性。
Serilog Net Core其他专栏问题 - c#我正在将Serilog SQL Server Sink用于.NET Core 2。我已经在Serilog.Logger和Program.cs中都配置了Startup.cs,如下所示:ColumnOptions columnOptions = new ColumnOptions(); columnOptions.AdditionalDataColumns = …
捕获处理的异常 - c#嘿:)有什么办法可以全局捕获已处理的异常吗?我知道我们可以使用“ AppDomain.CurrentDomain.UnhandledException”和“ Application.ThreadException”捕获未处理的异常,但是我想对已经捕获的异常进行一些处理(例如写入日志等)谢谢 参考方案 通常,您可能希望在代码的最低级别捕获异常。相对于异常发生的…
为什么不在生产中启用Symfony调试工具? - php我经常发现将php错误转换为将回调注册到set_error_handler和register_shutdown_function的异常非常有用,因此我决定尝试一些更可靠的解决方案,即Symfony Debug组件。但是,它们在introduction page中警告: 您永远不要在生产环境中启用调试工具,因为它们可能会向用户泄露敏感信息。启用调试组件基本上意…
LeetCode题解计算机为什么是基于二进制的?可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制
LeetCode题解统计城市的所有灯泡这个是我刚毕业的时候,一个真实的面试题,这是一个开放题。题目描述:想办法,将一个城市的所有灯泡数量统计出来。题解:费米估算法1、如果某个城市常驻人口有1000万2、假设每5人居住在一套房里,每套房有灯泡5只,那么住宅灯泡共有1000万只3、假设公众场所每10人共享一只灯泡,那么共有100万只4、主要的这两者相加就得出了1100万只当然实际上这是估算的,具体应…