【发布时间】:2011-02-09 22:00:23
【问题描述】:
我在 heroku 上有一个小应用程序。每当我想查看日志时,我都会转到命令行并执行
heroku logs
那只显示了大约 100 行。有没有办法在heroku上查看我们应用程序的完整日志?
【问题讨论】:
我在 heroku 上有一个小应用程序。每当我想查看日志时,我都会转到命令行并执行
heroku logs
那只显示了大约 100 行。有没有办法在heroku上查看我们应用程序的完整日志?
【问题讨论】:
更新(感谢 dawmail333):
heroku logs -n 1500
或者,实时跟踪日志
heroku logs -t
如果你需要超过几千行,你可以使用 heroku 的Syslog Drains
或者(旧方法):
$ heroku run rails c
File.open('log/production.log', 'r').each_line { |line| puts line }
【讨论】:
heroku logs -n 1500,这是 Cedar 上可用的最佳方法。如果你需要更多的行,你需要一个 syslog 消耗:devcenter.heroku.com/articles/logging#syslog_drains
heroku run rails c。更新了!
heroku run cat log/production.log?
heroku 中的日志记录有了很大的改进!
$ heroku logs -n 500
更好!
$ heroku logs --tail
参考:http://devcenter.heroku.com/articles/logging
更新
这些不再是附加组件,而是默认功能的一部分 :)
【讨论】:
【讨论】:
heroku run bash 上启动一个新的测功机来托管 bash 命令。该测功机上的文件系统不会包含来自“活动”网络测功机的任何日志文件,因此这种方法不起作用。
Heroku 将日志视为按时间排序的事件流。出于各种原因,不建议在此类环境中访问文件系统上的*.log 文件。
首先,如果您的应用程序有多个测功机,那么每个日志文件仅代表您应用程序事件的部分视图。您必须手动聚合所有文件才能获得完整视图。
其次,Heroku 上的文件系统是短暂的,这意味着每当您的 dyno 重新启动或移动(大约发生在once a day)时,日志文件都会丢失。因此,您最多只能查看该单个测功机的日志。
最后,在 Cedar stack 上运行 heroku console 甚至 heroku run bash 不会将您连接到当前正在运行的测功机。它专门为bash 命令生成一个新命令。这称为one-off process。因此,您将找不到在为heroku run 生成的一个上运行实际 http 进程的其他测功机的日志文件。
Logging 和一般可见性是 Heroku 上的一等公民,有多种工具可以解决这些问题。首先,要查看应用程序事件的实时流跨所有测功机和应用程序/堆栈的所有层,请使用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 ...
这非常适合现在观察应用程序的行为。如果您想将日志存储更长时间,您可以使用提供日志保留、警报和触发器的众多 logging add-ons 之一。
最后,如果您想自己存储日志文件,您可以设置自己的syslog drain 以接收来自 Heroku 的事件流并自行进行后处理/分析。
总结:不要使用heroku console或heroku run bash查看静态日志文件。使用heroku logs 或日志插件将您的应用程序导入 Heroku 的日志事件流。
【讨论】:
heroku logs -t 向我们展示了实时日志。
【讨论】:
将free Papertrail plan 之类的内容添加到您的应用中可能是值得的。零配置,您可以获得 7 天的日志数据,最高可达 10MB/天,并且可以搜索 2 天的日志。
【讨论】:
另请参阅各个流/过滤器。
例如,仅跟踪您的应用程序日志
heroku logs --source app -t
或者只查看路由器日志
heroku logs --ps router
或者把它们串起来
heroku logs --source app --ps worker
太好了..
【讨论】:
heroku logs --ps web.1 (with 1 dyno)
要查看您的日志,我们有:
heroku logs
--num(或-n)选项。
heroku logs -n 200
heroku logs --tail
heroku logs --app your_app_name
【讨论】:
要查看详细日志,您需要在production.rb 文件中添加两行:
config.logger = Logger.new(STDOUT)
config.logger.level = Logger::DEBUG
然后通过运行
heroku logs -t
你可以看到详细的日志。
【讨论】:
我更喜欢这样做
heroku logs --tail | tee -a herokuLogs
您可以让脚本在后台运行,您可以随时以您想要的方式从文本文件中过滤日志。
【讨论】:
您可以使用 Heroku 的命令行访问您的日志文件 接口 (CLI Usage)。
如果 Heroku 的 CLI 已安装并且您知道您的应用程序名称(如 https://myapp.herokuapp.com/),那么您可以运行以下命令:
heroku logs --tail --app=myapp
您还可以使用以下方式实时访问日志:
heroku logs --source app --tail --app=myapp
如果日志告诉你这样的事情:
npm 错误!可以在以下位置找到此运行的完整日志:
npm 错误! /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
我的解决方案是在应用程序第一次启动时获取完整的日志,例如:
heroku logs -n 1500 > log
然后添加fgrep -vf 以使其保持最新状态,例如:
heroku logs -n 1500 > newlog ; fgrep -vf log newlog >> log
对于连续记录,只需每隔 x 分钟(或秒)使用 watch 对其进行迭代。
【讨论】:
对于 WAR 文件:
我没有使用 github,而是直接上传了一个 WAR 文件(我发现它更容易更快)。
所以以下对我有帮助:
heroku logs --app appname
希望对某人有所帮助。
【讨论】:
我建议使用插件,我使用 Logentries。要使用它,请在命令行中运行:
heroku addons:create logentries:le_tryit
(该命令为免费帐户创建插件,但显然您可以根据需要进行升级)
Logentries 允许您每月最多保存 5GB 的日志量。该信息可在过去 7 天内通过他们的命令搜索进行搜索,并且具有实时警报。
因此,为了回答您的问题,通过使用此插件,您可以确保当您达到 Heroku 默认保存的 1500 行时,您的日志不再丢失。 希望这可以帮助!祝你有美好的一天!
【讨论】:
您需要使用-t 或--tail 选项,并且需要定义您的heroku 应用名称。
heroku logs -t --app app_name
【讨论】:
heroku logs -t 向我们展示了实时日志。
heroku logs -n 1500 用于特定数量的日志
但我仍然建议使用具有一定好处并且有免费基本计划的纸质追踪插件。
【讨论】:
你可以使用
heroku logs -n 1500
但这不是推荐的方法(换句话说,它不会向您展示真实的图片)
我建议您插入一些日志记录工具。 ( sumoLogic, paper trail n all ) 作为附加组件
它们都有免费版本(几乎没有限制,但对于小型应用程序或开发环境来说足够了,这将提供很好的洞察力和分析日志的工具)
【讨论】:
您需要实现一些日志排空,并且应该在那里排空您的日志,以查看所有日志(以及管理历史日志):
heroku drains:add syslog+tls://splunk-server.com:514 -a app_name
然后登录到您的 splunk 服务器并搜索任意数量的日志。我正在使用 Splunk,这对我来说非常好。
第二个选项 - 您可以购买附加到您的应用程序,如下所示:(我没有使用这些选项,但是这些是可用的)。
您还可以查看以下选项:如果您想要 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>
以下命令将显示 1000 来自 heroku 的日志行数
heroku logs -n 1000 -a <app_name>
请注意,只有 1500 行最新的日志可用,其余的将从 heroku dyno 中删除。
【讨论】:
我遇到了这样一种情况,在我的应用程序仪表板中,当我去:
更多 > 查看日志
我不会得到输出,只是挂了......
于是我google了一下,发现this:
Heroku CLI 插件,用于列出和创建 Heroku 应用程序的构建。
我安装并运行:
heroku builds -a example-app /* Lists 10 most recently created builds for example-app, that's where you get the id for the next step*/
然后输入:
heroku builds:output your-app-id-number -a example-app
就是这样,您应该恢复通常在仪表板 GUI 或本地看到的内容。
希望这可以帮助像我这样的人!
【讨论】: