Como mudar a cor da fonte do console do node.js.

570

Eu tive que mudar a cor de fundo do console para branco devido a problemas nos olhos, mas a fonte é cinza e torna as mensagens ilegíveis. Como posso mudá-lo?

MaiaVictor
fonte
4
No mesmo local que você já usou para alterar a cor do plano de fundo, você pode alterar as outras cores.
Dan D.
@hippietrail, vocês encontraram uma solução melhor ou podem aceitar uma das respostas para esta pergunta?
Nelsonic
Como você faz isso no Node.js puro? Sem cores ou qualquer outro pacote.
Costa
1
Estou tendo o mesmo problema. Eu suspeito que o @Viclib esteja usando o Windows (como eu sou), e é por isso que as instruções para alterar as cores dos terminais são um conceito estranho. O prompt de comando do Windows permite alterar 2 cores de primeiro plano e 2 de fundo. O nó usa outras cores que o prompt de comando do Windows não pode definir.
Greg madeiras
2
Mais tarde, descobri que meu modelo mental de como as cores do prompt de comando do Windows funcionavam estava completamente errado. Presumi incorretamente (devido a uma interface do usuário terrível) que você só pode alterar as cores de primeiro plano e de primeiro plano. Isto está errado. Todas as 16 cores podem ser usadas por um aplicativo de console, e é vital escolher cores sensíveis para todas as 16 e SEMPRE usar o ladrilho de cores 1 como plano de fundo (e o ladrilho 9 para "plano de fundo pop-up"). Essa foi uma revelação para mim, escrevi uma postagem no blog (um evento raro de fato). gregwoods.co.uk/2015/04/...
Greg Woods,

Respostas:

1151

Abaixo, você pode encontrar uma referência de cores do texto a ser comandada ao executar o aplicativo node.js.

console.log('\x1b[36m%s\x1b[0m', 'I am cyan');  //cyan
console.log('\x1b[33m%s\x1b[0m', stringToMakeYellow);  //yellow

