与clojure.tools.logging在同一命名空间中使用多个记录器

与clojure.tools.logging在同一命名空间中使用多个记录器,logging,clojure,logback,Logging,Clojure,Logback,我使用的是,它使用工厂来实例化一个记录器 我想做的是让我的DAO名称空间将普通消息记录到应用程序日志中,但将所有SQL查询记录到查询日志中 看看这些,这看起来不太可能,但我希望有人能证明我错了 如果clojure.tools.logging不能做到这一点,有人能推荐另一种可以实现我想要的功能的日志记录工具吗?或者可以在Logback的配置文件中进行路由吗?您应该能够使用log宏的。我没有试过,只是检查了代码 [编辑] 以下是测试线束上的一个接头: (日志“other.ns”:调试e“foo”)

我使用的是,它使用工厂来实例化一个记录器

我想做的是让我的DAO名称空间将普通消息记录到应用程序日志中,但将所有SQL查询记录到查询日志中

看看这些,这看起来不太可能,但我希望有人能证明我错了


如果clojure.tools.logging不能做到这一点,有人能推荐另一种可以实现我想要的功能的日志记录工具吗?或者可以在Logback的配置文件中进行路由吗?

您应该能够使用
log
宏的。我没有试过,只是检查了代码

[编辑]

以下是测试线束上的一个接头:

(日志“other.ns”:调试e“foo”)
很到位;我只是将这个答案添加到文档中,以记录我为其他可能想做类似事情的人所做的事情

首先,我在我的
logback.xml
中创建了一个新的查询追加器:


logs/query.log
%d{yyyy-MM-dd HH:MM:ss}%m%n
其次,我在
foo.db.util
名称空间中编写了一个小宏:

(ns foo.db.util)
(:require[clojure.string:refere[join]]
[clojure.tools.logging:参考[log]]
[korma.core:引用[作为sql]])
(defn格式查询[查询和参数]
(让[bind str(->>args
压平
(过滤器#(不是(零%))
(加入“)]
(str(作为sql查询)
(非空时(空?绑定str)(格式:[%s]“绑定str()()())”)
(defmacro日志查询[q&args]
`(日志“查询”:调试nil(格式查询~q~@args)))
现在,我可以像这样记录查询:

(ns随便什么
(:require[foo.db.util:参考日志查询]
[korma.core:参考:全部])
(防御性食物)
(让[ID[1 2 3]
q(->(选择*foo)
(字段:bar:baz)
(其中{:id[in-id]}))]
(日志查询q ID)
(选择q)

这正是我需要的。感谢您敏锐地阅读源代码!我想提供我的logback配置和我用来完成这项工作的代码示例,但我不确定当前的堆栈溢出最佳实践。我应该提交一个新的答案,里面有我的资料,编辑我的问题,更新我是怎么做的,还是完全其他什么?谢谢你接受我的答案。我也不知道最好的做法是什么。我想添加一个新的答案应该可以。