在Lein和Ring的Clojure中缺少*out*

Ste*_*eve 6 clojure ring nrepl

我正在运行Lein 2和苹果酒0.7.0.我制作了一个使用ring/run-jetty启动的示例环应用程序.

(ns nimbus-admin.handler
  (:require [compojure.core :refer :all]
            [compojure.handler :as handler]
            [clojure.tools.nrepl.server :as nrepl-server]
            [cider.nrepl :refer (cider-nrepl-handler)]
            [ring.adapter.jetty :as ring]
            [clojure.tools.trace :refer [trace]]
            [ring.util.response :refer [resource-response response redirect content-type]]
            [compojure.route :as route])
  (:gen-class))


(defroutes app-routes 
  (GET "/blah" req "blah")
  (route/resources "/")
  (route/not-found (trace "not-found" "Not Found")))

(def app (handler/site app-routes))

(defn start-nrepl-server []
  (nrepl-server/start-server :port 7888 :handler cider-nrepl-handler))

(defn start-jetty [ip port]
  (ring/run-jetty app {:port port :ip ip}))

(defn -main
  ([] (-main 8080 "0.0.0.0"))
  ([port ip & args] 
     (let [port (Integer. port)]
       (start-nrepl-server)
       (start-jetty ip port))))
Run Code Online (Sandbox Code Playgroud)

然后用苹果酒连接到它:

cider-connect 127.0.0.1 7888
Run Code Online (Sandbox Code Playgroud)

我可以导航到我的网站并在emacs中评估表单,它将更新我的nrepl会话中正在运行的内容,这很好.

我无法看到输出 (print "test") (println "test") (trace "out" 1)

最后,我的项目文件:

(defproject nimbus-admin "0.1.0"
  :description ""
  :url ""
  :min-lein-version "2.0.0"
  :dependencies [[org.clojure/clojure "1.6.0"]
                 [com.climate/clj-newrelic "0.1.1"]
                 [com.ashafa/clutch "0.4.0-RC1"]
                 [ring "1.3.1"]
                 [clj-time "0.8.0"]
                 [midje "1.6.3"]
                 [org.clojure/tools.nrepl "0.2.6"]
                 [ring/ring-json "0.3.1"]
                 [org.clojure/tools.trace "0.7.8"]
                 [compojure "1.1.9"]
                 [org.clojure/data.json "0.2.5"]
                 [org.clojure/core.async "0.1.346.0-17112a-alpha"]
                 ]
  :plugins [[lein-environ "1.0.0"]
            [cider/cider-nrepl "0.7.0"]]
  :main nimbus-admin.handler)
Run Code Online (Sandbox Code Playgroud)

我用这个网站开始 lein run

编辑 我只能在使用时看到输出(.println System/out msg)

Chr*_*lom 1

可以手动将打印语句放入代码中。如果要打印每个请求的信息,可以添加中间件。您传递给 jetty 的处理程序是一个从 Ring 请求到 Ring 响应的函数。Ring 请求和响应只是映射,请参阅Ring 规范以了解它们应包含哪些密钥的更多信息。中间件只是一个将处理程序作为其第一个参数并返回处理程序的函数。

用于打印有关请求和响应的基本信息的中间件函数示例:

(defn log-middleware [handler]
  (fn [request]
    (let [response (handler request)]
      (println "=>" (name (:request-method request)) ":" (:uri request))
      (println "<=" (:status request))
      response)))
Run Code Online (Sandbox Code Playgroud)

这个中间件应该打印到 cider repl 缓冲区,但 cider 有时表现得很奇怪,并将输出发送到*Messages*nrepl 服务器缓冲区。

您可以通过将其应用到处理程序来使用此中间件:

 (def application (log-middleware (handler/site routes)))
Run Code Online (Sandbox Code Playgroud)

标头可以这样打印:只需从:headers请求映射中获取字段并打印它。