首页 > 解决方案 > 如何从非控制台 ASP.Net 应用程序中捕获标准输出

问题描述

我想将日志重定向到 Docker 提供的 AWSLog 驱动程序,然后再将日志发送到 AWS Cloud Watch。AWS 日志驱动程序文档说我需要将日志发送到 STDOUT,但我的 ASP.NET 应用程序无法使用Console.WriteLine. 实际上我根本没有收到任何编译错误,但是当我运行命令时,docker log {ContainerID}我看不到任何嵌入在Consoel.WriteLine语句中的日志。是否有任何等价物可以用来 STDOUT 非控制台 .net 应用程序中的日志。AWS Docker 日志驱动程序

标签: c#asp.net.netdocker

解决方案


好消息,您可能只是在寻找Out反过来公开.WriteLine方法的属性。

Console.Out.WriteLine("Some log entry");

有关它的更多信息,请参阅 docs.microsoft.com 上的参考资料

这里真正看起来是一个配置问题,并且(技术上)不是一个理想的记录选择。你说的是“非控制台应用程序”,但我肯定只是Console.WriteLine在一个全新的 ASP.Net WebAPI 项目中运行,这很好。您是否有机会使用 .net 核心?

最后,我相信 dotnet(尤其是核心?)的推荐日志记录是通过Microsoft Extensions Logging Abstractions这意味着您可以依赖于ILogger而不是显式Console实现。

Console.WriteLine方法在 ASP.Net WebAPI (.Net Framework) 中绝对不为空,但听起来你在谈论Console.Out为空。

如果你真的必须使用Console.WriteLinethen 调用Console.SetOut一个有效的文本流。

StreamWriter standardOutput = new StreamWriter(Console.OpenStandardOutput()); 
standardOutput.AutoFlush = true; 
Console.SetOut(standardOutput);

推荐阅读