我遇到这样的情况:
在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.debug(“Call list_user:” … whatever users list from database here)
,它必须执行以下操作:
-登录到极为安全的PHI日志服务器,仅发送PHI信息,因此我们不会在此处冗余写入非PHI信息。
-记录到Non-PHI日志服务器:所有非phi信息都按原样存储,并且所有phi信息都存储有phi数据,掩码为“ *”
3-当前所有记录器后端,例如::console,LoggerFileBackend仍应不做任何修改,并且必须安全地记录非phi数据(即phi数据),这意味着无法将任何真实PHI数据打印到现有的记录器后端记录器后端。
4-当人们添加更多Logger后端以登录到不同的服务(例如Timber或Spark)时,必须将其无缝集成到PHI – Non PHI任务中。如果他们错误地配置了记录器,那么PHI信息就不应毫无掩盖地传递到那里。并且当前应用程序代码中对Logger的现有调用不得更改。
5-当软件工程师在代码中调用Logger.info,Logger.debug,Logger.error时,不会意外泄漏PHI信息。
例如,一些现有代码或类似以下的新代码:Logger.error(“Error updating user: #{inspect(user)})
将自动打印要记录的数据的掩码版本,而不是原始版本。
答案 0 :(得分:1)
当前不可能。我的建议是绕过Logger基础结构,直接调用和写入EncryptedFile / EncryptedBackend。
答案 1 :(得分:0)
这是我针对此问题的解决方案:http://hanoian.com/content/index.php/28-elixir-logger-to-different-backends-selectively-with-different-info
整个说明相当长,带有指向演示的github链接。但是要点是创建了一个代理后端来接收所有Logger的调用,然后该代理后端将以不同的方式调用不同的后端以发送不同类型的信息。