Console.WriteLine有时会抛出句柄无效异常

use*_*567 2 c# console logging azure azure-functions

我有一个 Azure 函数,其中包含以下代码行:

Console.WriteLine("Name: " + list.Count());
Run Code Online (Sandbox Code Playgroud)

此行有时会引发此异常:

句柄无效。

在 Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor
+d__26.MoveNext (Microsoft. Azure.WebJobs.Host,版本=3.0.34.0,文化=中性,PublicKeyToken=31bf3856ad364e35:C:\项目\ azure-webjobs-sdk-rqm4t \ src \ Microsoft.Azure.WebJobs.Host \ Executors \ FunctionExecutor.cs:352 )
在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib,版本=4.0.0.0,Culture=neutral,PublicKeyToken=7cec85d7bea7798e)在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Private.CoreLib,版本) =4.0.0.0,文化=中性,PublicKeyToken=7cec85d7bea7798e)在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Private.CoreLib,版本=4.0.0.0,文化=中性,PublicKeyToken=7cec85d7bea7798e)在System.Runtime.CompilerServices Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor+d__18.MoveNext (Microsoft.Azure.WebJobs.主机,版本=3.0.34.0,文化=中性,PublicKeyToken=31bf3856ad364e35:C:\项目\ azure-webjobs-sdk-rqm4t \ src \ Microsoft.Azure.WebJobs.Host \ Executors \ FunctionExecutor.cs:108)内部异常系统.IO.IOException 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw 处理:在 System.ConsolePal+WindowsConsoleStream.Write(System.Console,版本=4.1.2.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a)在 System.IO.StreamWriter。刷新(System.Private.CoreLib,版本=4.0.0.0,文化=中性,PublicKeyToken=7cec85d7bea7798e)在System.IO.StreamWriter.WriteLine(System.Private.CoreLib,版本=4.0.0.0,文化=中性,PublicKeyToken=7cec85d7bea7798e) )在System.IO.TextWriter + SyncTextWriter.WriteLine(System.Private.CoreLib,版本= 4.0.0.0,文化=中性,PublicKeyToken = 7cec85d7bea7798e)在System.Console.WriteLine(System.Console,版本= 4.1.2.0,文化=中性,PublicKeyToken = b03f5f7f11d50a3a)

我们应该忽略这一点还是不要在 Azure 函数中使用控制台类?

viv*_*una 7

当控制台窗口已关闭,或者控制台输出已重定向到文件或其他流时,会发生这种情况。

在 azure 函数中,不应使用Console.WriteLine. 相反,您应该使用ILogger 写入日志。您可以编写类似的日志log.LogInformation("Name: " + list.Count());,这会将输出写入Azure Functions运行时日志。您还可以在 Azure 门户中查看日志。

编辑:正如@Fildor在评论中建议的那样,你可以使用log.LogInformation("Name: {count}", list.Count());

  • 没什么大不了的。只是更喜欢 `log.LogInformation("Name: {count}", list.Count());` (2认同)