2016-03-25 1 views
1

J'ai hérité d'un projet qui obtient de la magie de journalisation via [ring.middleware.logger "0.5.0" :exclusions [org.slf4j/slf4j-log4j12]] dans le projet.clj. Comme les intergiciels se mettre en place ring.middleware.logger/wrap-with-logger vient et qui me fait une belle exploitation forestière sur chaque demande comme ...Comment supprimer l'anneau de coloration ANSI.middleware.logger met dans mes journaux?

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 

... le problème est que certains des champs de cette exploitation forestière sortent ANSI colorisé. Il y a une requête id comme chose, au dessus du champ "a939", ainsi que les codes "Starting", "Finished", et "Status" qui sont présentés avec les couleurs ANSI. Cela a l'effet secondaire désagréable de rendre difficile le RegEx les logs dans Splunk, car il y a maintenant des caractères de contrôle, qui apparaissent maintenant comme des chiffres ascii, en déblayant les travaux. Comment puis-je supprimer la colorisation ANSI de la sortie de journalisation à l'aide de la fonction ring.middleware.logger?

Répondre

2

Une autre solution consiste à migrer vers [ring-logger-onelog "0.7.6"]. Je l'ai commencé comme une fourchette de ring.middleware.logger dans le but de le rendre plus flexible. Par exemple, il inclut une option :printer :no-color avec laquelle vous pouvez éviter toute la colorisation ANSI.

Le chemin de migration est très lisse, comme le montre in the README:

  • Remplacer la dépendance à project.clj de [ring.middleware.logger "0.5.0"] à [ring-logger-onelog "0.7.6"]
  • Remplacer le besoin de [ring.middleware.logger :as logger] à [ring.logger.onelog :as logger]
  • passer des options à logger/wrap-with-logger en utilisant une carte appropriée au lieu des arguments de mot-clé.

Il y a un example app que vous pouvez exécuter pour voir ce qui serait connecté.

Il y a aussi la bibliothèque de base ring-logger qui fonctionne avec différents backends d'exploitation forestière (par opposition à l'anneau-enregistreur-onelog qui repose sur onelog, qui va finalement par log4j ... ou slf4j, pas sûr). ring-logger n'a pas d'ID de requête intégré, mais il y a an example in the README qui montre comment vous pouvez l'implémenter vous-même.

+0

Bonne réponse, et cela fonctionnerait, mais je suis un peu réticent à intégrer la logique de clojure que je ne comprends pas complètement. Je pense qu'il est temps de comprendre ce que «réifier» signifie ... cela ressemble à une maladie, cependant, ou violente dans le moins;). Ce serait génial si la chose [ring.logger.onelog vient de recevoir le concept d'identifiant de requête sans que je n'aie besoin d'ajouter un middleware. –

+1

Oh, hé, ma mauvaise.La chose [ring-logger-onelog "0.7.6"] fonctionne très bien. J'ai l'air d'avoir une demande-id non-muss, pas de problème. Merci. –

1

Il semble que ring.middleware.logger a coloration ANSI mis en œuvre par défaut et il n'y a aucune option de configuration pour désactiver facilement sans fournir votre propre pre-logger, post-logger etc.

Il y a cependant une chance que vous pouvez créer une solution de contournement: ring.middleware.logger utilise clansi pour appliquer les couleurs ANSI. clansi fournit une macro without-ansi pour désactiver la coloration.

Vous pouvez écrire votre propre middleware qui doit envelopper ring.middleware.logger:

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

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