默认情况下,Heroku会为(Ruby)应用程序的每个请求生成两条日志消息。在每种情况下,都有一些字段的含义不明显。首先,路由器消息(因为它出现在logplex中):
<158>1 2014-08-04T18:28:43.078581+00:00 host heroku router - at=info method=GET path="/foo" host=app-name-7277.herokuapp.com request_id=e5bb3580-44b0-46d2-aad3-185263641044 fwd="50.168.96.221" dyno=web.1 connect=0ms service=2ms status=200 bytes=415
大部分内容相当明显,但我不知道开头的<158>1
,时间戳后的host
和“路由器”之后的-
。< / p>
接下来,网络应用消息:
<190>1 2014-08-04T18:28:43.015630+00:00 host app web.1 - 50.168.96.221 - - [04/Aug/2014 18:28:43] "GET /foo HTTP/1.1" 200 12 0.0019
这与路由器消息有相同的谜团,再加上IP地址后的两个破折号。
有没有人知道Heroku日志格式的完整文档?我在网上找到的所有资料都很模糊。
答案 0 :(得分:17)
Heroku日志有很长的历史,通过syslog进行中继,大致是RFC5424格式化。
第一个-
之前的所有内容都是系统日志标题,其格式详见:http://tools.ietf.org/html/rfc5424#section-6.2
之后的所有内容都是来自应用的原始消息。
让我们打破第一条消息:
<158>
:这是PRI,请参阅http://tools.ietf.org/html/rfc5424#section-6.2.1 1
:这是“版本”,请参阅http://tools.ietf.org/html/rfc5424#section-6.2.2 2014-08-04T18:28:43.078581+00:00
:日期戳(包括TZ)是http://tools.ietf.org/html/rfc5424#section-6.2.3 host
:是原始系统的“主机名”,请参阅http://tools.ietf.org/html/rfc5424#section-6.2.4。这实际上被剥离了,取而代之的是“host”heroku
:“应用名称”,请参阅http://tools.ietf.org/html/rfc5424#section-6.2.5。 ATM:这将是“heroku”或“app”,具体取决于生成消息的内容。如果日志消息是由heroku基础设施生成的,那么这将是“heroku”。如果日志消息是由用户的应用程序(或附加组件)生成的,那么这将是“app”。 router
:PROCID,请参阅http://tools.ietf.org/html/rfc5424#section-6.2.6。这将是生成消息的组件/ dyno的名称。-
:MSGID字段,请参阅http://tools.ietf.org/html/rfc5424#section-6.2.7。我们不使用它,所以它是-
而不是。在第一个示例消息中,您发布了该行的其余部分是路由器发送的消息:
at=info method=GET path="/foo" host=app-name-7277.herokuapp.com request_id=e5bb3580-44b0-46d2-aad3-185263641044 fwd="50.168.96.221" dyno=web.1 connect=0ms service=2ms status=200 bytes=415
在您发布的第二个示例消息中,该行的其余部分是相关应用程序发出的行:
50.168.96.221 - - [04/Aug/2014 18:28:43] "GET /foo HTTP/1.1" 200 12 0.0019
我不知道该应用是什么,但产生的东西看起来像我一样的apache。 Heroku不生成这些,heroku为客户运行的应用程序。有些应用会为每个请求复制路由器日志相关信息,有些则不会。这取决于应用程序日志设置。
您可以在此处找到有关heroku生成的消息中数据格式的更多信息:https://devcenter.heroku.com
具体做法是: