记录由HugSQL执行的sql语句/查询

Fre*_*aus 1 logging clojure hugsql

我想记录HugSQL执行的所有SQL字符串.我查看了文档,但找不到任何内容.什么是推荐的方式?

Fre*_*aus 6

我通过挖掘hugsql源代码解决了这个问题.我的工作方式类似于转换生成函数的结果集(https://github.com/layerware/hugsql/issues/21):

(defn log-sqlvec [sqlvec]
  (log/info (->> sqlvec
              (map #(clojure.string/replace (or % "") #"\n" ""))
              (clojure.string/join " ; "))))

(defn log-command-fn [this db sqlvec options]
  (log-sqlvec sqlvec)
  (condp contains? (:command options)
    #{:!} (hugsql.adapter/execute this db sqlvec options)
    #{:? :<!} (hugsql.adapter/query this db sqlvec options)))

(defmethod hugsql.core/hugsql-command-fn :! [sym] `log-command-fn)
(defmethod hugsql.core/hugsql-command-fn :<! [sym] `log-command-fn)
(defmethod hugsql.core/hugsql-command-fn :? [sym] `log-command-fn)
Run Code Online (Sandbox Code Playgroud)