【问题标题】:where is log file in nodejs app with winston带有winston的nodejs应用程序中的日志文件在哪里
【发布时间】:2013-12-31 06:03:36
【问题描述】:

我在我的应用程序目录中找不到“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

【问题讨论】:

  • 可能是当前工作目录...

标签: node.js winston log-files


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    这一行是计算绝对路径的地方。

    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'

    您可以采取两个步骤:

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

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

    【讨论】:

    • 我在窗口中使用搜索命令,没有结果。我改为使用 {filename: '/test.log'},我仍然没有出现在带有 server.js 文件的目录中
    • filename: __dirname + '/debug.log' } 这种方式还是不行
    • 您检查过任何权限问题吗?
    • 我不知道为什么它以这种方式工作 [stackoverflow.com/questions/18918896/….但是 debug.log 文件只包含: info: 127.0.0.1 - - [Fri, 13 Dec 2013 03:28:22 GMT] "GET /articles HTTP/1.1" 200 - "localhost" "Mozilla/ 5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36" 我想记录一切(包括socketIO接收和写入)可能的STDIN和STDOUT,我应该怎么做?
    • 在启动node.js进程时使用shell重定向如node server.js >>stdout.log 2>&1:tldp.org/LDP/abs/html/io-redirection.html
    猜你喜欢
    • 1970-01-01
    • 2021-04-26
    • 2015-07-13
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多