Isso permanece muito amplo porque você NÃO pode fazer isso na máquina cliente.
Joshua de
Respostas:
112
Eu mesmo estava lidando com o mesmo problema. Há duas maneiras de fazer isso.
Quando você inclui o Winston, geralmente o padrão é adicionar um transporte de console. Para fazer os carimbos de data / hora funcionarem neste caso padrão, eu precisava:
Remova o transporte do console e adicione novamente com a opção de carimbo de data / hora.
Crie seu próprio objeto Logger com a opção de carimbo de data / hora definida como true.
O primeiro:
var winston = require('winston');
winston.remove(winston.transports.Console);
winston.add(winston.transports.Console,{'timestamp':true});
A segunda opção e mais limpa:
var winston = require('winston');var logger =new(winston.Logger)({
transports:[new(winston.transports.Console)({'timestamp':true})]});
Algumas das outras opções de transporte do console podem ser encontradas aqui :
level: Nível de mensagens que este transporte deve registrar (default 'debug').
silencioso: sinalizador booleano que indica se a saída deve ser suprimida (padrão falso).
colorize: Sinalizador booleano que indica se devemos colorir a saída (padrão falso).
timestamp: Sinalizador booleano que indica se devemos preceder a saída com carimbos de data / hora (padrão falso). Se a função for especificada, seu valor de retorno será usado em vez dos carimbos de data / hora.
Isso é ótimo. Normalmente, eu coloco isso em um arquivo dedicado para que possa facilmente obter meu logger configurado de qualquer arquivo, ou seja, coloco o código acima (opção 2) em um novo arquivo logger.js, seguido por module.exports = logger; então, a partir de qualquer arquivo, var logger = require ('./ logger.js') e posso fazer logger.info ('hello') de qualquer arquivo e obter a mesma configuração do Winston.
JHH
TypeError: (valor intermediário) não é uma função
Urasquirrel
80
As respostas acima não funcionaram para mim. Caso você esteja tentando adicionar um carimbo de data / hora aos seus logs usando a versão mais recente do Winston - 3.0.0-rc1, funcionou perfeitamente:
Usei 'format.combine ()'. Como eu precisava de carimbo de data / hora em todos os meus transportes, adicionei a opção de formatação dentro do createLogger, em vez de dentro de cada transporte. Minha saída no console e no arquivo (activity.log) é a seguinte:
{"message":"Connected to mongodb","level":"info","timestamp":"2018-02-01T22:35:27.758Z"}{"message":"Connected to mongodb","level":"info","timestamp":"2018-02-01T22:35:27.758Z"}
Podemos adicionar formatação a este carimbo de data / hora em 'format.combine ()' como de costume usando:
Isso também funciona para logger.info('Message', someObject)? Eu configurei um formato personalizado usando combine e não consigo obter o someObjectincluído na mensagem de log.
Algo em
1
Consegui ser someObjectincluído usando a seguinte instrução printf ${info.timestamp} [${info.level.toUpperCase()}]: ${info.message} ${JSON.stringify(info)}. Inclui o nível, o carimbo de data / hora e a mensagem que acho que posso excluir.
Algo em
9
Você pode usar built-in util e sempre para conseguir o registo com timestap para o seu servidor nodejs. Ao iniciar um servidor, adicione a saída de registro como parte do parâmetro:
forever start -ao log/out.log server.js
E então você pode escrever util em seu server.js
server.js
var util = require('util');
util.log("something with timestamp");
A saída será semelhante a esta para o arquivo out.log:
Infelizmente, util.error()pula o registro de data e hora da saída.
Saran
4
Embora eu não saiba sobre o winston, esta é uma sugestão. Eu uso log4js para registrar e meus registros por padrão têm esta aparência
[2012-04-2316:36:02.965][INFO]Development-NodeApplication is running on port 8090[2012-04-2316:36:02.966][FATAL]Development-ConnectionTerminated to '127.0.0.1''6379'
O desenvolvimento é o ambiente do meu processo de nó & [INFO | FATAL] é o nível de log
Manter perfis diferentes para registro é possível no log4js. Tenho perfis de Desenvolvimento e Produção. Também existem tipos de registradores como anexador de arquivo rolante, anexador de console, etc. Como um complemento, seus arquivos de log serão coloridos com base no nível de log [Trace, Info, Debug, Error, Fatal];)
log4js irá sobrescrever seu console.log É um parâmetro configurável agora em 0,5+
Para sua informação: versões mais recentes de log4js-node (0.5+) não substituem console.log automaticamente.
Jeff Hiltz
@jeffhiltz Ya você está certo :) Agora é um parâmetro configurável
Tamil
2
Às vezes, o formato de carimbo de data / hora padrão pode não ser conveniente para você. Você pode substituí-lo por sua implementação.
Ao invés de
var winston = require('winston');var logger =new(winston.Logger)({
transports:[new(winston.transports.Console)({'timestamp':true})]});
você pode escrever
var winston = require('winston');var logger =new(winston.Logger)({
transports:[new(winston.transports.Console)({'timestamp':function(){return<write your custom formatted date here>;}})]});
poderíamos usar o carimbo do console para adicionar carimbo de data / hora e nível de registro ao console existente: require('console-stamp')(console, '[yyyy-mm-dd HH:MM:ss.l]')
Outra solução é agrupar o logger em um arquivo que exporta algumas funções como logger.info (), logger.error (), etc., então você apenas passa uma chave extra para ser enviada em cada log de mensagens.
Peguei a resposta de Biswadev e criei um objeto JSON stringificado. Dessa forma, se eu precisar processar os logs posteriormente, ele estará em um formato bem estruturado.
Respostas:
Eu mesmo estava lidando com o mesmo problema. Há duas maneiras de fazer isso.
Quando você inclui o Winston, geralmente o padrão é adicionar um transporte de console. Para fazer os carimbos de data / hora funcionarem neste caso padrão, eu precisava:
O primeiro:
A segunda opção e mais limpa:
Algumas das outras opções de transporte do console podem ser encontradas aqui :
fonte
As respostas acima não funcionaram para mim. Caso você esteja tentando adicionar um carimbo de data / hora aos seus logs usando a versão mais recente do Winston - 3.0.0-rc1, funcionou perfeitamente:
Usei 'format.combine ()'. Como eu precisava de carimbo de data / hora em todos os meus transportes, adicionei a opção de formatação dentro do createLogger, em vez de dentro de cada transporte. Minha saída no console e no arquivo (activity.log) é a seguinte:
Podemos adicionar formatação a este carimbo de data / hora em 'format.combine ()' como de costume usando:
fonte
Podemos fazer assim também
fonte
logger.info('Message', someObject)
? Eu configurei um formato personalizado usando combine e não consigo obter osomeObject
incluído na mensagem de log.someObject
incluído usando a seguinte instrução printf${info.timestamp} [${info.level.toUpperCase()}]: ${info.message} ${JSON.stringify(info)}
. Inclui o nível, o carimbo de data / hora e a mensagem que acho que posso excluir.Você pode usar built-in util e sempre para conseguir o registo com timestap para o seu servidor nodejs. Ao iniciar um servidor, adicione a saída de registro como parte do parâmetro:
E então você pode escrever util em seu server.js
server.js
A saída será semelhante a esta para o arquivo out.log:
out.log
fonte
util.error()
pula o registro de data e hora da saída.Embora eu não saiba sobre o winston, esta é uma sugestão. Eu uso log4js para registrar e meus registros por padrão têm esta aparência
O desenvolvimento é o ambiente do meu processo de nó & [INFO | FATAL] é o nível de log
Manter perfis diferentes para registro é possível no log4js. Tenho perfis de Desenvolvimento e Produção. Também existem tipos de registradores como anexador de arquivo rolante, anexador de console, etc. Como um complemento, seus arquivos de log serão coloridos com base no nível de log [Trace, Info, Debug, Error, Fatal];)
log4js irá sobrescrever seu console.logÉ um parâmetro configurável agora em 0,5+fonte
Às vezes, o formato de carimbo de data / hora padrão pode não ser conveniente para você. Você pode substituí-lo por sua implementação.
Ao invés de
você pode escrever
Consulte https://github.com/winstonjs/winston#custom-log-format para os detalhes
fonte
poderíamos usar o carimbo do console para adicionar carimbo de data / hora e nível de registro ao console existente:
require('console-stamp')(console, '[yyyy-mm-dd HH:MM:ss.l]')
Consulte https://github.com/starak/node-console-stamp para obter os detalhes
fonte
Outra solução é agrupar o logger em um arquivo que exporta algumas funções como logger.info (), logger.error (), etc., então você apenas passa uma chave extra para ser enviada em cada log de mensagens.
loggerService.js
qualquer-arquivo.js
seu-log.log
fonte
Peguei a resposta de Biswadev e criei um objeto JSON stringificado. Dessa forma, se eu precisar processar os logs posteriormente, ele estará em um formato bem estruturado.
Uso:
Resultado:
arquivo info.log:
Console:
fonte