请分享您的想法在 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"]) 2017-07-23 8:22:56 AM user 调用 INFO: [test 1 3] user=> (log/info ":one" :one 1 "1") 2017-07-23 8:35:30 AM user 调用 INFO: :one :one 1 1

输出应为

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

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

0 投票

评论者:llsouder

用 prn-str 代替 print-str,以便用户可以看到将要被评估的内容。这对调试程序非常有用,但我可以看到这可能会弄乱野外的可读信息输出。

0 投票

评论者:tangrammer

大家好,我可以在我的应用程序代码中添加一个字符串类型的重写打印方法来避免这个令人烦恼的问题 ... 这种方法方便吗?

`
(defmethod clojure.core/print-method String

 [s ^java.io.Writer writer]

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

0 投票

评论由:ilmoraunio发表

附上对已提出的TLOG20.patch的替代修复方案,我们使用pr-str代替。这个变更集允许将已记录的Clojure代码复制粘贴到REPL中时(例如),保持编译器兼容性。这个变更集影响了logp及其变体的使用。

这个修复对于更容易调试生产中的问题至关重要,尤其是在 Clojure 数据实体过大而无法手动插入引号的情况下。

0 投票
评论由:ataggart

尽管给出了例子,但许多实际的日志条目不仅包含结构化数据,还包含可读的解释文本。因此,始终使用 `pr-str` 会在不期望的情况下发出引号和转义字符,而无法解决(与通过手动用 `pr-str` 包围值来解决当前问题的情况不同)。这种重大变更不可接受。

尽管如此,添加处理这种常见摩擦点的新宏可能是合理的。

`logp` 的一个变体有问题,因为在文本和数据混合的常见情况下,我们无法确定用户打算如何处理特定的参数。

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