我有一个Azure函数,它有这行代码:
Console.WriteLine("Name: " + list.Count());
这行有时会抛出这样的异常:
句柄无效。
at system . runtime . exceptionservices . exceptiondispatchino . throw (System.Private。CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor+d__26。MoveNext (Microsoft.Azure.WebJobs。主机,版本=3.0.34.0,文化=中性,PublicKeyToken=31bf3856ad364e35: C:projectsazure-webjobs-sdk-rqm4tsrcMicrosoft.Azure.WebJobs.HostExecutors functionexecutors .cs:352)
at system . runtime . exceptionservices . exceptiondispatchino . throw (System.Private. private . error)。CoreLib,版本=4.0.0.0,文化=中性,PublicKeyToken=7cec85d7bea7798e)在system_private . private . task_wait . throwfornonsuccess ()CoreLib,版本=4.0.0.0,文化=中性,PublicKeyToken=7cec85d7bea7798e)handlenonsuccessanddebuggernotification (System.Private.)CoreLib,版本=4.0.0.0,文化=中性,PublicKeyToken=7cec85d7bea7798e)在System.Runtime.CompilerServices.TaskAwaiter 1。GetResult (System.Private。CoreLib,版本=4.0.0.0,文化=中性,PublicKeyToken=7cec85d7bea7798e)在Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor + d__18。MoveNext (Microsoft.Azure.WebJobs。主机,版本=3.0.34.0,文化=中性,PublicKeyToken=31bf3856ad364e35: C:projectsazure-webjobs-sdk-rqm4tsrcMicrosoft.Azure.WebJobs.HostExecutors functionexecutors .cs:108)System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw处理的内部异常System.IO.IOException:在System.ConsolePal + WindowsConsoleStream。写(系统。控制台,版本=4.1.2.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a)在System.IO.StreamWriter.Flush (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控制台,版本=4.1.2.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a)
我们应该忽略这个还是不使用Azure函数中的控制台类?
当控制台窗口被关闭,或者控制台输出被重定向到文件或其他流时,会发生这种情况。
在azure函数中,不应该使用Console.WriteLine
。相反,您应该使用ILogger
来编写日志。你可以写像log.LogInformation("Name: " + list.Count());
这样的日志,这将把输出写到Azure Functions运行时日志。您还可以在azure门户中查看日志。
编辑:正如@Fildor在评论中建议的那样,您可以使用log.LogInformation("Name: {count}", list.Count());