2024 年 Clojure 状态调查!分享您的想法。

欢迎!请查看关于页面了解有关如何使用本站的一些更多信息。

0
tools.logging
log/info移除字符串中的引号,使得调试比必要的更加困难。我发现{:test1 "", :test2 "2"}被记录为{:test1  , :test2 2}。使用println打印map时,我看到同样的问题。prn打印带引号的map,这对调试更好。

我将稍后制作补丁并添加。

7 个答案

0

评论者:llsouder

用0.4.0版本重新测试

user=> (log/info ["test" "1" "" "3"]) Jul 23, 2017 8:22:56 AM user invoke INFO: [test 1 3] user=> (log/info ":one" :one 1 "1") Jul 23, 2017 8:35:30 AM user invoke INFO: :one :one 1 1

输出应该是

INFO: ["test" "1" "" "3"]

INFO: [":one" :one 1 "1"]

0

评论者:llsouder

将print-str替换为prn-str,以便用户可以看到将要评估的内容。这在调试程序时很有用,但我可以理解这可能会妨碍野外可读信息输出。

0

评论者:tangrammer

大家好,在我的应用程序代码中,我可以通过为String类型添加覆盖的print方法来避免这个令人烦恼的问题……这是一种方便的方法吗?

`
(defmethod clojure.core/print-method String

 [s ^java.io.Writer writer]

(.write writer (str "\"" s "\"")))
`

0
by

评论者:ilmoraunio

附上的修补方案是针对TLOG20.patch的替代方案,我们在这里使用pr-str。这个更改集允许将已编入日志的Clojure代码粘贴到REPL(例如)中时兼容编译器。此更改集影响logp及其派生工具的使用。

此修补方案对于在生产上进行更轻松的调试是必要的,特别是在Clojure数据实体太大而无法手动插入引号时。

0
by
_评论者:ataggart_

尽管已经给出了例子,但许多现实世界的日志条目不仅包含结构化数据,而且还包含可读的解释文本。因此,使用`pr-str`总是会导致在不希望的情况下产生引号和转义字符,并且没有解决办法(与通过手动使用`pr-str`包装值来绕过当前问题的方法不同)。这种破坏性变化是不可行的。

然而,添加新的宏来处理这种常见的摩擦点可能是合理的。

`logp`的一个变体有问题,因为在文本和数据混合的常见情况下,我们无法确定用户意图以何种方式处理哪些参数。

`logf`的一个变体可能有效,其中所有格式参数都会映射到`pr-str`上,而解释文本位于格式字符串中。
0
by
参考:https://clojure.atlassian.net/browse/TLOG-20(由llsouder报告)
...