2016-03-25 23 views
1

Project.clj'de [ring.middleware.logger "0.5.0" :exclusions [org.slf4j/slf4j-log4j12]] aracılığıyla bir günlük büyüsü alan bir proje miras aldım. ara katman kurmak için şöyle ring.middleware.logger/wrap-with-logger gelir ve bu sorunun bu günlük alanların bazı colorized ANSI çıkmasıdır ...ANSI renklendirme ring.middleware.logger loglarımı nasıl yazdırabilirim?

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 

... her istek gibi bana bazı güzel günlüğü alır. "A939" alanının yanı sıra "Başlangıç", "Tamamlandı" ve ANSI renkleriyle sunulan "Durum" kodunun üzerinde bir istek gibi bir istek vardır. Bu, şimdi, şimdi ascii basamaklar olarak görünen kontrol karakterleri olduğu için, işlerin parçalanması gibi, Splunk'daki günlükleri RegEx'e zorlaştırmanın hoş olmayan yan etkisi vardır.

2016-03-25 15:46:03,794 [0m[35m[44ma939[0m level=INFO [qtp509784188-34] onelog.core - [36mFinished...Status: [39m200[0m 

Ben ring.middleware.logger olay boyunca günlük çıkışının ANSI renklendirmenin bastırmak nasıl? ring.middleware.logger:

cevap

2

alternatif [ring-logger-onelog "0.7.6"] göç ​​etmektir:

Sen ring.middleware.logger sarmak gerekiyor Kendi orta yazabilirsiniz. Onu daha esnek hale getirme amacı ile ring.middleware.logger çatal olarak başladım. Örneğin, tüm ANSI renklendirmesini önleyebileceğiniz bir seçenek :printer :no-color içerir.

in the README gösterildiği gibi geçiş yolu, çok düzgün:

  • [ring.middleware.logger :as logger]
  • [ring.logger.onelog :as logger] için Geçiş seçeneklerinden logger/wrap-with-logger gerektiren Değiştir [ring.middleware.logger "0.5.0"] den [ring-logger-onelog "0.7.6"]
  • için project.clj içinde bağımlılık değiştirin anahtar kelime argümanları yerine uygun bir harita kullanmak.

Eğer kaydedilebilir olacağını görmek için çalıştırabilirsiniz bir example app var.

da (halka-logger-onelog için sonuçta log4j ... ya slf4j, emin değilim geçer, hangi onelog dayanır aksine) farklı günlüğü arkauçlu çalışır çekirdek ring-logger kütüphane var. ring-logger istekte yerleşik değil, ancak bunu kendiniz nasıl uygulayabileceğinizi gösteren an example in the README var.

+0

Güzel cevap, ve bu işe yarayacak, ama tam olarak anlamadığım clojure mantığını entegre etmek konusunda biraz isteksizim. Sanırım "reify" ın ne anlama geldiğini anlayabilmesi ... ... bir hastalık gibi göründüğü ya da en azından şiddetli olduğu anlamına gelir;). [Ring.logger.onelog olayı herhangi bir ara katman eklemem gerekmeden istek kimliği konseptini aldıysa harika olurdu. –

+1

Oh, hey, kötüyüm.[Ring-logger-onelog "0.7.6"] şey harika çalışıyor. Bir istek-id no-muss var, hayır-yaygara. Teşekkürler. –

1

O ring.middleware.logger ANSI boyama varsayılan olarak uygulamıştır ve kolayca kendi pre-logger, post-logger vb

bir geçici çözüm oluşturabilir bir şans Orada ancak sağlamadan devre dışı bırakmak için hiçbir yapılandırma seçeneği olduğu görülmektedir ANSI renkleri uygulamak için clansi kullanır. clansi, renklendirmeyi devre dışı bırakmak için without-ansi makrosu sağlar.

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

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