5

我在我的应用程序目录中找不到“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/
  config/
  public/
  server.js
4

2 回答 2

1

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

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

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'

您可以采取两个步骤:

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

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

于 2013-12-12T17:39:41.077 回答
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

于 2015-08-18T04:41:39.623 回答