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.
+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 })
]
});
@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!
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)