Colorer la console

Lorsque l'on travaille avec javascript, on a souvent recours à la méthode console.log() pour afficher des messages dans la console du navigateur.

Pour plus de clarté, on peut styliser ces messages.

Les messages dans la console

Il y a plusieurs types de messages pour l'objet console mais les plus utilisés sont :

console.log('mon message')
console.error('mon erreur')
console.info('mon information')

Ils affichent respectivement

Styliser les messages

Il est possible d'utiliser du CSS dans ses messages de console pour les rendre plus lisibles. Il suffit pour cela d'ajouter '%c' devant le message à afficher et de le faire suivre par une série de paramètres CSS:

console.log('%c mon message', 'background: #ffce00; color: black; display: block; text-align: left; padding: 4px 10px')

affichera

Plusieurs messages d'un coup ?

console.log('%c mon message' + '%c mon second message', 'color: yellow; ', 'color:red')

affichera

Plusieurs lignes de messages ?

console.log('%c mon message' +'\n'+ '%c mon second message', 'color: yellow; background:red; padding:5px 10px; display:block;', 'color:red; background:yellow; padding:5px 10px; margin-top:10px; display:block;')

Affichera

Une petite classe JS pour gérer tout ca plus facilement

class Console {

    constructor(styles) {
        this.styles = styles ?? {
            "success"  : ['background: green', 'color: white', 'display: block', 'text-align: left', 'padding: 4px 10px'],
            "error"    : ['background: red', 'color: white', 'display: block', 'text-align: left', 'padding: 4px 10px'],
            "warning"     : ['background: yellow', 'color: black 'display: block', 'text-align: left', 'padding: 4px 10px'],
        }
    }

  log(message, styles = null) {
        const lines   = message.split('\n')
        const prefix  = styles ? '%c' : ''
        let toPrint   = [], useStyles = []

        lines.forEach((value, index) => {

            toPrint.push(prefix + value.trimLeft())

            if(styles && styles[index]) {
                const style = styles[index]

                if (this.styles[style]) {
                    useStyles.push(this.styles[style].join(';'))
                } else {
                    useStyles.push(this.styles['success'].join(';'))
                }
            }
        })

        const joiner = lines.length > 1 ? '\n' : ''
        console.log(toPrint.join(joiner, ...useStyles)
    }

}

Pour l'utiliser

const myConsole = new Console()
// ou
const myConsole = new Console({
    "success"  : ['background: blue', 'color: white', 'display: block', 'text-align: left', 'padding: 4px 10px'],
    "error"    : ['background: black', 'color: yellow 'display: block', 'text-align: left', 'padding: 4px 10px'],
})

// pour afficher un message
myConsole.log('Mon message à afficher', ['success'])
// ou bien
myConsole.log('mon message de test \n Un autre message \n Et encore un autre', ['error', 'success', 'warning'])