Winston: Nenhum arquivo de log está sendo criado

Criado em 26 mai. 2016  ·  27Comentários  ·  Fonte: winstonjs/winston

SO: Ubuntu 14.04
NodeJS: 6.2.0
Winston: 2.2.0

O código a seguir não cria um arquivo de log:

const logger = new Winston.Logger({
    level: 'verbose',
    transports: [
      new Winston.transports.Console({
        timestamp: true
      }),
      new Winston.transports.File({
        filename: 'app.log',
        timestamp: true
      })
    ]
  });

logger.info('Holla');

Ele se conecta ao terminal sem problemas:

2016-05-26T13:11:49.927Z - info: Holla

Mas nenhum arquivo de log foi criado.

Comentários muito úteis

Acabei de encontrar esse problema. O diretório deve existir primeiro. O winston criará novos arquivos para você, mas não parece criar novos diretórios para você (por exemplo, você precisa criar o diretório "logs" se estiver tentando fazer login em um arquivo localizado em logs / app.js)

Todos 27 comentários

+1

+1

+1

+1

Parece problema no nó 6 em fs.stat ()
Por algum motivo, o callback nunca executado fs.stat ()

    fs.stat(fullname, function (err, stats) {
      if (err) {
        if (err.code !== 'ENOENT') {
          return self.emit('error', err);
        }
        return createAndFlush(0);
      }

      if (!stats || (self.maxsize && stats.size >= self.maxsize)) {
        //
        // If `stats.size` is greater than the `maxsize` for
        // this instance then try again
        //
        return self._incFile(function() {
          checkFile(self._getFile());
        });
      }

      createAndFlush(stats.size);
    });
  })(this._getFile()); 

Está consertado?

Eu resolvi esse problema dando o caminho absoluto assim:
winston.add(winston.transports.File, { filename: $ {__ dirname} /logs/appError.log })

Isso está funcionando para mim. I tinha um problema recentemente em um projeto com Winston usando Atom onde os arquivos .gitignore não estavam mostrando no diretório do projeto no Atom arquivo devido a uma configuração atualizada no pacote de árvore-view ... (Opção: Esconder VCS Ignorado Arquivos)

_Usando o Nó 6.2.2 e Winston 2.2.0._

Código:

'use strict';

let Winston = require('winston');


const logger = new Winston.Logger({
    level: 'verbose',
    transports: [
      new Winston.transports.Console({
        timestamp: true
      }),
      new Winston.transports.File({
        filename: 'app.log',
        timestamp: true
      })
    ]
  });

logger.info('Holla');

Cria um arquivo app.log com saída: {"level":"info","message":"Holla","timestamp":"2016-07-01T19:29:14.035Z"} e registra no console com 2016-07-01T19:29:14.034Z - info: Holla

Acabei de encontrar esse problema. O diretório deve existir primeiro. O winston criará novos arquivos para você, mas não parece criar novos diretórios para você (por exemplo, você precisa criar o diretório "logs" se estiver tentando fazer login em um arquivo localizado em logs / app.js)

Deseje que o winston verifique se a pasta / diretório de log existe e, em seguida, crie uma pasta / diretório de log caso não exista durante a inicialização. Eu acho que fs pode fazer isso certo?

+1

+1

+1

if (!fs.existsSync('path') {
    fs.mkdirSync('path');
}

http://thisdavej.com/using-winston-a-versatile-logging-library-for-node-js/

Eu estava tendo este problema e resolvi usando barras duplas:

        Logger.loggerInfo = new Winston.Logger({
            level: 'info',
            transports: [
                new Winston.transports.File({
                    filename: process.cwd() + '\\logs\\info.log',
                    timestamp: true
                })
            ]
        });

Fiz vários testes com vários mecanismos de log avançados (incluindo winston) e parece que os loggers não são capazes de gravar no arquivo se você fizer uma saída limpa (process.exit (0)).
Remover a saída limpa resolve o problema.

@fvuilleumier você está certo, obrigado, no entanto, remover não é conveniente para ferramentas CLI, por exemplo. Mas usar process.exitCode = 0 (ou qualquer código) funciona perfeitamente porque permite que o loop termine normalmente.

Existe um exemplo para criar um arquivo

const filename = path.join(__dirname, 'created-logfile.log');

const logger = winston.createLogger({
  transports: [
    new winston.transports.Console(),
    new winston.transports.File({ filename })
  ]
});

criar exemplo de arquivo

@fvuilleumier @nicosommi mas e se eu quiser sair do aplicativo depois que ele registrar um erro? Você conseguiu encontrar um passeio?

@danbrownbox no final do dia um script js é apenas um arquivo que é executado até o final, então se você quiser sair do aplicativo após alguma linha em particular, você só precisa construir o fluxo de execução adequado em sua função

Não funciona com o caminho relativo no meu mac, mas cria o arquivo se o caminho absoluto for fornecido.

Se estou usando absoluto ou relativo, não importa. Não está funcionando para mim ao adicionar o transporte dinamicamente.

function createLogFile(appName) {
  pathUtils.ensureDirectoryExists('logs');
  pathUtils.ensureDirectoryExists(`logs/${appName}`);
  winston.add(winston.transports.File, {
    level: 'debug',
    //filename: `logs/${appName}/export-${Date.now()}.log`,
    //filename: `${__dirname}/logs/${appName}/export-${Date.now()}.log`,
    filename: `${process.cwd()}/logs/${appName}/export-${Date.now()}.log`,
    json: false,
    formatter: _formatLog()
  });
}

No entanto, se eu adicionar esse transporte em createLogger() ele funcionará com absoluto.

Esta resposta funciona para mim.
Aqui está o meu código:
`` ``
const winston = require ('winston');
const logDir = 'logs';
const fs = require ('fs');

if (! fs.existsSync (logDir)) {
fs.mkdirSync (logDir);
}

const logger = winston.createLogger ({
nível: 'info',
formato: winston.format.json (),
exitOnError: false,
transportes: [
novo (require ('winston-daily-rotate-file')) ({
nome do arquivo: ${logDir}/logs.log ,
datePattern: 'AAAA-MM-DD-HH',
zippedArchive: true,
nível: 'bobo'
}),
novo (require ('winston-daily-rotate-file')) ({
nome do arquivo: ${logDir}/errors.log ,
datePattern: 'AAAA-MM-DD-HH',
zippedArchive: true,
nível: 'erro'
})
],
});

export {logger};

logger.silly ('teste bobo');
logger.info ('teste de informações');
logger.warn ('teste de advertência');
logger.error ('teste de erro');
`` ``

Sou o autor original desta edição (conta diferente). Estou de volta ... porque estou com o mesmo problema e esqueci como o resolvi 🤣

Você está usando o [email protected] mais recente? Você se certificou de que o diretório existe onde deseja que o arquivo de log esteja ( winston não criará diretórios para você, embora aceitemos um PR tornando isso uma opção ou até mesmo o comportamento padrão). Provavelmente deveríamos encerrar este problema antigo assim que pudermos colocá-lo em funcionamento novamente :)

Eu estaria disposto a trabalhar em um RP para isso no meu tempo livre, então deixe comigo 👍

Legal! 👍 Indo para fechar isto, podemos rastrear o material do diretório em # 1465. Problemas separados devem ser testados em relação a master e abertos como novos problemas se os problemas persistirem. Obrigado!

Esta página foi útil?
0 / 5 - 0 avaliações