2012-05-04 6 views
6

Vorrei modificare il colore di un messaggio di registro in uscita sul terminale a seconda del livello di registro, argomento, ecc.,.È disponibile un semplice logger abilitato per il colore per Haskell?

L'unico logger I found che fa questo in Haskell fa parte del pacchetto xmonad-contrib, ma non voglio dipendere da esso poiché è piuttosto grande.

So che Yesod registra a colori, ma non è ovvio per me come far funzionare il suo logger al di fuori di un'applicazione web Yesod.

Ho esaminato hslogger che sembra essere molto simile a System.Log.Logger, ma nessuno dei due sembra avere supporto colore fuori dalla scatola.

hslogger è estensibile tramite custom LogHandlers, quindi forse qualcuno ne ha implementato uno con supporto colori?

Ci sono alternative per l'accesso a Haskell che ho ignorato finora?

EDIT:

Seguendo il consiglio di Don Stewart, ho implementato un custom log handler che funziona con hslogger e ANSI-C, al fine di consentire la registrazione al terminale a colori.

+0

Potrebbe essere necessario inviare una patch, ad es. aggiungendo combinatori di colori - http://hackage.haskell.org/packages/archive/ansi-wl-pprint/0.6.4/doc/html/Text-PrettyPrint-ANSI-Leijen.html#g:9 –

+1

Grazie, I ' Provalo: implementa un LogHandler abilitato per il colore e rendilo disponibile o, se possibile, inserirlo in hslogger. –

risposta

5

A partire da maggio 2012, le librerie di registrazione disponibili per Haskell sono:

E alcuni tra quelli più specializzati:

  • greg-client - un client per il sistema di registrazione greg distribuito
  • fast-logger - un sistema di registrazione ottimizzata per un veloce IO

Nessuno supporta la colorazione del terminale ansi. Ci sono diverse librerie per la colorazione ansi, quindi non dovrebbe essere troppo difficile da aggiungere. Per esempio.

0

Se si desidera vedere un altro esempio di un registratore di colori, dare un'occhiata a Network.Wai.Middleware.RequestLogger (logStdoutDev) nel pacchetto wai-extra. Questo cambia colore per richiesta, ma dovrebbe servire come buon esempio.