【问题标题】:Not able to send logs using AWSLogDriver无法使用 AWSLogDriver 发送日志
【发布时间】:2019-07-14 16:30:01
【问题描述】:

我正在尝试使用 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/Stream 中看不到日志。

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

【问题讨论】:

  • @Unbeakable 你能推送日志吗?

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


【解决方案1】:

第一件事,

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

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

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

docker 日志显示三个 I/O 流,当它们 运行,称为 STDIN、STDOUT 和 STDERR。 STDOUT 通常是命令的正常输出,STDERR 通常用于输出错误信息。默认情况下,码头工人 日志显示该命令的 docker 的 STDOUT 和 STDERR

docker-containers-logging

现在 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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-05
    • 2022-07-07
    • 2016-11-12
    • 2015-07-27
    相关资源
    最近更新 更多