scala - 无副作用的日志记录
问题描述
我有一个Scala
包,应该从上到下记录,尽管我希望它纯粹是功能性的。有没有办法在不破坏功能风格的情况下实现日志记录?
解决方案
https://github.com/ChristopherDavenport/log4cats - 它已经完成了。
如果你需要副作用(你确实需要)并且你关心 FP,你必须以非常透明的方式来做它们。这基本上意味着用某种 IO monad 包装侧 wffects。
所以,你需要做的就是推迟登录到一些 IO monad。为您执行此操作的一个库是 log4cats。
但是,很多人经常将日志记录视为“纯功能”规则的例外(类似于分配和读取配置、检测等),如果在项目中有很多人不了解 IO 则更是如此monads 非常好,所以如果最初你将使用 ScalaLogging 并且在这方面不会打扰 RT,那么没有人应该私刑你。
稍后您可以继续使用完整的 FP、Cats Effect、IOApp 或 TaskApp(如果是 Monix),然后像 log4cats 之类的东西会为您提供日志类型类。