【问题标题】:Elixir: How can I hookup a logger to a specific logger backendElixir:如何将记录器连接到特定的记录器后端
【发布时间】: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)}) 将自动打印数据的屏蔽版本以记录,而不是原始版本。

【问题讨论】:

    标签: logging elixir phoenix


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2019-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-17
        相关资源
        最近更新 更多