Nota %sé onde a string (o segundo argumento) é injetada.\x1b[0mredefine a cor do terminal para que não continue mais a cor escolhida após esse ponto.

Referência de cores

Reset = "\x1b[0m"
Bright = "\x1b[1m"
Dim = "\x1b[2m"
Underscore = "\x1b[4m"
Blink = "\x1b[5m"
Reverse = "\x1b[7m"
Hidden = "\x1b[8m"

FgBlack = "\x1b[30m"
FgRed = "\x1b[31m"
FgGreen = "\x1b[32m"
FgYellow = "\x1b[33m"
FgBlue = "\x1b[34m"
FgMagenta = "\x1b[35m"
FgCyan = "\x1b[36m"
FgWhite = "\x1b[37m"

BgBlack = "\x1b[40m"
BgRed = "\x1b[41m"
BgGreen = "\x1b[42m"
BgYellow = "\x1b[43m"
BgBlue = "\x1b[44m"
BgMagenta = "\x1b[45m"
BgCyan = "\x1b[46m"
BgWhite = "\x1b[47m"

EDITAR:

Por exemplo, \x1b[31mé uma sequência de escape que será interceptada pelo seu terminal e instrui-o a mudar para a cor vermelha. De fato, \x1bé o código para o caractere de controle não imprimível escape . As seqüências de escape que lidam apenas com cores e estilos também são conhecidas como código de escape ANSI e são padronizadas; portanto, elas devem funcionar em qualquer plataforma.

A Wikipedia tem uma boa comparação de como os diferentes terminais exibem as cores https://en.wikipedia.org/wiki/ANSI_escape_code#Colors

Bud Damyanov
fonte
42
Aceitei essa pergunta porque é a mais preguiçosa que funciona, tem muitas cores e nenhuma dependência. Se você deseja uma solução mais simples com dependências, verifique a resposta do @ nelsonic, que sugere bibliotecas muito diretas.
MaiaVictor
7
Onde você encontrou essa referência? O que significa cada caractere em um valor de cor?
Giorgos.nl
10
@ giorgos29cm → veja aqui . Btw, adicionar um 1;para cores brilhantes, ou seja, "\ X1B [1; 34m" == azul claro ...
Frank Nocke
2
Como devo impedir que esses caracteres sejam exibidos ao imprimir em arquivo, e não no console?
Sky
1
Curiosamente, no PowerShell do Windows 10, o amarelo fica branco? Amarelo pode ser feito para funcionar; giz faz isso. No entanto, essa resposta me impediu de adicionar giz como uma dependência de alguns logs desprezíveis, obrigado!
Webel
318

Existem vários pacotes disponíveis para formatar o texto do console no Node.js. Os mais populares são:

Uso:


GIZ:

const chalk = require('chalk');
console.log(chalk.red('Text in red'));

CLI-COLOR:

const clc = require('cli-color');
console.log(clc.red('Text in red'));

CORES:

const colors = require('colors');
console.log('Text in red'.red);

Muitas pessoas notaram sua desaprovação de colorsalterar o protótipo String . Se você preferir que seus protótipos sejam deixados em paz, use o seguinte código:

const colors = require('colors/safe');
console.log(colors.red('Text in red'));
nelsonic
fonte
1
Ele ainda possui suporte simples e leve para estilos!
Hippietrail
2
O @devundef concorda com você em adicionar métodos ao objeto String. Vale a pena mencionar isso para o autor do módulo no GitHub. E / ou sugerindo um módulo / método alternativo com nível de simplicidade semelhante.
Nelsonic
3
Embora eu concorde que a resposta de MattJohnson (substituindo as cores padrão do método util.inpect - veja abaixo) é melhor do que usar o módulo Colors, o módulo Colors requer zero configuração e atende às necessidades da grande maioria dos usuários, que está simplesmente mudando a cor do console saída .log. Certamente, "mexer com os built-ins" é ruim (concordo 100%), mas nenhum código implantado deve conter instruções console.log, portanto, vamos ser pragmáticos sobre isso. @devundef Os métodos extras de String adicionados à bagunça do protótipo com seus testes de unidade?
Nelsonic
8
O Colors agora tem isso: var colors = require('colors/safe');e depois usecolors.red('left string all alone')
Laoujin 29/04
1
Bem localizado @Laoujin - da próxima vez, sinta-se à vontade para propor uma edição. Eu alterei o exemplo de código para Cores na resposta.
Nelsonic 30/12/2015
155

Se você quiser alterar as cores diretamente sem um módulo, tente

console.log('\x1b[36m', 'sometext' ,'\x1b[0m');

Primeiro, \x1b[36maltere as cores para 36e depois volte para a cor do terminal 0.

Aqui está uma lista de códigos de cores ANSI

Henry Tseng
fonte
15
Obrigado por mencionar como redefinir a cor de volta.
Vasyl Boroviak
25
Aqui estão os códigos de terminal ANSI, telepathy.freedesktop.org/doc/telepathy-glib/...
Coma em Joes
1
Que tal mudar o estilo da fonte, como vermelho, verde e itálico?
uzay95
1
Funcionou perfeitamente, não estragou os códigos de escape octais, sendo impedidos no modo estrito.
Florrie
70

para colorir sua saída Você pode usar exemplos de lá:
https://help.ubuntu.com/community/CustomizingBashPrompt

Também um Gist para nodeJs

Por exemplo, se você quiser parte do texto em vermelho, basta fazer o console.log com:

"\033[31m this will be red \033[91m and this will be normal"

Com base nisso, criei a extensão "colog" para o Node.js. Você pode instalá-lo usando:

npm install colog

Repo e npm: https://github.com/dariuszp/colog

Dariuszp
fonte
1
Acredito que o OP não deseja imprimir texto específico em uma cor específica, mas toda a saída do Terminal tenha uma cor diferente por padrão, talvez até preta, devido ao fundo branco.
Cwoebker
Então ele deve alterar as configurações do seu terminal. Tenho certeza que é possível no Linux. Não faço ideia do Windows.
Dariuszp
14
\033[31mfunciona mas \033[91mnão funciona . Para o Ubuntu Terminal deveria ser \033[0m.
Redsandro 13/01
4
E escapes octais não parecem trabalho:error: octal escape sequences "\033[31mServer ready @ #{app.get('port')}\033[91m" are not allowed
jcollum
4
\033[0mdeve ser usado para ligar a para trás o texto ao normal, não\033[91m
mollerhoj
31

Esta é uma lista de cores disponíveis (plano de fundo, primeiro plano) no console com ações disponíveis (redefinir, reverter, ...).

const colors = {
 Reset: "\x1b[0m",
 Bright: "\x1b[1m",
 Dim: "\x1b[2m",
 Underscore: "\x1b[4m",
 Blink: "\x1b[5m",
 Reverse: "\x1b[7m",
 Hidden: "\x1b[8m",
 fg: {
  Black: "\x1b[30m",
  Red: "\x1b[31m",
  Green: "\x1b[32m",
  Yellow: "\x1b[33m",
  Blue: "\x1b[34m",
  Magenta: "\x1b[35m",
  Cyan: "\x1b[36m",
  White: "\x1b[37m",
  Crimson: "\x1b[38m" //القرمزي
 },
 bg: {
  Black: "\x1b[40m",
  Red: "\x1b[41m",
  Green: "\x1b[42m",
  Yellow: "\x1b[43m",
  Blue: "\x1b[44m",
  Magenta: "\x1b[45m",
  Cyan: "\x1b[46m",
  White: "\x1b[47m",
  Crimson: "\x1b[48m"
 }
};

Use-o da seguinte forma:

 console.log(colors.bg.Blue, colors.fg.White , "I am white message with blue background", colors.Reset) ; 
 //don't forget "colors.Reset" to stop this color and return back to the default color

Você também pode instalar:

npm install console-info console-warn console-error --save-dev

A TI fornecerá uma saída mais próxima do console do lado do cliente:

insira a descrição da imagem aqui

Abdennour TOUMI
fonte
1
Estou usando o mesmo e funciona bem, mas por algum motivo Dim não faz nada? Eu quero o efeito de cor cinza, para que o pensamento usasse a cor branca com efeito esmaecido, resultaria em cor cinza, mas apenas a cor branca não imprime. Qualquer ideia?
Angad
28

De acordo com esta documentação , você pode alterar as cores com base no tipo de dados da saída:

// you'll need the util module
var util = require('util');

// let's look at the defaults: 
util.inspect.styles

{ special: 'cyan',
  number: 'yellow',
  boolean: 'yellow',
  undefined: 'grey',
  null: 'bold',
  string: 'green',
  date: 'magenta',
  regexp: 'red' }

// what are the predefined colors?
util.inspect.colors

{ bold: [ 1, 22 ],
  italic: [ 3, 23 ],
  underline: [ 4, 24 ],
  inverse: [ 7, 27 ],
  white: [ 37, 39 ],
  grey: [ 90, 39 ],
  black: [ 30, 39 ],
  blue: [ 34, 39 ],
  cyan: [ 36, 39 ],
  green: [ 32, 39 ],
  magenta: [ 35, 39 ],
  red: [ 31, 39 ],
  yellow: [ 33, 39 ] }

Esses parecem ser códigos de escape ANSI SGR, onde o primeiro número é o código a ser emitido antes da saída e o segundo número é o código a ser emitido depois. Então, se olharmos para o gráfico de códigos ANSI SGR na Wikipedia , você verá que muitos deles começam com um número 30-37 para definir a cor do primeiro plano e terminam em 39 para redefinir a cor do primeiro plano padrão.

Então, uma coisa que eu não gosto é como algumas delas são escuras. Especialmente datas. Vá em frente e tente new Date()no console. Magenta escura sobre preto é realmente difícil de ler. Vamos mudar isso para uma magenta clara.

// first define a new color
util.inspect.colors.lightmagenta = [95,39];

// now assign it to the output for date types
util.inspect.styles.date = 'lightmagenta';

Agora, quando você tenta new Date() , a saída é muito mais legível.

Se você deseja definir cores automaticamente ao iniciar o nó, crie um script que inicie a repl, assim:

// set your colors however desired
var util = require('util');
util.inspect.colors.lightmagenta = [95,39];
util.inspect.styles.date = 'lightmagenta';

// start the repl    
require('repl').start({});

Salve este arquivo (por exemplo init.js) e executenode.exe init.js . Ele definirá as cores e ativará o prompt de comando node.js.

(Agradecemos a loganfsmyth nesta resposta pela ideia de repl.)

Matt Johnson-Pint
fonte
19

Esta biblioteca de Sindre Sorhus é a melhor no momento:

giz

  • Alto desempenho
  • Não se estende String.prototype
  • API expressiva
  • Capacidade de aninhar estilos
  • Limpo e focado
  • Detecta automaticamente o suporte de cores
  • Ativamente mantido
  • Usado por mais de 5500 módulos
callum
fonte
2
sim, mas a sua outra dependência
wayofthefuture
18

Os códigos de cores são como mencionado

Reset: "\x1b[0m"
Bright: "\x1b[1m"
Dim: "\x1b[2m"
Underscore: "\x1b[4m"
Blink: "\x1b[5m"
Reverse: "\x1b[7m"
Hidden: "\x1b[8m"

FgBlack: "\x1b[30m"
FgRed: "\x1b[31m"
FgGreen: "\x1b[32m"
FgYellow: "\x1b[33m"
FgBlue: "\x1b[34m"
FgMagenta: "\x1b[35m"
FgCyan: "\x1b[36m"
FgWhite: "\x1b[37m"

BgBlack: "\x1b[40m"
BgRed: "\x1b[41m"
BgGreen: "\x1b[42m"
BgYellow: "\x1b[43m"
BgBlue: "\x1b[44m"
BgMagenta: "\x1b[45m"
BgCyan: "\x1b[46m"
BgWhite: "\x1b[47m"

Por exemplo, se você quiser ter um texto Dim, Red com fundo azul, poderá fazê-lo em Javascript como este:

console.log("\x1b[2m", "\x1b[31m", "\x1b[44m", "Sample Text", "\x1b[0m");

A ordem das cores e efeitos parece não ser tão importante, mas lembre-se sempre de redefinir as cores e os efeitos no final.

Shnd
fonte
Piscar @Sergey também não funciona para mim, parece que ele não está disponível em Node
Sv443
@ Sv443 Mas funciona na captura de tela :) E a pergunta era sobre Node. Eu pensei que não funcionava apenas no console do Windows. Qual SO você usa?
Sergey
2
@Sergey Estou usando o Windows e tentou em CMD e PowerShell e ambos não funcionam
Sv443
@Sergey Minhas capturas de tela são do aplicativo de terminal do MacOS. Eu acredito que isso é algo que seu aplicativo shell deve suportar. Se você estiver usando o Windows, sugiro tentar instalar o Cygwin e tentar isso no bash. Estou curioso para saber sobre isso também.
Shnd
@ Shnd Não sei se é o mesmo, mas tentei no git-bash e também não funcionou.
Sergey
14

Um one-liner útil que escrevi para scripts npm que não podem ter dependências:

const { r, g, b, w, c, m, y, k } = [
  ['r', 1], ['g', 2], ['b', 4], ['w', 7],
  ['c', 6], ['m', 5], ['y', 3], ['k', 0],
].reduce((cols, col) => ({
  ...cols,  [col[0]]: f => `\x1b[3${col[1]}m${f}\x1b[0m`
}), {})

console.log(`${g('I')} love ${r('Italy')}`)

Editar: r,g,b,w,c,m,y,k significa vermelho, verde, azul, branco, ciano, magenta, amarelo e blac (k)

chriskelly
fonte
Parece útil, mas por favor, você pode explicar melhor? Modo de detetive ativado: ah ok, rgbwc ... significa vermelho, verde, azul, branco, ciano, magenta, amarelo ek?
precisa saber é o seguinte
10

Para uma alternativa popular às cores que não mexem com os métodos internos do objeto String, recomendo verificar as cores cli .

Inclui cores e estilos encadeados, como negrito, itálico e sublinhado.

Para uma comparação de vários módulos nesta categoria, consulte aqui .

user456584
fonte
10

Sem bibliotecas, sem complicações, simples:

console.log(red('Error!'));

function red(s) {
    return '\033[31m' + s;
}
caminho do futuro
fonte
1
Não é simples quando você descobre que ele não funciona com objetos da maneira como o console os manipula e que não respeita os tipos de fluxo do console ou o suporte TTY, o que cria mais problemas. É apenas um truque que trará muitos problemas no caminho.
Vitaly-t
Isso é o que JSON.stringify é para
wayofthefuture
10

Emoji

Você pode usar cores para o texto como outros mencionados em suas respostas.

Mas você pode usar emojis ! por exemplo, você pode usar Você pode usar ⚠️para mensagens de aviso e🛑 de erro.

Ou simplesmente use estes cadernos como uma cor:

📕: error message
📙: warning message
📗: ok status message
📘: action message
📓: canceled status message
📔: Or anything you like and want to recognize immediately by color

Bônus:

Esse método também ajuda a verificar rapidamente e localizar logs diretamente no código-fonte .

Mas a fonte emoji padrão do linux não é colorida por padrão e você pode querer torná-las coloridas primeiro.

Mojtaba Hosseini
fonte
6

Hoje existem duas maneiras de alterar as cores de um console do Node.js.

Uma é através de bibliotecas de uso geral que podem decorar uma sequência de texto com tags coloridas, que você envia através do padrão console.log.

As principais bibliotecas para isso hoje:

E a outra maneira - corrigindo os métodos de console existentes. Uma tal biblioteca - manakin permite definir automaticamente as cores padrão para todos os seus métodos de console ( log, warn, erroreinfo ).

Uma diferença significativa das bibliotecas de cores genéricas - ele pode definir cores globalmente ou localmente, mantendo a sintaxe e o formato de saída consistentes para todos os métodos de console do Node.j, que você usa sem precisar especificar as cores, pois todas são definidas automaticamente .

Eu tive que mudar a cor de fundo do console para branco devido a problemas nos olhos, mas a fonte é cinza e torna as mensagens ilegíveis. Como posso mudá-lo?

Especificamente para o seu problema, aqui está a solução mais simples:

var con = require('manakin').global;
con.log.color = 30; // Use black color for console.log

Ele definirá a cor preta para todas as console.logchamadas em seu aplicativo. Veja mais códigos de cores .

Cores padrão usadas pelo manakin :

insira a descrição da imagem aqui

vitaly-t
fonte
6

Eu sobrecarreguei os métodos do console.

var colors={
Reset: "\x1b[0m",
Red: "\x1b[31m",
Green: "\x1b[32m",
Yellow: "\x1b[33m"
};

var infoLog = console.info;
var logLog = console.log;
var errorLog = console.error;
var warnLog = console.warn;

console.info= function(args)
{
    var copyArgs = Array.prototype.slice.call(arguments);
    copyArgs.unshift(colors.Green);
    copyArgs.push(colors.Reset);
    infoLog.apply(null,copyArgs);
};

console.warn= function(args)
{
    var copyArgs = Array.prototype.slice.call(arguments);
    copyArgs.unshift(colors.Yellow);
    copyArgs.push(colors.Reset);
    warnLog.apply(null,copyArgs);
};
console.error= function(args)
{
    var copyArgs = Array.prototype.slice.call(arguments);
    copyArgs.unshift(colors.Red);
    copyArgs.push(colors.Reset);
    errorLog.apply(null,copyArgs);
};

// examples
console.info("Numeros",1,2,3);
console.warn("pares",2,4,6);
console.error("reiniciandooo");

A saída é.

insira a descrição da imagem aqui

Ronald
fonte
Isso não funciona com a sintaxe de formatação. Exemplo: console.info('Hello %s', 'World!')deve exibir Hello World!, e não Hello %s World!.
Vitaly-t
@ vitaly-t tente isso : deve funcionar.
Sergey
5

Me deparei com essa pergunta e queria usar algumas cores no stdout sem nenhuma dependência. Isso combina algumas das outras ótimas respostas aqui.

Aqui está o que eu tenho. (Requer o nó v4 ou superior)

// colors.js
const util = require('util')

function colorize (color, text) {
  const codes = util.inspect.colors[color]
  return `\x1b[${codes[0]}m${text}\x1b[${codes[1]}m`
}

function colors () {
  let returnValue = {}
  Object.keys(util.inspect.colors).forEach((color) => {
    returnValue[color] = (text) => colorize(color, text)
  })
  return returnValue
}

module.exports = colors()

Apenas exija o arquivo e use-o da seguinte forma:

const colors = require('./colors')
console.log(colors.green("I'm green!"))

Os códigos de cores predefinidos estão disponíveis aqui

Joseph Post
fonte
1
não funcionará corretamente quando redirecionado para um arquivo de log, por exemplo.
vitaly-t 23/07/16
4

console de pintura

Log colorido simples. Suporte para inspeção de objetos e atualização de linha única Este pacote repintou o console.

instalar

npm install paint-console

uso

require('paint-console');

console.info('console.info();');
console.warn('console.warn();');
console.error('console.error();');
console.log('console.log();');

demonstração

borodinmk
fonte
4

Não quero nenhuma dependência disso e apenas esses funcionaram para mim no OS X. Todos os outros exemplos de respostas aqui me deram Octal literalerros.

Reset = "\x1b[0m"
Bright = "\x1b[1m"
Dim = "\x1b[2m"
Underscore = "\x1b[4m"
Blink = "\x1b[5m"
Reverse = "\x1b[7m"
Hidden = "\x1b[8m"

FgBlack = "\x1b[30m"
FgRed = "\x1b[31m"
FgGreen = "\x1b[32m"
FgYellow = "\x1b[33m"
FgBlue = "\x1b[34m"
FgMagenta = "\x1b[35m"
FgCyan = "\x1b[36m"
FgWhite = "\x1b[37m"

BgBlack = "\x1b[40m"
BgRed = "\x1b[41m"
BgGreen = "\x1b[42m"
BgYellow = "\x1b[43m"
BgBlue = "\x1b[44m"
BgMagenta = "\x1b[45m"
BgCyan = "\x1b[46m"
BgWhite = "\x1b[47m"

fonte: https://coderwall.com/p/yphywg/printing-colorful-text-in-terminal-when-run-node-js-script

Lukas Liesis
fonte
4

Encontrei esta resposta acima ( https://stackoverflow.com/a/41407246/4808079 ) muito útil, mas incompleta. Se você sempre quis colorir algo uma vez, acho que seria bom, mas acho que compartilhá-lo em uma forma funcional executável é muito mais aplicável aos casos de uso da vida real.

const Color = {
  Reset: "\x1b[0m",
  Bright: "\x1b[1m",
  Dim: "\x1b[2m",
  Underscore: "\x1b[4m",
  Blink: "\x1b[5m",
  Reverse: "\x1b[7m",
  Hidden: "\x1b[8m",

  FgBlack: "\x1b[30m",
  FgRed: "\x1b[31m",
  FgGreen: "\x1b[32m",
  FgYellow: "\x1b[33m",
  FgBlue: "\x1b[34m",
  FgMagenta: "\x1b[35m",
  FgCyan: "\x1b[36m",
  FgWhite: "\x1b[37m",

  BgBlack: "\x1b[40m",
  BgRed: "\x1b[41m",
  BgGreen: "\x1b[42m",
  BgYellow: "\x1b[43m",
  BgBlue: "\x1b[44m",
  BgMagenta: "\x1b[45m",
  BgCyan: "\x1b[46m",
  BgWhite: "\x1b[47m"
}

function colorString(color, string) {
  return `${color}${string}${Color.Reset}`;
}

function colorStringLog(color, string) {
  console.log(colorString(color, string));
}

Use-o assim:

colorStringLog(Color.FgYellow, "Some Yellow text to console log");

console.log([
  colorString(Color.FgRed, "red"),
  colorString(Color.FgGreen, "green"),
  colorString(Color.FgBlue, "blue"),
].join(", "));
Seph Reed
fonte
4

logger / index.js

const colors = {
    Reset : "\x1b[0m",
    Bright : "\x1b[1m",
    Dim : "\x1b[2m",
    Underscore : "\x1b[4m",
    Blink : "\x1b[5m",
    Reverse : "\x1b[7m",
    Hidden : "\x1b[8m",

    FgBlack : "\x1b[30m",
    FgRed : "\x1b[31m",
    FgGreen : "\x1b[32m",
    FgYellow : "\x1b[33m",
    FgBlue : "\x1b[34m",
    FgMagenta : "\x1b[35m",
    FgCyan : "\x1b[36m",
    FgWhite : "\x1b[37m",

    BgBlack : "\x1b[40m",
    BgRed : "\x1b[41m",
    BgGreen : "\x1b[42m",
    BgYellow : "\x1b[43m",
    BgBlue : "\x1b[44m",
    BgMagenta : "\x1b[45m",
    BgCyan : "\x1b[46m",
    BgWhite : "\x1b[47m",
};

module.exports = () => {
    Object.keys(colors).forEach(key => {
        console['log' + key] = (strg) => {
            if(typeof strg === 'object') strg = JSON.stringify(strg, null, 4);
            return console.log(colors[key]+strg+'\x1b[0m');
        }
    });
}

app.js

require('./logger')();

Em seguida, use-o como:

console.logBgGreen(" grüner Hintergrund ")
Daniel
fonte
4

Isso depende um pouco da plataforma em que você está. A maneira mais comum de fazer isso é imprimindo seqüências de escape ANSI. Para um exemplo simples, aqui está um código python dos scripts de compilação do blender:

// This is a object for use ANSI escape to color the text in the terminal
const bColors = {
    HEADER    : '\033[95m',
    OKBLUE    : '\033[94m',
    OKGREEN   : '\033[92m',
    WARNING   : '\033[93m',
    FAIL      : '\033[91m',
    ENDC      : '\033[0m', 
    BOLD      : '\033[1m',   
    UNDERLINE : '\033[4m'
}

Para usar código como este, você pode fazer algo como

console.log(`${bColors.WARNING} My name is sami ${bColors.ENDC}`)
Sami
fonte
Recebo "Sequências de escape octais não são permitidas no modo estrito".
lucaswxp 5/03
3
var colorSet = {
    Reset: "\x1b[0m",
    Red: "\x1b[31m",
    Green: "\x1b[32m",
    Yellow: "\x1b[33m",
    Blue: "\x1b[34m",
    Magenta: "\x1b[35m"
};

var funcNames = ["info", "log", "warn", "error"];
var colors = [colorSet.Green, colorSet.Blue, colorSet.Yellow, colorSet.Red];

for (var i = 0; i < funcNames.length; i++) {
    let funcName = funcNames[i];
    let color = colors[i];
    let oldFunc = console[funcName];
    console[funcName] = function () {
        var args = Array.prototype.slice.call(arguments);
        if (args.length) {
            args = [color + args[0]].concat(args.slice(1), colorSet.Reset);
        }
        oldFunc.apply(null, args);
    };
}

// Test:
console.info("Info is green.");
console.log("Log is blue.");
console.warn("Warn is orange.");
console.error("Error is red.");
console.info("--------------------");
console.info("Formatting works as well. The number = %d", 123);
Sergey
fonte
3

Você também pode usar o colorworks .

Uso:

var cw = require('colorworks').create();
console.info(cw.compile('[[red|Red message with a [[yellow|yellow]] word.]]'));

Para facilitar a vida, você também pode fazer uma função com ela.

function say(msg) {
  console.info(cw.compile(msg));
}

Agora você pode fazer:

say(`[[yellow|Time spent: [[green|${time}]]ms.]]`);
SCLeo
fonte
2

Coolors

É muito bom para usar ou estender. Você pode usar simplesmente:

var coolors = require('coolors');
console.log(coolors('My cool console log', 'red'));

Ou com a configuração:

var coolors = require('coolors');
console.log(coolors('My cool console log', {
   text: 'yellow',
   background: 'red',
   bold: true,
   underline: true,
   inverse: true,
   strikethrough: true
}));

E parece realmente engraçado estender:

var coolors = require('coolors');
function rainbowLog(msg){
    var colorsText = coolors.availableStyles().text;
    var rainbowColors = colorsText.splice(3);
    var lengthRainbowColors = rainbowColors.length;
    var msgInLetters = msg.split('');
    var rainbowEndText = '';
    var i = 0;
    msgInLetters.forEach(function(letter){
        if(letter != ' '){
            if(i === lengthRainbowColors) i = 0;
            rainbowEndText += coolors(letter, rainbowColors[i]);
            i++;
        }else{
            rainbowEndText += ' ';
        }
    });
    return rainbowEndText;
}
coolors.addPlugin('rainbow', rainbowLog);
console.log(coolorsExtended('This its a creative example extending core with a cool rainbown style', 'rainbown'));

Ver módulo Coolors

user1710825
fonte
isso não funcionará corretamente no Node.js. quando redirecionado para um arquivo de log, por exemplo.
vitaly-t 23/07/16
2

Eu criei meu próprio módulo, StyleMe . Eu fiz isso para que eu possa fazer muito com pouca digitação. Exemplo:

var StyleMe = require('styleme');
StyleMe.extend() // extend the string prototype

console.log("gre{Hello} blu{world}!".styleMe()) // Logs hello world! with 'hello' being green, and 'world' being blue with '!' being normal.

Também pode ser aninhado:

console.log("This is normal red{this is red blu{this is blue} back to red}".styleMe())

Ou, se você não deseja estender o protótipo de string, pode escolher qualquer uma das 3 outras opções:

console.log(styleme.red("a string"))
console.log("Hello, this is yellow text".yellow().end())
console.log(styleme.style("some text","red,bbl"))
Andrew
fonte
1

No ubuntu, você pode simplesmente usar códigos de cores:

var sys = require('sys');
process.stdout.write("x1B[31m" + your_message_in_red + "\x1B[0m\r\n");
Kenjy Minamori
fonte
Por que os não utilizados require?
Jhpratt GOFUNDME RELICENSING
Isso foi há alguns anos atrás. Era necessário para gravação stdout, talvez agora já esteja importado por padrão.
Kenjy Minamori
Ah ok. Fiquei curioso porque não é como se sysestivesse sendo usado em qualquer lugar. Na verdade, não é necessário hoje em dia!
jhpratt RELACIONAMENTO GOFUNDME
1

node-colorify

Fornece funções para imprimir textos em cores e também para formatar textos como negrito, intermitente, etc.

raghu
fonte
3
Enquanto o link que você forneceu pode responder à pergunta. É melhor colocar as partes essenciais da sua solução diretamente na sua resposta, caso a página no link expire no futuro.
Kmeixner
1

Gostei muito da resposta de @ Daniel, mas as funções console.log {color} não funcionaram da mesma maneira que o console.log comum. Fiz algumas alterações e agora todos os parâmetros para as novas funções serão passados ​​para console.log (assim como os códigos de cores).

const _colors = {
    Reset : "\x1b[0m",
    Bright : "\x1b[1m",
    Dim : "\x1b[2m",
    Underscore : "\x1b[4m",
    Blink : "\x1b[5m",
    Reverse : "\x1b[7m",
    Hidden : "\x1b[8m",

    FgBlack : "\x1b[30m",
    FgRed : "\x1b[31m",
    FgGreen : "\x1b[32m",
    FgYellow : "\x1b[33m",
    FgBlue : "\x1b[34m",
    FgMagenta : "\x1b[35m",
    FgCyan : "\x1b[36m",
    FgWhite : "\x1b[37m",

    BgBlack : "\x1b[40m",
    BgRed : "\x1b[41m",
    BgGreen : "\x1b[42m",
    BgYellow : "\x1b[43m",
    BgBlue : "\x1b[44m",
    BgMagenta : "\x1b[45m",
    BgCyan : "\x1b[46m",
    BgWhite : "\x1b[47m",
};

const enableColorLogging = function(){
    Object.keys(_colors).forEach(key => {
        console['log' + key] = function(){
            return console.log(_colors[key], ...arguments, _colors.Reset);
        }
    });
}
J. Fortman
fonte
1

2017:

De maneira simples, adicionando cor de hora à mensagem, você não precisa alterar seu código, use keep your console.log ('msg') ou console.err ('error')

var clc = require("cli-color");
var mapping = {
  log: clc.blue,
  warn: clc.yellow,
  error: clc.red
};

["log", "warn", "error"].forEach(function(method) {
  var oldMethod = console[method].bind(console);
  console[method] = function() {
    oldMethod.apply(
      console,
      [mapping[method](new Date().toISOString())]
      .concat(arguments)
    );
  };
});

insira a descrição da imagem aqui

stackdave
fonte
0

Se você estiver usando o Windows CMD, vá para o terminal Properties / Colors (CMD no canto superior esquerdo) e redefina o valor RGB da cor ofensiva. No meu caso, acredito que seja o quinto quadrado de cor da esquerda, que mudei para (222.222.222). Não importa se o botão de opção selecionado no momento mostra Texto da tela ou Fundo da tela, pois você redefine a cor específica do "sistema". Depois de alterar a cor, não se esqueça de selecionar novamente a cor preferida para o plano de fundo ou texto antes de clicar em OK.

Após a alteração, todas essas mensagens avermelhadas do Node (Ember no meu caso) são claramente visíveis.

mp31415
fonte
0

Essa é uma abordagem para o Windows 10 (talvez para 7) e altera o esquema de cores (tema) para o próprio terminal cmd, npm, não apenas a saída do console para um aplicativo específico.

Encontrei o plug-in do Windows em funcionamento - Color Tool , que provavelmente é desenvolvido sob o guarda-chuva do Windows. Uma descrição está disponível no link .

Adicionei o diretório colortool à variável de caminho do ambiente do sistema e agora está disponível sempre que inicio o terminal (prompt de comando do NodeJs, cmd).

romano
fonte