sexpr-based logging for spiffy pasted by mario-goulart on Wed Aug 24 16:15:22 2011

(handle-access-logging
 (lambda ()
   (let ((h (request-headers (current-request))))
     (log-to (access-log)
             "(\"~A\" \"~A\" ~A \"~A\" ~A.~A ~A \"~A\" \"~A\")"
             (remote-address)
             (seconds->string (current-seconds))
             (request-method (current-request))
             (uri->string (request-uri (current-request)))
             (request-major (current-request))
             (request-minor (current-request))
             (response-code (current-response))
             (uri->string (header-value 'referer h (uri-reference "-")))
             (let ((product (header-contents 'user-agent h)))
               (if product
                   (product-unparser product)
                   "**Unknown product**"))))))


(define-record log-line ip date method uri http-version code referer user-agent)

~S added by mario-goulart on Wed Aug 24 16:24:42 2011

(handle-access-logging
 (lambda ()
   (let ((h (request-headers (current-request))))
     (log-to (access-log)
             "~S"
             (list (remote-address)
                   (seconds->string (current-seconds))
                   (request-method (current-request))
                   (uri->string (request-uri (current-request)))
                   (string->number
                    (conc (request-major (current-request)) "."
                          (request-minor (current-request))))
                   (response-code (current-response))
                   (uri->string (header-value 'referer h (uri-reference "-")))
                   (let ((product (header-contents 'user-agent h)))
                     (if product
                         (product-unparser product)
                         "**Unknown product**")))))))