Scala 如何避免在“Writer Monad”中保存太多日志?

Scala 如何避免在“Writer Monad”中保存太多日志?,scala,monads,writer,Scala,Monads,Writer,在学习时,我发现它会收集每个步骤的log值,然后将它们组合在一起 我有一个关于性能的问题:什么时候可以记录它们?如果一个方法运行数千次,它将在内存中长时间保存许多字符串。我只能在文件返回后将其记录到文件中 我们如何使用Writer Monad在现实世界中记录日志?有什么方法可以及时记录日志吗?一般来说,没有。Writer的目的是使日志记录变得纯粹和可反思;冲洗它的某些部分会违反这一点 实际上,您可能会创建一个违反法律的Monoid,例如,每当列表太长时就将其写出。但这首先会牺牲使用Writer的

在学习时,我发现它会收集每个步骤的
log
值,然后将它们组合在一起

我有一个关于性能的问题:什么时候可以记录它们?如果一个方法运行数千次,它将在内存中长时间保存许多字符串。我只能在文件返回后将其记录到文件中


我们如何使用
Writer Monad
在现实世界中记录日志?有什么方法可以及时记录日志吗?

一般来说,没有。Writer的目的是使日志记录变得纯粹和可反思;冲洗它的某些部分会违反这一点

实际上,您可能会创建一个违反法律的
Monoid
,例如,每当列表太长时就将其写出。但这首先会牺牲使用Writer的大部分好处


我建议对您的需求进行基准测试,明确地
运行
Writer
,并在一个精细、合理的级别上注销
Writer
,例如,每个web请求或每个逻辑事务。

您实际上可以将消息记录到外部世界,并且只保留关键错误的列表。有一个使用RWS monad包装数据库事务的好例子: