首页 > 解决方案 > 无法使用 AWSLogDriver 发送日志

问题描述

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

脚步 -

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

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

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

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

标签: .netamazon-web-servicesdockeramazon-cloudwatchamazon-cloudwatchlogs

解决方案


第一件事,

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

因此,如果应用程序是容器的父进程,它会记录到容器日志,或者如果进程使用某个进程管理器运行,那么它会将日志重定向到容器日志(如果已配置)。

所以从码头工人的角度来看,

docker logs 在运行时显示三个 I/O 流,称为 STDIN、STDOUT 和 STDERR。STDOUT 通常是命令的正常输出,STDERR 通常用于输出错误信息。默认情况下,docker logs 会显示 docker 命令的 STDOUT 和 STDERR

码头集装箱日志

现在从 AWS 的角度来看,

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

using_cotainer-awslogs

在上面的基础上,You Docker container 和 AWS log-driver 与 log 无关,它只从应用程序 Stdout 和 Stderr 获取日志,并且还依赖于 docker 和 AWS log driver 消费者容器日志的入口点。

您需要查看 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

来自-net-core-console-app-by-docker-logs 的输出

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


推荐阅读