   (let [log-fn (get-in @configuration [:loggers level])]
     (if (fn? log-fn)
       (apply log-fn msgs)
-      (println (string/upper-case (name level))
-        (string/join " " msgs)))))
+      (binding [*out* *err*]
+        (println (string/upper-case (name level))
+          (string/join " " msgs))))))
 
 (defn log-trace [& msgs]
   (apply logger :trace msgs))

(defn as-keywords [m]
  (reduce (fn [res [k v]]
            (conj res {(keyword k) v}))
          {} m))

(defn read-json-str [s]
  (reduce (fn [res [k v]]

  (cond
    (map? output)
    (:error output)
    (vector? output) ;; it's a merge with two plans.. this is fine
    false
    ;(and (string? output) (empty? output))
    ;false
    (string? output) ;; assume it's JSON as a string
    (:error (read-json-str output))
    (nil? output)
