logging - 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)})
将自动打印数据的屏蔽版本以记录,而不是原始版本。
解决方案
目前是不可能的。我的建议是绕过 Logger 基础设施,直接调用和写入 EncryptedFile/EncryptedBackend。
推荐阅读
- ios - 如何从 iOS 中的框架访问主机应用程序版本?
- python - PCA 的负数和复数特征值
- typescript - 参数的使用
失败 - javascript - Javascript:查找 2 个对象之间的差异并仅返回键
- django - 如何从python列表中删除方括号
- ios - 如何解析嵌套的 JSON。我将 nil 值作为输出
- java - ThreadContext.put() 和 MDC.Put() 有什么区别?
- angular - Angular 中的 observable 和 promise 是如何工作的?
- kibana - 仅在仪表板中添加与一个 kibana 可视化相关的过滤器?
- java - 如何获取 Spring 应用程序上下文并将其传递给其他类的方法?