.NET Core Worker进程下Serilog无法记录完整异常日志的问题排查
问题原因
你遇到的问题是LogError方法参数顺序不符合.NET ILogger的规范重载要求导致的:
- .NET 内置
ILogger的日志方法家族(包括LogError/LogWarning等)有专门的异常重载,签名为:
只有将异常对象作为第一个入参传入时,日志框架才会将该对象识别为需要序列化输出的异常,自动追加异常类型、消息、堆栈跟踪、内部异常等完整信息。void LogError(Exception exception, string message, params object[] args) - 你原来的写法
_logger.LogError("Exception at GenerateException", ex)中,第一个参数是字符串,会被识别为消息模板,第二个参数ex会被当成消息模板的占位符参数处理,由于你的消息模板里没有任何{}格式的占位符,这个ex参数会被直接丢弃,自然不会输出任何异常相关内容。
修改为_logger.LogError(ex, "Exception at GenerateException")后,框架就会正确识别第一个入参为异常对象,输出完整的异常信息。
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

