heroku-如何查看所有日志


468

我在heroku上有一个小应用程序。每当我想查看日志时,我都会进入命令行并执行

heroku logs

那只告诉我大约100行。无法在heroku上查看我们的应用程序的完整日志吗?

Answers:


784

更新(由于dawmail333):

heroku logs -n 1500

或者,将日志实时拖尾

heroku logs -t 

Heroku日志文档

如果您需要数千行,则可以使用heroku的Syslog Drains

或者(旧方法):

$ heroku run rails c
File.open('log/production.log', 'r').each_line { |line| puts line }

5
现在这不适用于雪松堆栈。有没有人找到新的选择?
nathanvda 2011年

2
只需使用heroku logs -n 1500,这是Cedar上可用的最佳方法。如果您需要的行数更多,则需要系统日志消耗:devcenter.heroku.com/articles/logging#syslog_drains
Liam Dawson

这对于资产管道问题也是有用的提示:heroku logs -n 2000 | grep的“预编译”
戴夫·柯林斯

实际上是heroku run rails c。更新!
glebm

3
对于旧方法,为什么要运行Rails控制台而不是heroku run cat log/production.log
克洛伊(Chloe)2015年


52

Heroku将日志视为按时间顺序排列的事件流。*.log出于多种原因,在这种环境中不建议访问文件系统上的文件。

首先,如果您的应用程序具有多个dyno,则每个日志文件仅代表应用程序事件的部分视图。您必须手动汇总所有文件才能获得完整视图。

其次,Heroku上的文件系统是短暂的,这意味着无论何时重新启动或移动测功机(大约每天发生一次),日志文件都会丢失。因此,您最多只能查看该单次dyno日志的一天。

最后,在Cedar堆栈上运行heroku console甚至heroku run bash无法将您连接到当前正在运行的dyno。它为bash命令生成了一个新命令。这称为一次性过程。因此,您将找不到其他dynos的日志文件,这些其他dynos在为生成的dynos上运行实际的http进程heroku run

日志记录和可见性通常是Heroku的头等公民,并且有几种工具可以解决这些问题。首先,要查看跨所有dyno以及应用程序/堆栈的所有层的应用程序事件的实时流,请使用heroku logs -t命令将输出拖至终端。

$ heroku logs -t
2010-09-16T15:13:46-07:00 app[web.1]: Processing PostController#list (for 208.39.138.12 at 2010-09-16 15:13:46) [GET]
2010-09-16T15:13:46-07:00 app[web.1]: Rendering template within layouts/application
2010-09-16T15:13:46-07:00 heroku[router]: GET myapp.heroku.com/posts queue=0 wait=0ms service=1ms bytes=975
2010-09-16T15:13:47-07:00 app[worker.1]: 2 jobs processed at 16.6761 j/s, 0 failed ...

这非常适合立即观察应用程序的行为。如果要长时间存储日志,可以使用提供日志保留,警报和触发器的许多日志附加组件之一。

最后,如果您想自己存储日志文件,则可以设置自己的系统日志流失,以接收来自Heroku的事件流并对自己进行后处理/分析。

摘要:不要使用heroku consoleheroku run bash查看静态日志文件。使用heroku logs或日志记录插件将其传递到Heroku的应用程序日志事件流中。


23

另请参见各个流/过滤器。

例如,仅尾随您的应用程序日志

heroku logs --source app -t

或仅查看路由器日志

heroku logs --ps router

或将它们链接在一起

heroku logs --source app --ps worker

超好的..


5
要仅查看我的应用程序的日志,我要做:(heroku logs --ps web.1带有1个dyno)
Maxence

22

上面的答案非常有帮助,它将帮助您从命令行查看。而如果您想通过GUI进行操作,则必须登录到heroku帐户,然后选择您的应用程序,最后单击查看日志

影像检视


1
从单击“查看日志”选项开始,此方法仅向您显示日志输出。因此,除非您只是想要在不进入控制台的情况下实质上尾随日志,否则它就没有用。
杰里米·甘特

2
没有任何选择可以从此UI本身查看所有日志吗?
Sunil Garg

16

遵循Heroku日志记录

要查看您的日志,我们有:

  1. logs命令默认检索100条日志行。

heroku logs

  1. 显示最多1500行,--num(或-n)选项。

heroku logs -n 200

  1. 实时显示日志

heroku logs --tail

  1. 如果您在heroku上有很多应用程序

