我在我的应用中使用wrap-with-logger
(来自ring.middleware.logger)和wrap-params
(来自ring.middleware.params)中间件。从日志中过滤敏感参数(密码,信用卡号等)的简单方法吗?
答案 0 :(得分:2)
您可以实施自定义pre-logger
,根据您的需要过滤请求。
请参阅以下内容:
(use 'ring.adapter.jetty)
(require '[ring.middleware.logger :as logger])
(defn handler [request]
{:status 200
:headers {"Content-Type" "text/html"}
:body "Hello World"})
(run-jetty
(logger/wrap-with-logger
handler
:pre-logger
(fn [options req]
;; Filtering goes here
(let [filtered-req (filter-sensitive-data req)]
((:info options) "Filtered requrest is: " filtered-req))))
{:port 8080})
请注意,虽然文档claims pre-logger
只接受一个参数truly it is two-arg function。
答案 1 :(得分:2)
您还可以考虑迁移到ring-logger,其中包含feature to redact sensitive information:
默认情况下,ring-logger将编辑授权标头或任何名为
password
的参数(在任何嵌套级别)。如果您希望ring-logger编辑其他参数,您可以配置redact-keys
选项:(wrap-with-logger app {:redact-keys #{:senha :token})
Ring-logger将遍历params和标头,并编辑在
redact-keys
集中找到其名称的任何密钥。
还有ring-logger-onelog,可以很容易地从ring.middleware.logger迁移到ring-logger