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

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

`
(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 报告)
...