heroku logs --app your_app_name



8

您可以使用Heroku的命令行界面(CLI用法)访问日志文件。

如果已安装Heroku的CLI,并且您知道应用程序名称(如https://myapp.herokuapp.com/),则可以运行以下命令:

heroku logs --tail --app=myapp

您还可以使用以下命令实时访问日志:

heroku logs --source app --tail --app=myapp

如果日志告诉您这样的内容:

npm ERR!可以在以下位置找到此运行的完整日志:

npm ERR!/app/.npm/_logs/2017-07-11T08_29_45_291Z-debug.log

然后,您还可以通过Heroku CLI使用bash终端访问它们:

heroku run bash --app=myapp
less ./.npm/_logs/2017-07-11T08_29_45_291Z-debug.log

我明白了/usr/bin/less: cannot execute binary files
迈克尔·富尔顿


4

对于WAR文件:

我没有使用github,而是直接上传了一个WAR文件(我发现它更容易,更快捷)。

因此以下内容对我有所帮助:

heroku logs --app appname

希望它会帮助某人。


4

您需要使用-t--tail选项,并且需要定义您的heroku应用名称。

heroku logs -t --app app_name

4

我的解决方案是在应用程序第一次启动时获取完整的日志,例如:

heroku logs -n 1500 > log

然后添加fgrep -vf以使其保持最新状态,例如:

heroku logs -n 1500 > newlog ; fgrep -vf log newlog >> log

对于连续记录,只需每隔x分钟(或秒)使用watch对其进行迭代。


2

要查看详细的日志,您需要在production.rb文件中放入两行:

config.logger = Logger.new(STDOUT)
config.logger.level = Logger::DEBUG

然后通过运行

heroku logs -t

您可以查看详细的日志。


2

我更喜欢这样

heroku logs --tail | tee -a herokuLogs

您可以让脚本在后台运行,并且可以随时随地从文本文件中过滤日志。


谢谢,花了我一段时间来滚动,但终于找到了解决方案。
Meinkraft

2

您需要实现一些日志清除,并且应该在那里清除日志,以查看所有日志(以及管理历史日志):

  1. 第一种选择 -可以使用Splunk:您可以像以下方式耗尽所有日志:
heroku drains:add syslog+tls://splunk-server.com:514 -a app_name

然后登录到您的splunk服务器并搜索任意数量的日志。我正在使用Splunk,这对我来说效果很好。

  1. 第二种选择 -您可以购买App的插件,如下所示:(我没有使用这些选项,但是这些是可用的)。

    • Timber.io
    • 相扑逻辑
    • LogEnteries
    • 对数DNA
    • 纸足迹

您还可以查看以下选项:如果您希望将日志以JSON格式保存,因为将日志推送到Splunk / ELK等外部系统会有所帮助,因此搜索起来也很容易(在性能上也很合理)在JSON中。

https://github.com/goodeggs/heroku-log-normalizer

它没有Readme.md,但是在https://github.com/goodeggs/bites/issues/20给出了一些解释。

最后

而且,您始终可以使用其他用户已经提到的以下命令:

以下命令将在heroku上生成日志

heroku logs -t -a <app_name>

以下命令将显示来自heroku 的1000行日志

heroku logs -n 1000 -a <app_name>

请注意,只有1500条最新的日志行可用,并且其余的行已从heroku dyno中删除。


1

我建议使用插件,我使用Logentries。要使用它,请在命令行中运行:

heroku addons:create logentries:le_tryit

(该命令为免费帐户创建了插件,但显然您可以根据需要进行升级)

Logentries可让您每月节省多达5GB的日志量。该信息可在过去7天内通过其命令搜索进行搜索,并且具有实时警报。

因此,为回答您的问题,通过使用此插件,您可以确保当达到Heroku默认保存的1500行时,日志不会丢失。希望这可以帮助!祝你有美好的一天!


1

heroku logs -t 向我们显示实时日志。 heroku logs -n 1500对于特定数量的日志

但是我仍然建议您使用具有某些优点并且有免费基本计划的纸质追踪插件。


0

您可以使用 heroku logs -n 1500

但这不是推荐的方法(换句话说,它不会向您显示真实情况)

我建议您插入一些日志记录工具。(sumoLogic,纸张记录为n all)作为附加组件

它们都有一个免费版本(没有什么限制,尽管对于一个小型应用程序或开发环境已经足够了,这将提供很好的见解和分析日志的工具)


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.