Racket 如何在web服务器日志中显示HTTP状态代码?

Racket 如何在web服务器日志中显示HTTP状态代码?,racket,Racket,我使用Racket的web服务器编写了一个web应用程序: #lang racket (require web-server/servlet-env) ; Some web app code here ... ;; Start the web server. (serve/servlet request-handler #:log-file "/dev/stdout") 当我启动web服务器并通过浏览器访问web应用程序时,日志如下所示: 127.0.0.1

我使用Racket的web服务器编写了一个web应用程序:

#lang racket
(require web-server/servlet-env)

; Some web app code here ...

;; Start the web server.
(serve/servlet request-handler
               #:log-file "/dev/stdout")
当我启动web服务器并通过浏览器访问web应用程序时,日志如下所示:

127.0.0.1 - - [25/Dec/2018:12:34:56 +0000] "GET /servlets/standalone.rkt HTTP/1.1" - -
127.0.0.1 - - [25/Dec/2018:12:34:56 +0000] "GET /favicon.ico HTTP/1.1" - -
但是HTTP状态代码在哪里?对于这样不完整的日志,我如何知道是否有任何页面导致了
500
403
404

如何使web服务器日志显示HTTP状态代码

更新:。

只是请求日志,而不是请求和响应日志。我同意;这遗漏了一些重要的信息

我建议你自己做日志记录。至少,我是这么做的

事实上,我通常在
分派规则
中的
分派
过程周围有一整条包装链。其中一个做日志记录

例如:

(service/servlet(~>;注意:请求沿着这条链向上,响应沿着这条链向下
派遣
包裹gzip
包裹未修改
包装授权
包装验证
包装http->https
包装(定时和记录)
#:servlet路径“/”
#:servlet regexp#px“”
#:听ip#f
#:端口(当前内部端口)
#:servlet响应程序错误(响应程序)
定时和记录换行的示例定义

(定义处理程序?(>请求?响应?)
(定义包装器?(->处理程序?处理程序?)
(定义/合同((包装定时和记录的处理程序)req)包装器?
(定义t0(当前不精确毫秒))
(定义响应(处理程序请求))
(定义t1(当前不精确毫秒))
(定义dur(圆形(-t1 t0)))
;让我们在这里使用“结构化日志记录”使搜索更容易,
;并从CloudWatch日志创建CloudWatch度量
;;过滤器(它们具有从JSON提取内容的语法)
(日志信息
(jsexpr->string
(hasheq'请求(hasheq'方法(~a(请求方法req))
'ip(请求客户端ip请求)
'路径(url->字符串(请求uri请求))
'头文件(头文件->hasheq(请求头文件/原始请求)))
“响应(hasheq)”代码(响应代码resp)
'headers(headers->hasheq(响应头resp))
“持续时间(dur)))
resp)
(定义(标题->哈希值)
(用于/hasheq([h(在列表hs中)])
(值(字符串->符号(~a(标题字段h)))
(~a(标题值hщщ)))
错误响应程序的示例定义:

;;不向最终用户显示异常信息!而是记录它。
(定义(错误响应程序url exn)
(日志错误“响应~v:\n~a的异常”
(url->字符串url)
(exn->字符串exn))
(回应/完整500#“糟糕”
(当前秒数)
#f’()’())