首页 > 解决方案 > Elixir:如何将记录器连接到特定的记录器后端

问题描述

我有这样的情况:

在 Phoenix 应用程序中,我有一些受保护的信息,并希望以不同的方式将这些信息记录到不同的地方。

例如:

EncryptedLogger => 记录到 LoggerBackend 1 => 写入机器 1

PlainLogger => 记录到 LoggerBacken 2 => 写入机器 2

LoggerBackend 1 和 LoggerBackend 2 可以是相同类型的自定义记录器后端,但配置不同以分别指向机器 1 和机器 2。这部分我已经完成了。

我不知道该怎么做是:如何仅将 EncryptedLogger 连接到后端 1,将 PlainLogger 仅连接到后端 2。

我们知道对于 Elixir,对 Logger 的调用会将信息写入应用程序配置中指定的所有后端。目前,对任何记录器的任何调用都将写入后端 1 和后端 2。

问题: 是否可以轻松地将特定记录器挂钩到特定后端?(不是所有的后端)

以下是要求:

1- 尽可能多地保留代码中的 Logger 调用。我们在代码中有很多 Logger 调用,因此理想情况下,我们应该只更改记录 PHI 信息的最小日志调用。其他电话必须正常工作。

2- 例如,对于 Logger 的每个调用Logger.debug(“Call list_user:” … whatever users list from database here),它必须执行以下操作: - 记录到极其安全的 PHI 日志服务器,仅发送 PHI 信息,因此我们不会在那里冗余写入非 PHI 信息. - 登录到Non-PHI日志服务器:所有non-phi信息按原样存储,所有phi信息存储用phi数据掩码为“*”</p>

3- 所有当前的记录器后端,例如::console,LoggerFileBackend 应该仍然可以在没有修改的情况下工作,并且它们必须安全地记录非 phi 数据、phi 数据,这意味着不能将真正的 PHI 数据打印到那些现有的记录器后端。

4- 当人们添加更多 Logger 后端以记录到不同的服务时,例如 Timber 或 Spark,它必须无缝地合并到 PHI - 非 PHI 任务中。如果他们错误地配置了记录器,那么 PHI 信息不应该不加掩饰地去那里。并且当前应用程序代码中对 Logger 的现有调用不得更改。

5-当软件工程师调用代码中的Logger.info、Logger.debug、Logger.error时,PHI信息不会被意外泄露。例如,一些现有代码或新代码如下:Logger.error(“Error updating user: #{inspect(user)})将自动打印数据的屏蔽版本以记录,而不是原始版本。

标签: loggingelixirphoenix

解决方案


目前是不可能的。我的建议是绕过 Logger 基础设施,直接调用和写入 EncryptedFile/EncryptedBackend。


推荐阅读