O registro em log é um caso de uso comum usado durante a apresentação do chamado Free
monads , Freer
monads e / ou Efeitos Extensíveis .
Em qualquer caso, a idéia básica é simples - em vez de fazer com que seu programa execute ações diretamente, seu programa produz uma estrutura de dados que descreve abstratamente as ações a serem executadas. A execução real dessas ações é adiada para um intérprete que interpreta a estrutura de dados.
Existem pelo menos duas maneiras pelas quais isso pode ser aplicado ao registro. O primeiro é especificando algum conjunto de operações explícitas de registro. Isso não é muito diferente do que você possui atualmente, exceto que a implementação das operações de log pode ser alterada, fornecendo um interpretador diferente. Por exemplo, você pode alterar para onde o log vai ou até mesmo eliminar o registro em log todos juntos (ou seja, implementar o log como um não operacional).
Outra maneira de aplicar isso é adicionar log à interpretação de certas operações. Se feito corretamente, o registro e a interpretação "real" da operação são completamente ortogonais. Isso é análogo à programação orientada a aspectos, que permite que códigos adicionais sejam "misturados" ao código principal.