Winston: 没有创建日志文件

创建于 2016-05-26  ·  27评论  ·  资料来源: winstonjs/winston

操作系统: Ubuntu 14.04
节点: 6.2.0
温斯顿: 2.2.0

以下代码不会创建日志文件:

const logger = new Winston.Logger({
    level: 'verbose',
    transports: [
      new Winston.transports.Console({
        timestamp: true
      }),
      new Winston.transports.File({
        filename: 'app.log',
        timestamp: true
      })
    ]
  });

logger.info('Holla');

它登录到终端很好:

2016-05-26T13:11:49.927Z - info: Holla

但是没有创建日志文件。

最有用的评论

我刚刚遇到了这个问题。 该目录必须首先存在。 winston 将为您创建新文件,但它似乎不会为您创建新目录(例如,如果您尝试登录位于 logs/app.js 的文件,则需要创建“logs”目录)

所有27条评论

+1

+1

+1

+1

fs.stat() 中的节点 6 似乎有问题
由于某种原因从未执行过回调 fs.stat()

    fs.stat(fullname, function (err, stats) {
      if (err) {
        if (err.code !== 'ENOENT') {
          return self.emit('error', err);
        }
        return createAndFlush(0);
      }

      if (!stats || (self.maxsize && stats.size >= self.maxsize)) {
        //
        // If `stats.size` is greater than the `maxsize` for
        // this instance then try again
        //
        return self._incFile(function() {
          checkFile(self._getFile());
        });
      }

      createAndFlush(stats.size);
    });
  })(this._getFile()); 

是固定的吗?

我解决了这个问题,我给出了这样的绝对路径:
winston.add(winston.transports.File, { filename: ${__dirname}/logs/appError.log })

这对我有用。 我最近在使用 Atom 的 Winston 项目中确实遇到了一个问题,其中 .gitignore 文件没有显示在 Atom 中项目的文件目录中,因为树视图包中的设置已更新......(选项:隐藏 VCS Ignored文件)

_使用 Node 6.2.2 和 Winston 2.2.0._

代码:

'use strict';

let Winston = require('winston');


const logger = new Winston.Logger({
    level: 'verbose',
    transports: [
      new Winston.transports.Console({
        timestamp: true
      }),
      new Winston.transports.File({
        filename: 'app.log',
        timestamp: true
      })
    ]
  });

logger.info('Holla');

创建一个带有输出的 app.log 文件: {"level":"info","message":"Holla","timestamp":"2016-07-01T19:29:14.035Z"}并用2016-07-01T19:29:14.034Z - info: Holla记录到控制台

我刚刚遇到了这个问题。 该目录必须首先存在。 winston 将为您创建新文件,但它似乎不会为您创建新目录(例如,如果您尝试登录位于 logs/app.js 的文件,则需要创建“logs”目录)

Wish winston 检查日志文件夹/目录是否存在,然后创建一个日志文件夹/目录,如果它在启动期间不存在。 我认为 fs 可以做到这一点吗?

+1

+1

+1

if (!fs.existsSync('path') {
    fs.mkdirSync('path');
}

http://thisdavej.com/using-winston-a-versatile-logging-library-for-node-js/

我遇到了这个问题并使用双斜杠解决了它:

        Logger.loggerInfo = new Winston.Logger({
            level: 'info',
            transports: [
                new Winston.transports.File({
                    filename: process.cwd() + '\\logs\\info.log',
                    timestamp: true
                })
            ]
        });

我使用多种高级日志记录机制(包括 winston)进行了多次测试,如果您执行干净退出(process.exit(0)),则记录器似乎无法写入文件。
删除干净的出口解决问题。

@fvuilleumier你是对的,谢谢,但是删除对于 CLI 工具来说并不方便,例如。 但是使用process.exitCode = 0 (或任何代码)效果很好,因为它允许循环优雅地完成。

有一个创建文件的例子

const filename = path.join(__dirname, 'created-logfile.log');

const logger = winston.createLogger({
  transports: [
    new winston.transports.Console(),
    new winston.transports.File({ filename })
  ]
});

创建文件示例

@fvuilleumier @nicosommi但是如果我想在记录错误后退出应用程序怎么办? 你设法找到散步了吗?

@danbrownbox在一天结束时,js 脚本只是一个执行到最后的文件,因此如果您想在某些特定行之后退出应用程序,您只需要在您的函数上构建正确的执行流程

不适用于我的 mac 上的相对路径,但如果提供了绝对路径,则会创建文件。

无论我使用绝对还是相对都无关紧要。 动态添加传输时,它对我不起作用。

function createLogFile(appName) {
  pathUtils.ensureDirectoryExists('logs');
  pathUtils.ensureDirectoryExists(`logs/${appName}`);
  winston.add(winston.transports.File, {
    level: 'debug',
    //filename: `logs/${appName}/export-${Date.now()}.log`,
    //filename: `${__dirname}/logs/${appName}/export-${Date.now()}.log`,
    filename: `${process.cwd()}/logs/${appName}/export-${Date.now()}.log`,
    json: false,
    formatter: _formatLog()
  });
}

但是,如果我在createLogger()添加此传输,它可以使用绝对值。

这个答案对我有用。
这是我的代码:
````
const winston = require('winston');
const logDir = '日志';
const fs = require('fs');

如果 (!fs.existsSync(logDir)) {
fs.mkdirSync(logDir);
}

const 记录器 = winston.createLogger({
级别:'信息',
格式:winston.format.json(),
退出错误:假,
运输:[
新(需要('温斯顿每日轮换文件'))({
文件名: ${logDir}/logs.log ,
datePattern: 'YYYY-MM-DD-HH',
压缩档案:真实,
等级:'傻'
}),
新(需要('温斯顿每日轮换文件'))({
文件名: ${logDir}/errors.log ,
datePattern: 'YYYY-MM-DD-HH',
压缩档案:真实,
级别:'错误'
})
],
});

出口{记录器};

logger.silly('愚蠢的测试');
logger.info('信息测试');
logger.warn('警告测试');
logger.error('错误测试');
````

我是这个问题的原始作者(不同的帐户)。 我回来了...因为我有同样的问题,我忘记了我是如何解决的🤣

您使用的是最新的[email protected]吗? 您是否确保目录存在于您希望日志文件所在的位置( winston不会为您创建目录,尽管我们会接受 PR 使其成为一个选项甚至默认行为)。 一旦我们可以让您重新启动并运行,我们可能应该关闭这个旧问题:)

我愿意在业余时间为此做一个公关,所以把它留给我吧👍

凉爽的! 👍 要关闭这个,我们可以跟踪 #1465 中的目录内容。 应针对master测试单独的问题,如果问题仍然存在,则应将其作为新问题打开。 谢谢!

此页面是否有帮助?
0 / 5 - 0 等级