【问题标题】:.net output in Docker logsDocker 日志中的 .net 输出
【发布时间】:2018-02-16 00:39:37
【问题描述】:

我正在尝试在我的 Docker 日志中获取日志输出 (Console.WriteLine(..)),但我的使用率为零。

我试过了:

Console.WriteLine(..)

Trace.WriteLine(..)

刷新控制台,刷新跟踪。

我在调试时可以在 VS 输出窗口中看到这些输出,因此它们会出现在某个地方。

我在 windows Container 上,使用 microsoft/aspnet:4.7.1-windowsservercore-1709net4.7

这些是我在容器启动时得到的日志

 docker logs -f exportapi
ERROR ( message:Cannot find requested collection element. )
Applied configuration changes to section "system.applicationHost/applicationPools" for "MACHINE/WEBROOT/APPHOST" at configuration commit path "MACHINE/WEBROOT/APPHOST"

【问题讨论】:

  • 您能确认当您-it 附加到容器时,您会看到您所期望的吗? IE。澄清这是关于 docker logs 的问题还是更多关于您的应用程序(控制台应用程序模板?)日志记录偏好的问题,因为它们最终设置在容器内
  • 我不确定你要我做什么 - -it 做什么?我不需要运行某种外壳吗?我希望我的 console.WriteLine 显示在 STDOUT - 它应该是哪个?
  • 我想我已经找到了问题——入口点不是我的应用程序——而是 ServiceMonitor.exe(IIS 容器)——所以它吞噬了所有的输出——我会在我发布解决方案时找一个。
  • 您在添加该命令和输出的部分回答了我的问题;我在问你在做docker run -it 时是否看到了你的期望
  • 我想我会的 - 原来这是一个 IIS 的东西......因为图像有一个 ServiceMonitor 的入口点,它吞噬了我所有的控制台日志记录......

标签: asp.net docker iis-10


【解决方案1】:

您有许多不错的横向选项,例如自包含/服务器包含的可执行文件(例如,使用 microsoft/dotnet:runtime 的 Dotnet Core 将默认使用 Console.WriteLine 代理 Console.WriteLine 脱离 dotnet new web 脚手架)。零配置 STDOUT 日志记录从来都不是 IIS 上的常用方法,但这些现代选项将其作为最佳实践(日志记录应该是透明的支持服务)。

如果您想要或需要三个程序/程序集的链来启动您的 Web 服务(ServiceMonitor、W3SVC,最后是您的程序集),那么您需要这样的东西:https://blog.sixeyed.com/relay-iis-log-entries-to-read-them-in-docker/

不幸的是,覆盖入口点以跟踪比默认图像更多的日志是一种常见的黑客行为(不仅仅是在微软领域)。所以,在你的情况下,我相信你至少需要一个跟踪监听器配置来发出Trace.WriteLine,然后用上面的方法来发出它:https://docs.microsoft.com/en-us/dotnet/framework/debug-trace-profile/how-to-create-and-initialize-trace-listeners

【讨论】:

  • Core 目前不在我们的路线图上,但会解决我的问题 - 我认为问题是因为 ServiceMonitor 吞噬了一切。
  • @Stuart.Sklinar 如果有意义的话,它可能是您提取业务逻辑并拥有多个驱动程序项目(这是一种常见模式)的一种选择;其中之一可以是自托管的,无论您是否使用 Core (docs.microsoft.com/en-us/aspnet/web-api/overview/…)
  • 我完全同意,但我需要的就是剃牦牛。
猜你喜欢
  • 1970-01-01
  • 2016-07-13
  • 2018-05-22
  • 1970-01-01
  • 2020-10-12
  • 1970-01-01
  • 2019-08-21
  • 2011-08-24
  • 2012-04-21
相关资源
最近更新 更多