Эти вопросы касаются того, как регистрировать исключение PowerShell в Serilog, чтобы оно интерпретировалось как свойство класса fist, а не большая строка.Отправка исключений PowerShell для Serilog
У меня есть несколько вопросов:
- Чтобы получить полную информацию об исключении мне нужно расширить свойства ErrorRecord
- Serilog не может интерпретировать расширенную ErrorRecord, который в PowerShell является PSCustomObject.
- Из-за этих проблем я должен отправить исключение в виде большой строки, которая не является хорошей практикой и создает уникальные шаблоны сообщений.
Есть некоторые хорошие детали о том, как войти исключение .NET в Serilog на следующей странице, и я хотел бы, чтобы достичь чего-то подобного с помощью PowerShell: http://nblumhardt.com/2014/09/how-not-to-parameterize-serilog-events/
В исключениях PowerShell есть дополнительная информация. У PowerShell есть записи ошибок. Чтобы просмотреть запись об ошибке в Powershell, сначала создайте ошибку в новой консоли PowerShell. Например:
ip[config
Теперь взгляните на ошибку в консоли, но она не покажет вам все свойства.
$error[0]
Мы можем видеть, что составляет объект записи об ошибке, и существует ряд свойств.
$error[0] | Get-Member
Чтобы получить эту Serilog из PowerShell я мог бы сделать что-то вроде следующего:
$er = ($error[0] | Select * | Out-String)
Это расширит объект System.Management.Automation.ErrorRecord, преобразовать его в одну строку ($ er), поэтому я могу добавить его в свое сообщение журнала.
$Log.Error({Exception}, $er)
Это не представляется возможным отправить полную запись об ошибке Serilog потому что я должен расширить все свойства первого и которые в конечном итоге в качестве PSCustomObject из базового типа System.Object.
Что было бы лучше всего здесь? Есть ли лучший способ, чем передать его в виде строки? Может ли Serilog перевести объект System.Object, который обладает свойствами из ErrorRecord?
Благодарим за предоставление дополнительных примеров кода, если требуется.
Большое спасибо, Блэр.
В зависимости от вариантов использования может быть достаточно просто зарегистрировать Исключение, содержащееся в ErrorRecord (например, '$ Error [0] .Exception'). –
Пробовали ли вы использовать серрологический деструктурирующий оператор (@)? Что-то вроде: 'Log.Error ($ error [0] .Exception," Ошибка Powershell {@Error} ", $ error [0])' – PatrickSteele