Fork me on GitHub
#pedestal
<
2019-08-29
>
erwinrooijakkers14:08:06

I want to add custom logging

erwinrooijakkers14:08:39

The goal is basically to ignore requests from a certain IP range

erwinrooijakkers14:08:48

(Kubernetes master calling “/”)

erwinrooijakkers14:08:03

I’ve got some Ring middleware to do that

erwinrooijakkers14:08:12

Is there a way to include that in Pedestal?

erwinrooijakkers14:08:31

Now I see this:

INFO  io.pedestal.http  - {:msg "GET /", :line 80}
INFO  io.pedestal.http  - {:msg "GET /", :line 80}
INFO  io.pedestal.http  - {:msg "GET /", :line 80}
...
That needs to go

erwinrooijakkers14:08:22

Middleware looks like this:

(defn logging-middleware [handler]
  (-> handler
      (middleware.conditional/if not-request-from-internal-ip? wrap-with-info-logger)))

ddeaguiar15:08:41

Add :io.pedestal.http/request-logger to your service map

erwinrooijakkers15:08:37

Works like a charm

erwinrooijakkers15:08:51

For those interested:

(defn- from-internal-ip?
  "Returns truthy when a request does not come from an internal IP (e.g., a
  Kubernetes node)"
  [{:keys [server-name] :as request}]
  (let [internal-ip-start "10."]
    (string/starts-with? (str server-name) internal-ip-start)))

(def log-request
  "Log the request's method and uri."
  (interceptor.helpers/on-request
   ::log-request
   (fn [request]
     (when-not (from-internal-ip? request)
       (log/info :msg (format "%s %s"
                              (string/upper-case (name (:request-method request)))
                              (:uri request))))
     request)))