首页 文章

向Serilog发送PowerShell异常

提问于
浏览
1

这个问题涉及如何在Serilog中记录PowerShell异常,以便将其解释为拳头类属性而不是大字符串 .

我有几个问题:

  • 要获取完整的异常信息,我需要扩展ErrorRecord的属性

  • Serilog无法解释PowerShell中的扩展ErrorRecord是PSCustomObject .

  • 由于这些问题,我必须将一个异常作为一个大字符串发送,这不是一个好的做法,并创建了独特的消息模板 .

关于如何在下一页的Serilog中记录.NET异常有一些很好的细节,我想从PowerShell中获得类似的东西:http://nblumhardt.com/2014/09/how-not-to-parameterize-serilog-events/

在PowerShell中,异常还有其他信息 . PowerShell有错误记录 . 要查看Powershell中的错误记录,请首先在新的PowerShell控制台中创建错误 . 例如:

ip[config

现在看看控制台中的错误,但它不会显示所有属性 .

$error[0]

我们可以看到构成错误记录对象的内容,并且有许多属性 .

$error[0] | Get-Member

要从PowerShell中获取Serilog,我可以执行以下操作:

$er = ($error[0] | Select * | Out-String)

这将扩展System.Management.Automation.ErrorRecord对象,将其转换为单个字符串($ er),然后我可以将其添加到我的日志消息中 .

$Log.Error({Exception}, $er)

将完整的错误记录发送到Serilog是不可能的,因为我必须首先扩展所有属性,最终将作为基类型System.Object的PSCustomObject .

这里最好的做法是什么?有没有比将其作为字符串传递更好的方法? Serilog可以翻译一个具有ErrorRecord属性的System.Object吗?

如果需要,很高兴提供更多代码示例 .

非常感谢,布莱尔 .

1 回答

  • 2

    谢谢Patrick . 你的例子对我有用 . 问题是我没有将System.Exception属性作为第一个属性 . 我没有意识到我可以在同一事件中将异常和解构的ErrorRecord一起传递 .

相关问题