我在heroku上有个小应用。每当我想要查看日志时,我就转到命令行并执行
heroku logs
它只显示了大约100行。是不是没有办法在heroku上查看我们应用程序的完整日志?
我在heroku上有个小应用。每当我想要查看日志时,我就转到命令行并执行
heroku logs
它只显示了大约100行。是不是没有办法在heroku上查看我们应用程序的完整日志?
当前回答
您可以使用Heroku的命令行访问您的日志文件 接口(CLI用法)。
如果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 - 11 - t08_29_45_291z debug.log
然后你也可以通过Heroku CLI使用bash终端访问它们:
heroku run bash --app=myapp
less ./.npm/_logs/2017-07-11T08_29_45_291Z-debug.log
其他回答
要查看详细的日志,需要在产品中放入两行。rb文件:
config.logger = Logger.new(STDOUT)
config.logger.level = Logger::DEBUG
然后通过跑步
heroku logs -t
您可以查看详细的日志。
如果你的代码是python, 您可以使用heroku3 pip库来访问Heroku应用程序的日志。 首先,您需要通过运行来安装库。 PIP安装heroku3
然后,您可以使用以下代码访问您的日志: 进口heroku3
# Connect to the Heroku API
conn = heroku3.from_key('YOUR_API_KEY')
# Get the app you want to access logs for
app = conn.app('YOUR_APP_NAME')
# Access the logs
logs = app.logs().stream()
# Print the logs
for line in logs:
print(line)
请确保将YOUR_API_KEY和YOUR_APP_NAME替换为应用程序的适当值。
此外,你还可以使用heroku日志——尾巴 在你的命令行中输入Heroku应用程序的日志流。确保你已经登录并有权访问该应用程序。
你需要有一些日志排水实现,应该排水你的日志,以查看所有的日志(管理历史日志以及):
第一个选择- Splunk可以使用:你可以排出你所有的日志,如:
heroku drains:add syslog+tls://splunk-server.com:514 -a app_name
然后登录到splunk服务器,搜索任意数量的日志。我正在使用Splunk,这对我来说是完美的。
第二个选项-你可以购买添加到你的应用程序,如下所示:(我没有使用这些选项,但这些是可用的)。 Timber.io 相扑逻辑 LogEnteries 日志DNA Papertrail
你也可以看看下面的选项:如果你想拥有你的 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中删除。
Heroku logs -t显示了活动日志。 Heroku日志-n 1500表示日志数量
但我仍然建议使用纸质记录插件,它有一定的好处,并有免费的基本计划。
Heroku将日志视为有时间顺序的事件流。由于各种原因,不建议在这样的环境中访问文件系统上的*.log文件。
首先,如果你的应用程序有多个dyno,那么每个日志文件只代表了应用程序事件的部分视图。你必须手动聚合所有文件来获得完整的视图。
其次,Heroku上的文件系统是短暂的,这意味着无论何时您的dyno被重新启动或移动(大约每天发生一次),日志文件都会丢失。所以你最多只能看到一个动态日志的一天。
最后,在Cedar stack上运行heroku控制台甚至heroku run bash不会将您连接到当前运行的dyno。它会为bash命令生成一个新的命令。这被称为一次性过程。因此,您将无法在为heroku运行而生成的dynos上找到运行实际http进程的其他dynos的日志文件。
日志记录和可见性是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 ...
这对于现在观察应用程序的行为非常有用。如果您想要长时间存储日志,您可以使用提供日志保留、警报和触发器的众多日志附加组件之一。
最后,如果你想自己存储日志文件,你可以设置自己的syslog引流来接收来自Heroku的事件流,然后自己进行后期处理/分析。
总结:不要使用heroku控制台或heroku run bash查看静态日志文件。使用Heroku日志或日志附加组件将Heroku的日志事件流导入应用程序。