我们都经历过这样的事情:您的应用程序发生了崩溃,而您要做的第一件事就是检查日志。但如,如果无法检查日志该怎么办? IBM Bluemix™ 是用来在可靠的、完全免费的环境中托管您的应用程序的一款好产品,但调试已经很好地存在的应用程序或 buildpack 从一开始可能就不是一件轻松的事。
当应用程序运行在 Bluemix 中时,您可以通过 Bluemix UI 或通过 cf files
命令在容器中查看日志。但是,只要应用程序已经存在,或者在初始化期间没有打开分配的端口,那么容器就会关闭,这使得您无法查看日志。通常,在 cf logs
命令的输出中也无法查看运行时日志。
如果无法查看任何日志输出,就无法了解哪儿出了错,也就不知道该如何做。您可以从本文中了解如何查看日志。
阅读: 查看 Bluemix 应用程序的日志
阅读: 使用您自定义的 buildpack
阅读: 移动应用程序的自动崩溃报告
阅读: 当您的应用程序崩溃时,您一定想了解所有的信息
“ 当您的运行时崩溃的时候,脚本会移动和重命名日志文件,然后将它上传到您设置的 bluemix-log-server 应用程序。 ”
获取 log-server 代码
https://hub.jazz.net/project/jsutton/brokenNodeApp/overview" rel="nofollow,noindex">获取一个已崩溃的示例应用程序的代码
bluemix-log-server 应用程序被设计用于充当一个生产应用程序,而且没有安全性。该应用程序(以及本教程)旨在帮助您在开发期间调试您的应用程序或 buildpack。我们推荐您在使用服务器 URL 时保持其私有性,并在不使用它时立即从 Bluemix 中删除它。对于生产环境的日志服务,可以使用其他许多可用选项中的一个选项。
name
和 host
值与应用程序的名称相匹配。 请注意,在项目代码中,除了 package.json 和 manifest.yml 之外,只有一个主文件:app.js,它包含让 log-server 应用程序正常工作所需的一切。app.js 文件使用 Express 来托管一个能接受上传内容的小的 Web 服务器,这些内容随后被存储在 public/uploads 目录中。另一个有用的特性是 express.directory
功能,它使您能够通过一个整洁的 HTML 和 JavaScript 界面浏览某个选定的目录。 express.directory
也包含基本的分类和搜索功能。
此步骤有两个变体。如果在使用一个现有 buildpack 时,应用程序发生了崩溃,则采用第一个顺序。在创建自定义 buildpack 时,将会采用第二个顺序。
在应用程序发生崩溃的时候修改您的原始出错应用程序,系统会发送一个日志,该日志中包含被发送到您在步骤 1 中部署的 bluemix-log-server 的输出:
#!/bin/bash <<COMMAND HERE>> &> runtime.log FILENAME="runtime_$(date +%F-%T).log" mv runtime.log $FILENAME curl --form "uploadfile=@$FILENAME" <<URL OF YOUR LOG SERVER HERE>>
<<COMMAND HERE>>
。该命令可能位于命令行上的 -c
选项中,在您的 manifest.yml 文件或 procfile 中,或者在您的 buildpack 支持的另一个方法中。在我的案例中,我从 manifest.yml 文件中采用了 node app.js
,并将它添加到了脚本中。 <<URL OF YOUR LOG SERVER HERE>>
。 bash start.sh
替换该命令。当您的应用程序在 Bluemix 中启动时,这会确保它将首先使用 bash
来调用 start.sh;然后 start.sh 将会启动您的应用程序。 ./runtime &> runtime.log FILENAME="runtime_$(date +%F-%T).log" mv runtime.log $FILENAME curl --form "uploadfile=@$FILENAME" <<URL OF YOUR LOG SERVER HERE>>
./runtime
。 <<URL OF YOUR LOG SERVER HERE>>
。 在将应用程序部署到 Bluemix 时,它将执行 start shell 脚本。在运行您的运行时的时候,会在 runtime.log 文件中存储标准输出和输入。当您的运行时发生崩溃时,该脚本将会移动和重命名日志文件,然后将它上传到您在步骤 1 中设置的 bluemix-log-server 应用程序。
您还可以尝试部署示例崩溃应用程序。(单击本教程顶部的按钮来获得代码。)您需要做的工作就是设置用来保存上传的日志的 URL,并为此做好准备。
将出错的应用程序推送到 Bluemix。当运行时发生崩溃的时候,日志文件会被上传到运行在 Bluemix 中的 bluemix-log-server 应用程序。点击查看大图
关闭 [x]
只需几个步骤,就可以设置一个简单的方法,使用该方法从 Bluemix 上发生崩溃的应用程序查看日志,不必使用命令行工具到处查看。您可以将日志汇总到一个地方。您甚至可以扩展 node.js 应用程序来处理日志,从而分析输出,帮助您确定发生崩溃的原因。
BLUEMIX SERVICE USED IN THIS TUTORIAL: 针对 Node.js 运行时的 SDK 可以帮助您轻松开发、部署和扩展服务器端 JavaScript 应用程序。