没有副作用的日志记录

Logging without side effects

我有一个 Scala 包,虽然我希望它是纯功能性的,但它应该从上到下记录。有什么方法可以在不破坏功能风格的情况下实现日志记录吗?

https://github.com/ChristopherDavenport/log4cats - 已完成。

如果您需要副作用(并且您确实需要)并且您关心 FP,则必须以参照透明的方式来处理它们。这基本上意味着用某种 IO monad 包装 side wffects。

因此,您需要做的就是推迟登录到某些 IO monad。一个为您做这件事的图书馆是 log4cats。

然而,很多人经常将日志记录视为“纯功能”规则的例外(类似于分配和读取配置、检测等),如果在项目中有很多人还不太了解 IO monad,因此如果您最初使用 ScalaLogging 并且在这方面不会为 RT 而烦恼,那么没有人会私刑。

稍后您可以继续使用完整的 FP、Cats Effect、IOApp 或 TaskApp(如果是 Monix),然后像 log4cats 这样的东西会为您提供类型 类 用于记录。