From 45624d116f838c368200cd87765265fcbad8615f Mon Sep 17 00:00:00 2001 From: Shyju Krishnankutty Date: Wed, 3 Aug 2022 09:36:06 -0700 Subject: [PATCH] Hotfix 4.8.1-Fix for dotnet-isolated function app debugging hang issue (#8599) * Fix for dotnet-isolated function app debugging hang issue (#8596) * Deleted the code which removed the "azfuncjsonlog:" prefix for log messages meant for tooling as core tools rely on that prefix. * Test improvements * Added release notes * Bump version to 481 * Fixed release notes --- build/common.props | 2 +- release_notes.md | 6 +----- .../Workers/ProcessManagement/WorkerProcessUtilities.cs | 5 ----- src/WebJobs.Script/Workers/WorkerConsoleLogService.cs | 4 ++-- .../Workers/WorkerConsoleLogServiceTests.cs | 9 +++++---- 5 files changed, 9 insertions(+), 17 deletions(-) diff --git a/build/common.props b/build/common.props index e39735afaf..3b28a9a1bf 100644 --- a/build/common.props +++ b/build/common.props @@ -5,7 +5,7 @@ latest 4 8 - 0 + 1 0 diff --git a/release_notes.md b/release_notes.md index 48e59bf11c..546f0d7d87 100644 --- a/release_notes.md +++ b/release_notes.md @@ -2,8 +2,4 @@ - -- Updated Java Worker Version to [2.3.1](https://github.com/Azure/azure-functions-java-worker/releases/tag/2.3.1) - -**Release sprint:** Sprint 123 -[ [bugs](https://github.com/Azure/azure-functions-host/issues?q=is%3Aissue+milestone%3A%22Functions+Sprint+123%22+label%3Abug+is%3Aclosed) | [features](https://github.com/Azure/azure-functions-host/issues?q=is%3Aissue+milestone%3A%22Functions+Sprint+123%22+label%3Afeature+is%3Aclosed) ] +- Fix the bug where debugging of dotnet isolated function apps hangs in visual studio (#8596) diff --git a/src/WebJobs.Script/Workers/ProcessManagement/WorkerProcessUtilities.cs b/src/WebJobs.Script/Workers/ProcessManagement/WorkerProcessUtilities.cs index 74ae23dd78..f8556556bd 100644 --- a/src/WebJobs.Script/Workers/ProcessManagement/WorkerProcessUtilities.cs +++ b/src/WebJobs.Script/Workers/ProcessManagement/WorkerProcessUtilities.cs @@ -43,10 +43,5 @@ public static bool IsToolingConsoleJsonLogEntry(ConsoleLog consoleLog) { return consoleLog.Message.StartsWith(WorkerConstants.ToolingConsoleLogPrefix, StringComparison.OrdinalIgnoreCase); } - - public static string RemoveToolingConsoleJsonLogPrefix(string msg) - { - return Regex.Replace(msg, WorkerConstants.ToolingConsoleLogPrefix, string.Empty, RegexOptions.IgnoreCase); - } } } diff --git a/src/WebJobs.Script/Workers/WorkerConsoleLogService.cs b/src/WebJobs.Script/Workers/WorkerConsoleLogService.cs index 689627755b..bcdab13b8b 100644 --- a/src/WebJobs.Script/Workers/WorkerConsoleLogService.cs +++ b/src/WebJobs.Script/Workers/WorkerConsoleLogService.cs @@ -65,8 +65,8 @@ internal async Task ProcessLogs() if (WorkerProcessUtilities.IsToolingConsoleJsonLogEntry(consoleLog)) { - _toolingConsoleJsonLoggerLazy.Value.Log(consoleLog.Level, - WorkerProcessUtilities.RemoveToolingConsoleJsonLogPrefix(consoleLog.Message)); + // log with the message prefix as coretools expects it. + _toolingConsoleJsonLoggerLazy.Value.Log(consoleLog.Level, consoleLog.Message); } else { diff --git a/test/WebJobs.Script.Tests/Workers/WorkerConsoleLogServiceTests.cs b/test/WebJobs.Script.Tests/Workers/WorkerConsoleLogServiceTests.cs index 034cafe2ce..a316509985 100644 --- a/test/WebJobs.Script.Tests/Workers/WorkerConsoleLogServiceTests.cs +++ b/test/WebJobs.Script.Tests/Workers/WorkerConsoleLogServiceTests.cs @@ -50,7 +50,7 @@ public async Task WorkerConsoleLogService_ConsoleLogs_LogLevel_Expected(bool use workerProcess.ParseErrorMessageAndLog("LanguageWorkerConsoleLog[Test Worker Message No keyword]"); workerProcess.ParseErrorMessageAndLog("LanguageWorkerConsoleLog[Test Worker Error Message]"); workerProcess.ParseErrorMessageAndLog("LanguageWorkerConsoleLog[Test Worker Warning Message]"); - workerProcess.ParseErrorMessageAndLog("azfuncjsonlog:Azure Functions .NET Worker (PID: 4) initialized in debug mode."); + workerProcess.ParseErrorMessageAndLog("azfuncjsonlog:{ 'name':'dotnet-worker-startup', 'workerProcessId' : 321 }"); // Act _ = _workerConsoleLogService.ProcessLogs().ContinueWith(t => { }); @@ -73,14 +73,16 @@ public async Task WorkerConsoleLogService_ConsoleLogs_LogLevel_Expected(bool use { VerifyLogLevel(userLogs, "Test Message No keyword", LogLevel.Error); VerifyLogLevel(systemLogs, "[Test Worker Message No keyword]", LogLevel.Error); - VerifyLogLevel(toolingConsoleLogs, "Azure Functions .NET Worker (PID: 4) initialized in debug mode.", LogLevel.Error); + VerifyLogLevel(toolingConsoleLogs, "azfuncjsonlog:{ 'name':'dotnet-worker-startup', 'workerProcessId' : 321 }", LogLevel.Error); } else { VerifyLogLevel(userLogs, "Test Message No keyword", LogLevel.Information); VerifyLogLevel(systemLogs, "[Test Worker Message No keyword]", LogLevel.Information); - VerifyLogLevel(toolingConsoleLogs, "Azure Functions .NET Worker (PID: 4) initialized in debug mode.", LogLevel.Information); + VerifyLogLevel(toolingConsoleLogs, "azfuncjsonlog:{ 'name':'dotnet-worker-startup', 'workerProcessId' : 321 }", LogLevel.Information); } + + Assert.True(toolingConsoleLogs.All(l => l.FormattedMessage.StartsWith(WorkerConstants.ToolingConsoleLogPrefix))); } private static void VerifyLogLevel(IList allLogs, string msg, LogLevel expectedLevel) @@ -88,7 +90,6 @@ private static void VerifyLogLevel(IList allLogs, string msg, LogLev var message = allLogs.FirstOrDefault(l => l.FormattedMessage.Contains(msg)); Assert.NotNull(message); Assert.DoesNotContain(WorkerConstants.LanguageWorkerConsoleLogPrefix, message.FormattedMessage); - Assert.DoesNotContain(WorkerConstants.ToolingConsoleLogPrefix, message.FormattedMessage); Assert.Equal(expectedLevel, message.Level); } }