操作系统: Ubuntu 14.04
节点: 6.2.0
温斯顿: 2.2.0
以下代码不会创建日志文件:
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');
它登录到终端很好:
2016-05-26T13:11:49.927Z - info: Holla
但是没有创建日志文件。
+1
+1
+1
+1
fs.stat() 中的节点 6 似乎有问题
由于某种原因从未执行过回调 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());
是固定的吗?
我解决了这个问题,我给出了这样的绝对路径:
winston.add(winston.transports.File, { filename:
${__dirname}/logs/appError.log })
这对我有用。 我最近在使用 Atom 的 Winston 项目中确实遇到了一个问题,其中 .gitignore 文件没有显示在 Atom 中项目的文件目录中,因为树视图包中的设置已更新......(选项:隐藏 VCS Ignored文件)
_使用 Node 6.2.2 和 Winston 2.2.0._
代码:
'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');
创建一个带有输出的 app.log 文件: {"level":"info","message":"Holla","timestamp":"2016-07-01T19:29:14.035Z"}
并用2016-07-01T19:29:14.034Z - info: Holla
记录到控制台
我刚刚遇到了这个问题。 该目录必须首先存在。 winston 将为您创建新文件,但它似乎不会为您创建新目录(例如,如果您尝试登录位于 logs/app.js 的文件,则需要创建“logs”目录)
Wish winston 检查日志文件夹/目录是否存在,然后创建一个日志文件夹/目录,如果它在启动期间不存在。 我认为 fs 可以做到这一点吗?
+1
+1
+1
if (!fs.existsSync('path') {
fs.mkdirSync('path');
}
http://thisdavej.com/using-winston-a-versatile-logging-library-for-node-js/
我遇到了这个问题并使用双斜杠解决了它:
Logger.loggerInfo = new Winston.Logger({
level: 'info',
transports: [
new Winston.transports.File({
filename: process.cwd() + '\\logs\\info.log',
timestamp: true
})
]
});
我使用多种高级日志记录机制(包括 winston)进行了多次测试,如果您执行干净退出(process.exit(0)),则记录器似乎无法写入文件。
删除干净的出口解决问题。
@fvuilleumier你是对的,谢谢,但是删除对于 CLI 工具来说并不方便,例如。 但是使用process.exitCode = 0
(或任何代码)效果很好,因为它允许循环优雅地完成。
有一个创建文件的例子
const filename = path.join(__dirname, 'created-logfile.log');
const logger = winston.createLogger({
transports: [
new winston.transports.Console(),
new winston.transports.File({ filename })
]
});
@fvuilleumier @nicosommi但是如果我想在记录错误后退出应用程序怎么办? 你设法找到散步了吗?
@danbrownbox在一天结束时,js 脚本只是一个执行到最后的文件,因此如果您想在某些特定行之后退出应用程序,您只需要在您的函数上构建正确的执行流程
不适用于我的 mac 上的相对路径,但如果提供了绝对路径,则会创建文件。
无论我使用绝对还是相对都无关紧要。 动态添加传输时,它对我不起作用。
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()
});
}
但是,如果我在createLogger()
添加此传输,它可以使用绝对值。
这个答案对我有用。
这是我的代码:
````
const winston = require('winston');
const logDir = '日志';
const fs = require('fs');
如果 (!fs.existsSync(logDir)) {
fs.mkdirSync(logDir);
}
const 记录器 = winston.createLogger({
级别:'信息',
格式:winston.format.json(),
退出错误:假,
运输:[
新(需要('温斯顿每日轮换文件'))({
文件名: ${logDir}/logs.log
,
datePattern: 'YYYY-MM-DD-HH',
压缩档案:真实,
等级:'傻'
}),
新(需要('温斯顿每日轮换文件'))({
文件名: ${logDir}/errors.log
,
datePattern: 'YYYY-MM-DD-HH',
压缩档案:真实,
级别:'错误'
})
],
});
出口{记录器};
logger.silly('愚蠢的测试');
logger.info('信息测试');
logger.warn('警告测试');
logger.error('错误测试');
````
我是这个问题的原始作者(不同的帐户)。 我回来了...因为我有同样的问题,我忘记了我是如何解决的🤣
您使用的是最新的[email protected]
吗? 您是否确保目录存在于您希望日志文件所在的位置( winston
不会为您创建目录,尽管我们会接受 PR 使其成为一个选项甚至默认行为)。 一旦我们可以让您重新启动并运行,我们可能应该关闭这个旧问题:)
我愿意在业余时间为此做一个公关,所以把它留给我吧👍
凉爽的! 👍 要关闭这个,我们可以跟踪 #1465 中的目录内容。 应针对master
测试单独的问题,如果问题仍然存在,则应将其作为新问题打开。 谢谢!
最有用的评论
我刚刚遇到了这个问题。 该目录必须首先存在。 winston 将为您创建新文件,但它似乎不会为您创建新目录(例如,如果您尝试登录位于 logs/app.js 的文件,则需要创建“logs”目录)