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中。
工具.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!方法,我会增加另一个方法或参数,并调用它,这样不支持标记或等效方法的实现不需要进行更改。
我正在开发一个针对log4j2的Clojure库,该库支持标记、上下文信息MDC和通过MapMessage等结构的日志记录: https://github.com/seancorfield/logging4j2 -- 很乐意在早期阶段收到反馈。

1 个回答

0

我们像在这里所写的使用标记的结构化日志进行了移植: https://stackoverflow.com/a/60101309/8162407

在clojure.tools.logging上包装了一个轻量级封装,非常满意。点个赞。

这里是否还有对tools.logging的需求?如果有,是什么需求?
我认为有一个问题是否 c.t.l 能够支持所有(Java)日志库的通用上下文或标记。

个人而言,我不确定人们改变日志实现有多频繁,所以我不认为这值得做。如果你已经选择了一种日志实现,你可以使用Java互操作性做自己想要的MDC或标记...
如何结合 tools.logging 使用标记?我知道宏可以轻松完成 MDC,但如何动态地传递标记呢?
...