如何让 python 日志显示在 Heroku 日志插件中

问题描述 投票:0回答:1

我在 Heroku 项目中运行一些 python 代码。具体来说,它正在运行 scrapy。 Scrapy 使用 python 的本机日志记录功能生成日志(source)。我的代码也有

print
语句作为我自己的黑客日志记录。

当我在本地或通过 CLI bash 运行代码到我的 Heroku 实例中时,我会在代码运行时看到日志,例如:

2024-04-04 13:20:28 [scrapy.core.engine] INFO: Spider opened
2024-04-04 13:20:28 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2024-04-04 13:20:28 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023
2024-04-04 13:20:28 [root] INFO: Searches left - 3601
This could be a random log from a print() statement

我正在尝试将我的 Heroku 实例连接到他们的日志插件之一,以便能够更好地搜索过去的日志。我已经安装了 Mezmo 和 Papertrail。相同的日志流入两者,但它们仅显示为“系统日志”,例如:

Apr 4 09:18:45 paymosaic app[api] notice Release v40 created by user [email protected]
Apr 4 09:18:45 paymosaic app[api] notice Update LOGDNA by logdna by user [email protected]

所有 scrapy 日志都不会进入附加组件。我需要配置什么才能让代码的日志流通吗?

heroku logging papertrail-app
1个回答
0
投票

这应该或多或少“正常工作”。

Heroku 聚合运行时日志,包括 您打印到

stdout
stderr
的内容,到单个流中:

Heroku 应用程序的日志来自其所有正在运行的进程、系统组件和支持服务的输出流。 Heroku 的 Logplex 将所有来源的日志流路由到单个通道,为全面日志记录奠定了基础。

该流是 Papertrail 等日志插件通常摄取的内容。

这似乎不起作用的原因是您正在以交互方式运行命令。命令通过

heroku run
在一次性测功机上运行。一次性测功机的一个显着特征是它们不会对日志流做出贡献(强调):

一次性测功机连接到您的终端,并为

STDIN
STDOUT
提供逐个字符的 TCP 连接。这允许您像控制台一样使用交互式进程。 由于
STDOUT
将进入您的终端,应用程序日志中记录的唯一内容是测功机的启动和关闭。

如果您通过 Heroku Scheduler 运行爬虫(尽管这在技术上也是一次性的测功机)您应该看到它的输出显示在您的日志中

计划作业的日志作为进程进入您的日志

scheduler.X

$ heroku logs --ps scheduler.1
2011-02-04T14:10:16-08:00 heroku[scheduler.1]: State changed from created to starting
2011-02-04T14:10:16-08:00 app[scheduler.1]: Starting process with command `bin/clean_sessions`
2011-02-04T14:10:19-08:00 app[scheduler.1]: Deleting stale sessions...
2011-02-04T14:10:27-08:00 app[scheduler.1]: done.
2011-02-04T14:10:28-08:00 heroku[scheduler.1]: State changed from up to complete
© www.soinside.com 2019 - 2024. All rights reserved.