簡體   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