From 91490b0c08a8d95c9b058f8bfb1509829b15d556 Mon Sep 17 00:00:00 2001 From: David Wilson Date: Thu, 15 Jun 2017 11:40:24 -0700 Subject: [PATCH] Add Diagnostic logging level for protocol message JSON This change adds a new "Diagnostic" logging level which is used for logging the JSON contents of protocol messages that are read or written. This will provide two benefits: 1. Increase the privacy of user logs that are transmitted over GitHub 2. Increase the performance of writing Verbose logs We still log the high-level message details like message type, method, and ID so that we can keep track of the message sequence. --- .../MessageProtocol/MessageReader.cs | 11 +++++++++-- .../MessageProtocol/MessageWriter.cs | 7 ++++++- src/PowerShellEditorServices/Utility/ILogger.cs | 5 +++++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/PowerShellEditorServices.Protocol/MessageProtocol/MessageReader.cs b/src/PowerShellEditorServices.Protocol/MessageProtocol/MessageReader.cs index 5323774f8..66f75c375 100644 --- a/src/PowerShellEditorServices.Protocol/MessageProtocol/MessageReader.cs +++ b/src/PowerShellEditorServices.Protocol/MessageProtocol/MessageReader.cs @@ -112,13 +112,20 @@ public async Task ReadMessage() // Load the message this.logger.Write( - LogLevel.Verbose, + LogLevel.Diagnostic, string.Format( "READ MESSAGE:\r\n\r\n{0}", messageObject.ToString(Formatting.Indented))); // Return the parsed message - return this.messageSerializer.DeserializeMessage(messageObject); + Message parsedMessage = this.messageSerializer.DeserializeMessage(messageObject); + + this.logger.Write( + LogLevel.Verbose, + $"Received {parsedMessage.MessageType} '{parsedMessage.Method}'" + + (!string.IsNullOrEmpty(parsedMessage.Id) ? $" with id {parsedMessage.Id}" : string.Empty)); + + return parsedMessage; } #endregion diff --git a/src/PowerShellEditorServices.Protocol/MessageProtocol/MessageWriter.cs b/src/PowerShellEditorServices.Protocol/MessageProtocol/MessageWriter.cs index e196472f0..c618fa104 100644 --- a/src/PowerShellEditorServices.Protocol/MessageProtocol/MessageWriter.cs +++ b/src/PowerShellEditorServices.Protocol/MessageProtocol/MessageWriter.cs @@ -58,9 +58,14 @@ public async Task WriteMessage(Message messageToWrite) this.messageSerializer.SerializeMessage( messageToWrite); - // Log the JSON representation of the message this.logger.Write( LogLevel.Verbose, + $"Writing {messageToWrite.MessageType} '{messageToWrite.Method}'" + + (!string.IsNullOrEmpty(messageToWrite.Id) ? $" with id {messageToWrite.Id}" : string.Empty)); + + // Log the JSON representation of the message + this.logger.Write( + LogLevel.Diagnostic, string.Format( "WRITE MESSAGE:\r\n\r\n{0}", JsonConvert.SerializeObject( diff --git a/src/PowerShellEditorServices/Utility/ILogger.cs b/src/PowerShellEditorServices/Utility/ILogger.cs index e5c91afd4..388cef621 100644 --- a/src/PowerShellEditorServices/Utility/ILogger.cs +++ b/src/PowerShellEditorServices/Utility/ILogger.cs @@ -16,6 +16,11 @@ namespace Microsoft.PowerShell.EditorServices.Utility /// public enum LogLevel { + /// + /// Indicates a diagnostic log message. + /// + Diagnostic, + /// /// Indicates a verbose log message. ///