繁体   English   中英

Elixir:如何将记录器连接到特定的记录器后端

[英]Elixir: How can I hookup a logger to a specific logger backend

我有这样的情况:

在 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 信息。 - 登录到非PHI日志服务器:所有非PHI信息都按原样存储,所有phi信息存储时将phi数据屏蔽为“*”

3- 所有当前的记录器后端,例如::console、LoggerFileBackend 应该仍然可以在不修改的情况下工作,并且它们必须安全地记录非 phi 数据、phi-data,这意味着不能将真正的 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。

这是我对这个问题的解决方案: http : //hanoian.com/content/index.php/28-elixir-logger-to-different-backends-selectively-with-different-info

整个解释相当长,附有演示的 github 链接。 但它的要点是创建了一个代理后端来接收所有 Logger 的调用,然后代理后端会以不同的方式调用不同的后端来发送不同类型的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM