无法使用AWSLogDriver发送日志

时间:2019-07-14 00:55:28

标签: .net amazon-web-services docker amazon-cloudwatch amazon-cloudwatchlogs

我正在尝试使用AWS LOG DRIVER将日志发送到CloudWatch。

步骤-

  1. 创建了C#控制台应用程序
  2. 将某些行添加为Console.WriteLine("This is a sample application");
  3. 更新了Task.json文件,以包括Cloud Watch Logs组和流信息。
  4. 创建docker映像并通过ECS旋转它。

现在在CloudWatch Logs中,我已经开始看到应用程序日志

问题:我有一个ASP.NET MVC 5 Web应用程序,我在MVC应用程序中添加了相同的Console.WriteLine("This is a sample application");,但是在Cloud Watch Log Group /中没有看到日志流。

问题:这是否意味着AWSLog Driver仅从控制台应用程序发送日志。但是我认为这将是一个很大的限制。有人可以指导我吗?甚至ASP.Net应用程序也可以使用Console.Out发送日志吗?

1 个答案:

答案 0 :(得分:0)

第一件事,

  

记录的信息和日志的格式取决于   几乎完全在容器的终结点命令上。

因此,如果应用程序是容器的父进程,则它将记录到容器日志中,或者如果该进程使用某个进程管理器运行,则它将在配置后将日志重定向到容器日志。

所以从docker的角度来看

  

docker日志在显示三个I / O流时显示   运行,分别称为STDIN,STDOUT和STDERR。 STDOUT通常是命令的常规输出,而STDERR通常用于输出错误消息。默认情况下,docker   日志显示命令的docker的STDOUT和STDERR

docker-containers-logging

现在是AWS视角,

  

任务容器记录的信息类型   主要取决于他们的ENTRYPOINT命令。默认情况下,   被捕获,显示您通常会在   交互式终端(如果您在本地运行容器)   STDOUT和STDERR I / O流。 awslogs日志驱动程序只需传递   这些日志从Docker到CloudWatch。

using_cotainer-awslogs

基于上述,您的Docker容器和AWS日志驱动程序与日志无关,它仅从应用程序Stdout和Stderr获取日志,并且还取决于Docker和AWS日志驱动程序使用者容器日志的入口点。

您需要研究c#stdout和stderr。

stdout-vs-console-write-in-c-sharp

System_Console_Out

    // Redirect standard output from the console to the output file.
    Console.SetOut(writer);

system.console.setout

output-from-net-core-console-app-by-docker-logs

asp-net-core-net-core-console-app-logging-in-docker-container