哪里是带有winston的nodejs应用程序中的日志文件

use*_*147 5 log-files node.js winston

我在我的app目录中找不到'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');
Run Code Online (Sandbox Code Playgroud)

我的app目录:

/
  app/
  config/
  public/
  server.js
Run Code Online (Sandbox Code Playgroud)

Bra*_*don 1

有趣的问题。查看文件传输的源代码,如果未指定,则目录似乎是从文件名参数本身派生的。似乎建议您使用绝对路径或明确指定目录的相对路径。

这条线是计算绝对路径的地方。

var fullname = path.join(self.dirname, target);
Run Code Online (Sandbox Code Playgroud)

self.dirname 在这里设置:

this.dirname = options.dirname || path.dirname(options.filename);
Run Code Online (Sandbox Code Playgroud)

所以问题是,如果 options.filename 不包含目录,那么 path.dirname 返回什么?

我实际上不知道,但我怀疑有两种可能性:

  • 进程的当前工作目录
  • 文件系统根目录,因为如果 path.dirname 采用最后一个 / 剩下的内容,那么它就是undefined+ undefined'/test.log' 是 '/test.log'

您可以采取两个步骤:

  • 检查当前目录和文件系统根目录,看看它是哪个。(换句话说,测试理论)
  • 明确指定目录(无论如何可能是个好主意)

https://github.com/flatiron/winston/blob/master/lib/winston/transports/file.js