假设我有一个Erlang系统,它有时会变得很讨厌并产生很多警告,这些警告将被记录到文件中,如果日志记录没有阻止磁盘IO,系统仍应正常运行(即日志是“更多”或更少预期“)。 (这是一个现实世界的场景,不是我化妆的东西)
erlang没有error_logger
没有过载保护,因此如果日志量非常大,日志记录将阻止磁盘IO并可能导致系统故障。
我的问题是,为什么error_logger
默认没有过载保护,是因为如果您正确设计架构,实际上并不需要此功能?或者是因为这是某种高级功能,如果您需要此功能,您应该使用其他库,例如lager
?
答案 0 :(得分:1)
我想说过载保护是一项功能,这是实施(和/或配置)的问题。
过载保护可能是日志工具包中的一个很好的功能,对某些人很有用,即使可能大多数人都不需要它,但是error_logger实际上是一个日志记录接口,一个旨在支持开发人员/集成商/用户可以选择插入的任意实现(每个实现具有完全不同的配置,具体取决于他们的功能),具体取决于他们的要求。
这可能并非详尽无遗,但会立即想到改变日志记录要求的事情是:
将记录界面与实施分离非常重要,因为:
因此,因为它是一个接口,所以error_logger没有并且不应该有过载保护;它在error_logger的汇率之外。
我坦率地承认,可能有可能在界面中包含一些实现的合理论据,我可以设想在error_logger中包含过载保护等功能的论据,尽管我已经说过了,但是它已经说过了。滑坡。我会选择纯洁和简洁;我认为值得保持error_logger精益和意味着而不是允许额外的批量进入它,这将影响到处的每个日志记录实现的性能。走这条路,在你知道磁盘I / O阻塞的限制之前,它本身就是error_logger,因为它变得臃肿,并且不会有任何关系除了发明一个新的错误记录器而不是使用它之外。