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

时间:2013-12-12 17:25:17

标签: node.js winston log-files

我在我的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');

我的app目录:

/
  app/
  config/
  public/
  server.js

2 个答案:

答案 0 :(得分:0)

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

这一行是它确定绝对路径的地方。

var fullname = path.join(self.dirname, target);

在此处设置self.dirname:

this.dirname = options.dirname || path.dirname(options.filename);

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

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

  • 流程的当前工作目录
  • 文件系统root,因为如果path.dirname占用最后一个/的剩余部分,那么它是undefinedundefined +'/ test.log'是'/test.log'

您可以采取以下两个步骤:

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

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

答案 1 :(得分:0)

我写了一个这样的测试文件:

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();

我发现如果我删除了最后一行,就会创建并正确记录日志文件。

我使用process.exit()来破坏我的程序,因为我只是想测试记录器,看起来它在某种程度上打破了日志文件上的进程。

请检查此问题:https://github.com/winstonjs/winston/issues/228