logging - clojure 中的惯用日志记录
问题描述
我是 clojure 的新手,想了解登录 clojure 的方法,来自命令式背景。在 java 生产程序中,我通常会在方法的开始端记录(调试/信息) ,如下所示:
public void foo(){
logger.debug("starting method to embrace %s", rightIdioms);
doSomething();
logger.debug("successfully embraced %s idioms", idioms.length);
}
我熟悉日志记录的优缺点,并且知道clojure中可用的工具,
我还可以在上面提到的方法中找到一些登录的弊端,这加深了我在非命令式登录时的紧张感:
- 日志记录是一种副作用,而 clojure 推动无副作用。
更多代码行或“代码复杂性”:在 java 中 - 拥有大类很常见(getter、setter、构造函数),在 clojure 中,表达式返回值,记录“困难”进程并强化小函数和命名空间:(一个示例是需要从 if 更改为 if-let 或 if-do 以执行日志记录):
(defn foo [x] (if (neg? x) (inc x) x)) (defn foo [x] (if (neg? x) (let [new-x (inc x)] (logger/debug (format "inc value, now %s" new-x) new-x)) x))
我已经阅读了日志记录,clojure/tap
但tracing
不确定我是否完全发现它很有用。
登录clojure的方法或惯用方式是什么?
解决方案
这篇博文中几乎没有给出最佳实践,它建议记录数据而不是字符串可能非常有用,并且适合 clojure 风格的日志记录。日志事件可能是这样的:
{:service :user.profile/update
:level :debug
:time "2020-01-01"
:description {:before '0
:after '1}
:metric 10ms}
metric 可以是任何东西,从更新时间到从数据库中提取的行数。
然后,当您拥有数据时,您可以对它做任何事情 - 分析它以获得洞察力或分组搜索和查找。如果需要控制台日志记录,您始终可以将数据结构转回字符串。
推荐阅读
- amazon-web-services - AWS Lambda 测试不从 DynamoDB 表返回数据
- python - 如何在带有 df.groupby() 的 Pandas agg() 函数中使用列值
- python - 为什么在 Python 中实现选择排序时返回“无类型”?
- python - 如何在python中找到与时间序列数据的特定值对应的时间间隔?
- android - 关于在android中为不同密度创建文件夹的任何指导
- c++ - 使用 C++ 的 BFS 的三个水壶拼图在 MacOS 上工作,但在 Ubuntu 上不工作
- python - 我需要为我的研究建立一个人工神经网络,我想输入 2 个特征向量并预测这两个图像是否匹配
- sql-server - mssql-cli 无法连接到远程服务器
- wordpress - Siteground Cloud 服务器上的电子邮件发送停止工作
- angular - Angular - patchValue 在下拉列表中不起作用