Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

160
Visualizações
Setting a the same unique ID in Winston for 2 transports

I am using winston-js as a logger in my project - it works fine, however I'm now trying to add a unique log Id to each log line for debugging.

I have 2 transports - 1) Console, 2) File.

I'd like the log ID for the same log line to be the same in for both transports. At the moment, as the request goes through my system, the log ID stays the same.

In the example code below I'm using winston's defaultMeta - which doesn't seem to work, however i've tried adding functions too - and get the same result.

I do I set the log ID for the same log line to be the same in for both transports?

Note: I am using UUID for the LogId in my project - for simplicity I've used a single number in the examples.

So for example my current setup does:

File

logID: 1 | Request: Post | Request: 1
logID: 1 | Request: Post | Request: 1
logID: 2 | Request: Post | Request: 2

Console

logID: 1 | Request: Post | Request: 1
logID: 1 | Request: Post | Request: 1
logID: 2 | Request: Post | Request: 2

I'd like:

File

logID: 1 | Request: Post | Request: 1
logID: 2 | Request: Post | Request: 1
logID: 3 | Request: Post | Request: 2

Console

logID: 1 | Request: Post | Request: 1
logID: 2 | Request: Post | Request: 1
logID: 3 | Request: Post | Request: 2

.

function devLogger () {

    const logFormat = printf(({ level, message, timestamp, stack, ...meta }) => {
        var logId = meta.logId
        return `${timestamp} [${level}] ${message} | ${logId} | Console`;
    })

    const jsonFormat = printf(({ level, message, timestamp, stack, ...meta }) => {
        var logId = meta.logId
        return `${timestamp} [${level}] ${message} | ${logId} | File`;
    })

    return createLogger({
        defaultMeta: { logId: uuidv4() }, // Add logId to both transports
        transports: [
            new transports.Console({
                level: 'debug',
                format: combine(
                    format.colorize(),
                    timestamp({ format: 'DD-MM-YY HH:mm:ss' }),
                    logFormat
                ),
            }),
            new transports.File({
                level: 'debug',
                filename: 'error.log',
                format: combine(timestamp({ format: 'DD-MM-YY HH:mm:ss' }), errors({ stack: true }), jsonFormat),
            }),
        ]
    });
}
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Fixed it with some straight forward variables.

First we set the LogId, the we reuse it, then we set it to a new ID ready for the next request.

This works as we run logFormat before jsonFormat

 function devLogger () {
    
        var setLogId = uuidv4()
    
        const logFormat = printf(({ level, message, timestamp, stack}) => {
            return `${timestamp} [${level}] ${message} | ${setLogId} | Console`;
        })
    
        const jsonFormat = printf(({ level, message, timestamp, stack}) => {
            var logId = setLogId
    
            setLogId = uuidv4()
            return `${timestamp} [${level}] ${message} | ${logId} | File`;
        })
    
    
    
        return createLogger({
            transports: [
                new transports.Console({
                    level: 'debug',
                    format: combine(
                        format.colorize(),
                        timestamp({ format: 'DD-MM-YY HH:mm:ss' }),
                        logFormat
                    ),
                }),
                new transports.File({
                    level: 'debug',
                    filename: 'error.log',
                    format: combine(timestamp({ format: 'DD-MM-YY HH:mm:ss' }), errors({ stack: true }), jsonFormat),
                }),
            ]
        });
    }
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda