【发布时间】:2019-11-03 19:16:06
【问题描述】:
我有这样的情况:
在 Phoenix 应用程序中,我有一些受保护的信息,并希望以不同的方式将这些信息记录到不同的位置。
例如:
EncryptedLogger => 记录到 LoggerBackend 1 => 写入机器 1
PlainLogger => 记录到 LoggerBacken 2 => 写入机器 2
LoggerBackend 1 和 LoggerBackend 2 可以是相同类型的自定义 logger 后端,但配置不同,分别指向机器 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数据掩码为“*”
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)}) 将自动打印数据的屏蔽版本以记录,而不是原始版本。
【问题讨论】: