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"]) Jul 23, 2017 8:22:56 AM user 调用 INFO: [test 1 3] user=> (log/info ":one" :one 1 "1") Jul 23, 2017 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

嘿,伙计们,我可以在我的应用程序代码中添加针对 String 类型的重新写 print-method 来避免这个令人烦恼的问题 ... 这是方便的方法吗?

`
(defmethod clojure.core/print-method String

 [s ^java.io.Writer writer]

写入字符串 "s" ( writer .write )
`

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 (由 llsouder 提出)
...