src/PowerShell/StreamHandler.cs (60 lines of code) (raw):

// // Copyright (c) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. // using Microsoft.Azure.Functions.PowerShellWorker.Utility; using LogLevel = Microsoft.Azure.WebJobs.Script.Grpc.Messages.RpcLog.Types.Level; namespace Microsoft.Azure.Functions.PowerShellWorker.PowerShell { using System.Management.Automation; internal class StreamHandler { ILogger _logger; private ErrorRecordFormatter _errorRecordFormatter; public StreamHandler(ILogger logger, ErrorRecordFormatter errorRecordFormatter) { _logger = logger; _errorRecordFormatter = errorRecordFormatter; } public void DebugDataAdding(object sender, DataAddingEventArgs e) { if(e.ItemAdded is DebugRecord record) { _logger.Log(isUserOnlyLog: true, LogLevel.Debug, $"DEBUG: {record.Message}"); } } public void ErrorDataAdding(object sender, DataAddingEventArgs e) { if(e.ItemAdded is ErrorRecord record) { ErrorAnalysisLogger.Log(_logger, record, isException: false); _logger.Log(isUserOnlyLog: true, LogLevel.Error, $"ERROR: {_errorRecordFormatter.Format(record)}", record.Exception); } } public void InformationDataAdding(object sender, DataAddingEventArgs e) { if(e.ItemAdded is InformationRecord record) { string prefix = (record.Tags.Count == 1 && record.Tags[0] == "__PipelineObject__") ? "OUTPUT:" : "INFORMATION:"; _logger.Log(isUserOnlyLog: true, LogLevel.Information, $"{prefix} {record.MessageData}"); } } public void ProgressDataAdding(object sender, DataAddingEventArgs e) { if(e.ItemAdded is ProgressRecord record) { _logger.Log(isUserOnlyLog: true, LogLevel.Trace, $"PROGRESS: {record.StatusDescription}"); } } public void VerboseDataAdding(object sender, DataAddingEventArgs e) { if(e.ItemAdded is VerboseRecord record) { _logger.Log(isUserOnlyLog: true, LogLevel.Trace, $"VERBOSE: {record.Message}"); } } public void WarningDataAdding(object sender, DataAddingEventArgs e) { if(e.ItemAdded is WarningRecord record) { _logger.Log(isUserOnlyLog: true, LogLevel.Warning, $"WARNING: {record.Message}"); } } } }