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

欢迎!有关如何运作的更多信息,请参阅关于页面。

0票< meta itemprop="upvoteCount" content="0">
tools.logging
log/info 会从字符串中移除引号,这使得调试比原本所需更困难。  我发现{:test1 "", :test2 "2"}被记录为{:test1  , :test2 2}。  当我使用 println 打印映射时,我也看到了相同的问题。  prn以带有引号的映射格式打印,这对调试更有利。

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

7 个回答

0票< meta itemprop="upvoteCount" content="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票< meta itemprop="upvoteCount" content="0">

由 llsouder 发表评论

将 print-str 替换为 prn-str,这样用户就可以看到将被评估的内容。这在调试程序时很有用,但我也明白这可能会对野外人类可读的信息输出造成混乱。

0票< meta itemprop="upvoteCount" content="0">

由 tangrammer 发表评论

嘿,大家好,我可以在我的应用代码中通过添加覆盖字符串类型的打印方法来避免这个问题…这是一种方便的方法吗?

`
(defmethod clojure.core/print-method String

 [s ^java.io.Writer writer]

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

0票< meta itemprop="upvoteCount" content="0">

评论由:ilmoraunio 提出

这是对已提出的 TLOG20.patch 的一个替代修复方案,我们在这里使用 pr-str。这个更改集允许当将 Clojure 代码复制粘贴到 REPL(例如)时,使其符合编译器的要求。该更改集影响了 logp 及其衍生函数的使用。

这个修复对于更容易调试生产问题非常有必要,尤其是当 Clojure 数据实体太大而无法手动插入引号时。

0票< meta itemprop="upvoteCount" content="0">
0票< meta itemprop="upvoteCount" content="0">
评论由:ataggart 提出

尽管给出了例子,但许多现实世界的日志条目不仅包含结构化数据,还包含可读的解释性文本。因此,始终使用 `pr-str` 可能会输出不想要的引号和转义字符,而且没有方法可以解决这个问题(与手动用 `pr-str` 包装值的方法不同)。这种破坏性变化是不可接受的。

话虽如此,添加处理这种常见摩擦点的新宏可能是有道理的。

`logp` 的一个变体可能有问题,因为在混合文本和数据时,我们无法确定用户意图如何处理哪些参数。

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