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

欢迎!请查看 关于 页面以了解更多关于此的工作方式。

0
tools.logging
log/info 从字符串中移除引号,使得调试比必要的难度更大。  我发现 {:test1 "", :test2 "2"} 被记录为 {:test1  , :test2 2}。  当我使用 println 打印一个映射时,我看到相同的问题。  prn 以带引号的方式打印映射,这对调试更有利。

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

7 个回答

0

评论者:llsouder

在 0.4.0 版本中重新测试

user=> (log/info ["test" "1" "" "3"]) 2017年7月23日 8:22:56 AM user invoke INFO: [test 1 3] user=> (log/info ":one" :one 1 "1") 2017年7月23日 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。这个更改集允许当复制粘贴到 REPL(例如)时,记录的 Clojure 代码可以满足编译器兼容性。该更改集影响了 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 报告)
...