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取最后一个剩下的/,那么它是undefinedundefined +'/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