我在heroku上有一个小应用程序 . 每当我想看日志时,我都会去命令行做
heroku logs
这只能让我看到大约100行 . 有没有办法在heroku上查看我们的应用程序的完整日志?
您可以使用Heroku的命令行界面(CLI Usage)访问您的日志文件 .
如果安装了Heroku的CLI并且您知道应用程序名称(如 https://myapp.herokuapp.com/ ),则可以运行以下命令:
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
heroku中的日志记录有很大改进!
$ heroku logs -n 500
更好!
$ heroku logs --tail
参考:http://devcenter.heroku.com/articles/logging
UPDATED
这些不再是附加组件,而是默认功能的一部分:)
我建议使用插件,我使用Logentries . 要使用它,请在命令行中运行:
heroku addons:create logentries:le_tryit
(该命令为免费帐户创建插件,但显然您可以根据需要升级)
Logentries允许您每月节省高达5GB的日志量 . 该信息可在过去7天内通过命令搜索进行搜索,并且具有实时警报 .
因此,要回答您的问题,通过使用此插件,您可以确保当您达到Heroku默认保存的1500行时,您的日志不会再丢失 . 希望这可以帮助!祝你有美好的一天!
Update (thanks to dawmail333):
heroku logs -n 1500
或者,将日志拖到现场
heroku logs -t
Heroku log documentation
如果你需要超过几千行,你可以使用heroku的Syslog Drains
或者(旧方法):
$ heroku run rails c File.open('log/production.log', 'r').each_line { |line| puts line }
我的解决方案是在应用程序第一次启动时获取完整日志,例如:
heroku logs -n 1500 > log
然后添加 fgrep -vf 以使其保持最新,例如:
fgrep -vf
heroku logs -n 1500 > newlog ; fgrep -vf log newlog >> log
对于连续记录,只需每隔x分钟(或秒)使用watch进行迭代 .
可能值得将free Papertrail plan之类的内容添加到您的应用中 . 零配置,您可以获得7天的日志数据,最高可达10MB /天,并可以搜索2天的日志 .
对于WAR文件:
我没有使用github,而是直接上传了一个WAR文件(我发现它更容易,更快) .
以下帮助我:
heroku logs --app appname
希望它会帮助某人 .
关注heroku logging
要查看您的日志,我们有:
heroku日志
heroku日志-n 200
heroku logs --tail
heroku logs --app your_app_name
heroku logs -t 向我们展示了实时日志 .
要查看详细日志,您需要在 production.rb 文件中放置两行:
production.rb
config.logger = Logger.new(STDOUT) config.logger.level = Logger::DEBUG
然后跑步
你可以看到详细的日志 .
对于雪松堆栈,请参阅:
https://devcenter.heroku.com/articles/oneoff-admin-ps
你需要运行:
heroku运行bash ...
您需要使用 -t 或 --tail 选项,您需要定义您的heroku应用程序名称 .
-t
--tail
heroku logs -t --app app_name
另请参阅各个流/过滤器 .
例如,仅列出您的应用程序日志
heroku logs --source app -t
或者只查看路由器日志
heroku logs --ps router
或者把它们连在一起
heroku logs --source app --ps worker
超好的..
Heroku将日志视为按时间排序的事件流 . 出于各种原因,不建议在此类环境中访问文件系统上的 *.log 文件 .
*.log
首先,如果您的应用有多个dyno,那么每个日志文件只代表您应用事件的部分视图 . 您必须手动聚合所有文件才能获得完整视图 .
其次,Heroku上的文件系统是短暂的意思,无论何时重启或移动dyno(发生在once a day左右),日志文件都会丢失 . 所以你最多只能得到一天's view into that single dyno'的日志 .
最后,在Cedar stack上运行 heroku console 甚至 heroku run bash 并没有将您连接到当前正在运行的dyno . 它专门为 bash 命令生成一个新的命令 . 这称为one-off process . 因此,您将找不到运行实际http进程的其他dynos的日志文件,该进程是为 heroku run 生成的 .
heroku console
heroku run bash
bash
heroku run
Logging,一般来说,可见性是Heroku的一等公民,有几种工具可以解决这些问题 . 首先,要查看所有dynos和应用程序/堆栈的所有层的应用程序事件的实时流,请使用 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 --tail | tee -a herokuLogs
您可以让脚本在后台运行,您只需按照自己想要的方式从文本文件中过滤日志 .
以上答案非常有用,它将帮助您从命令行查看 . 如果您想从GUI进行操作,那么您必须登录到您的heroku帐户,然后选择您的应用程序,最后单击查看日志
16 回答
您可以使用Heroku的命令行界面(CLI Usage)访问您的日志文件 .
如果安装了Heroku的CLI并且您知道应用程序名称(如
https://myapp.herokuapp.com/
),则可以运行以下命令:您还可以使用以下方法访问实时流中的日志:
如果日志告诉你这样的事情:
然后你也可以通过Heroku CLI使用bash终端访问它们:
heroku中的日志记录有很大改进!
更好!
参考:http://devcenter.heroku.com/articles/logging
UPDATED
这些不再是附加组件,而是默认功能的一部分:)
我建议使用插件,我使用Logentries . 要使用它,请在命令行中运行:
heroku addons:create logentries:le_tryit
(该命令为免费帐户创建插件,但显然您可以根据需要升级)
Logentries允许您每月节省高达5GB的日志量 . 该信息可在过去7天内通过命令搜索进行搜索,并且具有实时警报 .
因此,要回答您的问题,通过使用此插件,您可以确保当您达到Heroku默认保存的1500行时,您的日志不会再丢失 . 希望这可以帮助!祝你有美好的一天!
Update (thanks to dawmail333):
或者,将日志拖到现场
Heroku log documentation
如果你需要超过几千行,你可以使用heroku的Syslog Drains
或者(旧方法):
我的解决方案是在应用程序第一次启动时获取完整日志,例如:
heroku logs -n 1500 > log
然后添加
fgrep -vf
以使其保持最新,例如:heroku logs -n 1500 > newlog ; fgrep -vf log newlog >> log
对于连续记录,只需每隔x分钟(或秒)使用watch进行迭代 .
可能值得将free Papertrail plan之类的内容添加到您的应用中 . 零配置,您可以获得7天的日志数据,最高可达10MB /天,并可以搜索2天的日志 .
对于WAR文件:
我没有使用github,而是直接上传了一个WAR文件(我发现它更容易,更快) .
以下帮助我:
希望它会帮助某人 .
关注heroku logging
要查看您的日志,我们有:
heroku logs -t
向我们展示了实时日志 .要查看详细日志,您需要在
production.rb
文件中放置两行:然后跑步
你可以看到详细的日志 .
对于雪松堆栈,请参阅:
https://devcenter.heroku.com/articles/oneoff-admin-ps
你需要运行:
heroku运行bash ...
您需要使用
-t
或--tail
选项,您需要定义您的heroku应用程序名称 .另请参阅各个流/过滤器 .
例如,仅列出您的应用程序日志
或者只查看路由器日志
或者把它们连在一起
超好的..
Heroku将日志视为按时间排序的事件流 . 出于各种原因,不建议在此类环境中访问文件系统上的
*.log
文件 .首先,如果您的应用有多个dyno,那么每个日志文件只代表您应用事件的部分视图 . 您必须手动聚合所有文件才能获得完整视图 .
其次,Heroku上的文件系统是短暂的意思,无论何时重启或移动dyno(发生在once a day左右),日志文件都会丢失 . 所以你最多只能得到一天's view into that single dyno'的日志 .
最后,在Cedar stack上运行
heroku console
甚至heroku run bash
并没有将您连接到当前正在运行的dyno . 它专门为bash
命令生成一个新的命令 . 这称为one-off process . 因此,您将找不到运行实际http进程的其他dynos的日志文件,该进程是为heroku run
生成的 .Logging,一般来说,可见性是Heroku的一等公民,有几种工具可以解决这些问题 . 首先,要查看所有dynos和应用程序/堆栈的所有层的应用程序事件的实时流,请使用
heroku logs -t
命令将输出拖尾到您的终端 .这对于立即观察应用程序的行为非常有用 . 如果要将日志存储更长时间,可以使用提供日志保留,警报和触发器的众多日志中的一个logging add-ons .
最后,如果您想自己存储日志文件,您可以设置自己的syslog drain以接收来自Heroku的事件流并自行进行后处理/分析 .
摘要:请勿使用
heroku console
或heroku run bash
查看静态日志文件 . 管使用heroku logs
或日志加载项进入Heroku的应用程序日志事件流 .我更喜欢这样做
您可以让脚本在后台运行,您只需按照自己想要的方式从文本文件中过滤日志 .
以上答案非常有用,它将帮助您从命令行查看 . 如果您想从GUI进行操作,那么您必须登录到您的heroku帐户,然后选择您的应用程序,最后单击查看日志