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

欢迎!请参见关于页面以获取更多关于此如何工作的信息。

+4
Java互操作性

结构化日志记录优于纯文本。
上下文日志记录 + 结构化日志记录是一个净收益。在我们公司,我们可以放弃我们自发的日志解决方案,除了支持上下文日志记录外,它还低于tools.logging,并将有力地增强库的功能。
为了支持上下文日志记录,我们可能需要一个额外的协议,用于实现此类API的框架(如SLF4J)。
不确定是否需要,但额外的一个日志函数也可能简化实现。
建议使用

(log/info-c {:foo "bar"} my-error "some message")
我们在工作中使用c.t.l与log4j2,并通过Java互操作性借助MDC内容并包装在宏中。但尚未研究使其通用的方法,这将是一件好事,以便将所有日志实现标准化。

我们有一个宏(with-log-context context-map .. body ..),可以直接将context-map数据添加到log4j2的MDC中。
在 tools.logging 中是否还需要更多的功能?
是的,有些代码路径需要访问接受 slf4j 标记的方法。MDC 对于结构化日志记录还不够。
https://stackoverflow.com/questions/4165558/best-practices-for-using-markers-in-slf4j-logback

但MDC确实非常有用,就像那个答案说的——“分割和切割”,而且对我们来说,将整个请求的日志与用户ID或IP地址或类似的标签关联起来的能力,远比能够根据不同的日志“类型”(标记)进行筛选更重要。

所以,我认为这个问题的教训是,有些人想要标记,有些人想要MDC,有些人两者都要,有些人则两者都不关心。

标记直接影响API,因为它们被传递到error()、warn()等调用中。鉴于c.t.l已经提供了不定参数调用,并将Throwable作为第一个参数的特殊情况,我不确定添加标记的API应该如何设计(尤其是当每个记录器实现都有不同的类时)?

也许会有需要一个新的API,就像你说的,使用{log}m,对此我表示欢迎。
据我看来,可能会需要一个像你说的新的API,使用逻辑符号"{log}m",我这方面没有问题。
关于write!方法,我会添加另一个方法或参数,并调用它,这样不支持Marker或类似功能的具体实现就不需要做任何改动。
我正在开发一个针对log4j2的Clojure库,该库支持Marker、MDC以及通过MapMessage等实现的元数据记录:[https://github.com/seancorfield/logging4j2](https://github.com/seancorfield/logging4j2) ——我很乐意在这个早期阶段收到反馈。

1 个回答

0票数

我们已经将项目迁移到了支持Marker的结构化日志,正如这里所写的:[https://stackoverflow.com/a/60101309/8162407](https://stackoverflow.com/a/60101309/8162407)

在clojure.tools.logging上添加了一个薄包装,对此感到非常满意。向上投票。

这里是否仍然需要clojure.tools.logging,如果需要,那是什么?
我怀疑 c.t.l 是否能够在所有(Java)日志库中通用地支持上下文或标记?

就我个人而言,我不确定人们有多频繁地更改日志实现,因此我认为这并不值得。如果你已经选择了一种日志实现,你可以使用它与 Java 互操作来自由地实现 MDC 或标记...
by
你如何与 tools.logging 结合使用标记?我知道 MDC 可以通过宏轻松实现,但如何动态传递标记呢?
...