【发布时间】:2021-01-07 05:18:46
【问题描述】:
在我的 F# 代码中,我有很多日志记录。像这样的
logger.Log (sprintf "%A" (this.GetSomething parameters))
这一切都很好,但由于大量的 sprintf 调用,即使使用 NullLogger 性能也很低。日志调用的字符串参数完全形成,然后在日志函数的末尾被忽略
有没有完全关闭日志记录的好方法?当然我可以做预处理指令(F# 中有这样的东西吗?)或者以某种方式使用“if flag then ....”,但我想知道是否有一个 F# 魔法可以很好地为我做这件事?
【问题讨论】:
-
通常的做法是让
Log方法本身接受格式字符串和所有参数。 -
this.GetSomething 函数的大量调用无济于事
-
然后将其包裹在一个 lambda 中
-
只需使用结构化日志记录而不是构建字符串。在极少数情况下,当您调用某些函数而不是记录值时,您可以手动检查是否为所需的日志级别启用了记录器。
标签: logging functional-programming f#