2016-03-25 23 views
1

Ich habe ein Projekt geerbt, dass einige Logging Magie durch [ring.middleware.logger "0.5.0" :exclusions [org.slf4j/slf4j-log4j12]] in der Projekt.clj bekommt. Da die Middleware fertig up ring.middleware.logger/wrap-with-logger kommt und das wird mir ein paar schöne Protokollierung auf jede Anfrage wie ...Wie unterdrücke ich die ANSI-Färbung ring.middleware.logger ist in meine Protokolle?

2016-03-25 15:46:03,787 a939 level=INFO [qtp509784188-34] core:288 - Starting :delete /v4/events/c.c.t.p.v4.api-a9c6d846-1da5-4593-a711-18d90aa8490f/test-layer/2015-05-31T00:00:00.000Z for 127.0.0.1 {"host" "localhost:50654", "user-agent" "Apache-HttpClient/4.3.6 (java 1.5)", "accept-encoding" "gzip, deflate", "connection" "close"} 
2016-03-25 15:46:03,788 a939 level=INFO [qtp509784188-34] core:288 - \ - - - - Params: {} 
2016-03-25 15:46:03,794 a939 level=INFO [qtp509784188-34] core:288 - Finished :delete /v4/events/c.c.t.p.v4.api-a9c6d846-1da5-4593-a711-18d90aa8490f/test-layer/2015-05-31T00:00:00.000Z for 127.0.0.1 in (6 ms) Status: 404 

... das Problem ist, dass in dieser Protokollierung einige der Felder ANSI kommen koloriert. Es gibt eine Anforderungs-ID-ähnliche Sache, über ihr das "a939" -Feld, sowie den "Starting" -, "Finished" - und den "Status" -Code, die mit ANSI-Farben dargestellt werden. Dies hat den unangenehmen Nebeneffekt, RegEx die Logs in Splunk herauszufordern, da es nun Steuerzeichen gibt, die jetzt als ASCII-Ziffern erscheinen und die Arbeit mucken.

Wie kann ich die ANSI-Einfärbung der Protokollausgabe durch die ring.middleware.logger Sache unterdrücken?

Antwort

2

Eine Alternative ist die Migration zu [ring-logger-onelog "0.7.6"]. Ich begann es als eine Gabel von ring.middleware.logger mit dem Ziel, es flexibler zu machen. Zum Beispiel enthält es eine Option :printer :no-color, mit der Sie die ANSI-Farbgebung vermeiden können.

Der Migrationspfad ist sehr glatt, wie in the README gezeigt:

  • Ersetzen Abhängigkeit in project.clj von [ring.middleware.logger "0.5.0"] zu [ring-logger-onelog "0.7.6"]
  • die von [ring.middleware.logger :as logger] zu [ring.logger.onelog :as logger]
  • Pass Optionen logger/wrap-with-logger Ersetzen erfordern Verwenden einer richtigen Zuordnung anstelle von Schlüsselwortargumenten.

Es gibt eine example app die Sie ausführen können, um zu sehen, was protokolliert werden würde.

Es gibt auch den Kern ring-logger-Bibliothek, das mit unterschiedlichem Logging-Backends funktioniert (im Gegensatz zu läuten Logger-Onelog der auf onelog beruht, was letztlich durch log4j geht ... oder slf4j, nicht sicher). ring-logger hat keine integrierte Request-ID, aber es gibt an example in the README, die zeigt, wie Sie es selbst implementieren können.

+0

Schöne Antwort, und das würde funktionieren, aber ich bin ein wenig widerwillig zu integrieren clojure Logik, die ich nicht vollständig verstehe. Ich denke, es ist an der Zeit herauszufinden, was "verify" bedeutet ... es klingt jedoch wie eine Krankheit, oder im geringsten gewalttätig;). Es wäre großartig, wenn die [ring.logger.onelog-Sache gerade das Request-ID-Konzept bekommen hätte, ohne dass ich irgendeine Middleware hinzufügen müsste. –

+1

Oh, hey, mein Schlechter.Das [ring-logger-onelog "0.7.6"] Ding funktioniert super. Ich habe anscheinend eine Bitte-ID-no-Muss, No-Getue. Vielen Dank. –

1

Es scheint, dass ring.middleware.logger hat ANSI Färbung standardmäßig implementiert und es gibt keine Konfigurationsoption leicht zu deaktivieren, ohne Ihr eigenes pre-logger Bereitstellung post-logger usw.

Es gibt jedoch eine Möglichkeit, dass Sie eine Abhilfe schaffen können: ring.middleware.logger verwendet clansi zum Anwenden von ANSI-Farben. clansi bietet without-ansi Makro zum Deaktivieren der Färbung.

Sie können Ihre eigene Middleware schreiben, die ring.middleware.logger wickeln muss:

(defn wrap-no-ansi-colors [handler] 
    (fn [rq] 
    (without-ansi 
     (handler rq)))) 

(def app 
    (-> handler 
    (wrap-with-logger) 
    (wrap-no-ansi-colors)))