我创建了一个基本的 .NET Web 应用程序并将其发布到我的 EB 环境(Linux 平台上的 .NET)上。日志请求或 CloudWatch 中没有发送任何日志。
我想我应该从他们的文档查看示例应用程序,看看它如何生成日志,但我无法弄清楚。我的理解是,微软没有开箱即用的写入文件选项,因此我期望第三方库和一些配置可以写入文件。我还没找到。
我将调试器附加到在 Windows 计算机上运行 dll 的 dotnet 进程,发现它是一个非常基本且最小的 ASP.NET 应用程序,就像我的一样。我什至找不到他们包含在代码库中的 AWSSDK 的引用。所有
using
语句都是 Microsoft 命名空间。
我在
appsettings.json
或 web.config
文件中没有看到任何告诉它将日志写入何处的内容(我认为 web.config 只在 IIS 中使用)。
我唯一看到的是它们包含一些使用
.ebextensions\logging.conf
: 的日志文件
files:
"/opt/elasticbeanstalk/tasks/bundlelogs.d/01-sample-app.conf":
content: |
/tmp/sample-app*
"/opt/elasticbeanstalk/tasks/taillogs.d/01-sample-app.conf":
content: |
/tmp/sample-app.log
但是这些sample-app.log 文件是怎么写的呢?要运行的 dll 的名称是 DotNetAppSingle.dll。 “样本应用程序”不是我在任何地方都能找到的术语。
这让我想到了我的总体问题:如何在不显式写入文件和像此应用程序那样的第三方依赖项的情况下生成日志?他们到底在施展什么秘密魔法?
好吧,我发现
.ebextensions\logging.conf
实际上并没有做任何事情,而是在转移注意力。 web.config
也完全没有必要。
一直以来的问题是,我的项目中有一个
Procfile
,只有一行:web: dotnet MyApp.dll
,正如文档中某处所建议的那样。这会覆盖它为 .NET 项目运行的默认命令 包括将 stdout 重定向到 /var/log/web.stdout.log
。我注意到示例应用程序没有 Procfile。当我取出 Procfile 后,日志记录就按预期工作了。
我尝试将我的 Procfile 修改为类似
worker: dotnet MyApp.dll >> /var/log/web.stdout.log 2>&1
的内容,但 EB 不喜欢这样,并且应用程序未部署。目前,没有 Procfile 对我来说没问题,但了解如何使用自定义 Procfile 获取默认重定向会很有趣。