6

我正在运行 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))))

然后用苹果酒连接到它,例如:

cider-connect 127.0.0.1 7888

我可以在 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)

我开始网站lein run

编辑 我可以看到输出,仅在使用时(.println System/out msg)

4

4 回答 4

3

你试过(.println System/out msg)吗?我有同样的问题,这对我有用。

于 2014-10-22T23:27:27.590 回答
1

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

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

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

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

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

 (def application (log-middleware (handler/site routes)))

可以通过这种方式打印标头:只需从:headers请求映射中获取字段并打印即可。

于 2014-07-18T13:33:05.860 回答
0

Prone库可以帮助您。它有一个环形中间件,用于更好地报告异常,也具有调试能力。调试时,您可以检查任何本地绑定以及 Ring 请求。

这是一个演示其工作原理的视频

于 2014-09-28T06:34:37.220 回答
0

(flush)在表达式之后使用print以强制输出。

于 2015-06-09T22:43:48.317 回答