winston在nodejs应用程序中的日志文件在哪里?
我无法在我的应用程序目录中find'test.log'文件?
下面的代码在server.js中
var winston = require('winston'), mylogger = new (winston.Logger)({ transports: [ new (winston.transports.Console) (), new (winston.transports.File) ({filename: 'test.log'}) ] }); mylogger.log('Hello world');
我的app目录:
/ app/ config/ public/ server.js
有趣的问题。 查看文件传输的源代码,看起来该目录(如果未指定的话)是从文件名参数本身派生的。 它似乎build议您使用明确指定的目录使用绝对path或相对path。
这条线是它找出绝对path的地方。
var fullname = path.join(self.dirname, target);
self.dirname在这里设置:
this.dirname = options.dirname || path.dirname(options.filename);
所以问题是如果options.filename不包含目录,那么path.dirname会返回什么?
我其实不知道,但是我怀疑有两种可能性:
- 当前进程的工作目录
- 文件系统根,因为如果path.dirname取最后一个剩下的/,那么它是
undefined
,undefined
+'/test.log'是'/test.log'
你可以采取两个步骤:
- 检查当前目录和文件系统根目录,看看它是哪一个。 (换句话说,testing理论)
- 明确指定目录(无论如何,这可能是一个好主意)
https://github.com/flatiron/winston/blob/master/lib/winston/transports/file.js
我写了一个这样的testing文件:
var winston = require('winston'); var logger = new (winston.Logger)({ transports: [ new (winston.transports.Console)(), new (winston.transports.File)({ filename: 'somefile.log' }) ] }); logger.log('info', 'Hello distributed log files!'); logger.info('Hello again distributed logs'); process.exit();
我发现如果我删除了最后一行,日志文件将被创build并logging正确。
我使用process.exit()
打破我的程序,因为我只是想testinglogging器,它看起来像它以某种方式打破了日志文件的过程。
检查这个问题: https : //github.com/winstonjs/winston/issues/228