【问题标题】:sails logging to file帆记录到文件
【发布时间】:2013-12-27 03:18:30
【问题描述】:

有人可以提供一个如何配置sails.js 以记录到文件的示例吗?

看起来应该很简单,但我在网上找不到示例。

我正在查看 config/log.js 或 config/sockets.js 文件中的更改。

【问题讨论】:

    标签: file logging configuration sails.js


    【解决方案1】:

    根据the source code对于v0.9.x,您只需在config/log.js 中设置filePath

    module.exports = {
      log: {
        level: 'info',
        filePath: 'application.log'
      }
    };
    

    【讨论】:

    • 谢谢...我在发布此问题并阅读源代码后不久就发现了这一点。不幸的是,没有很好的记录。不过忘记更新这个问题了。标记为正确! :) 谢谢!
    • 有什么方法可以访问我在 config/log.js 中的记录器文件吗?
    • @Mahahari 从技术上讲,你可以,但它是一个配置文件,不是为了那个。
    • 源代码链接现在已经过时了,我认为正确答案已经改变。 Sails 似乎调用了一个名为 CaptainsLog 的库,该库用于包装一个名为 winston 的实际日志记录库,但它不再这样做,除非您显式调用 winston
    • 似乎已经过时了 - 也许至少更新为适用的版本,我会改变我的投票。
    【解决方案2】:

    记录到文件不能开箱即用。您需要在两层以下调用库中的功能。请参阅 winston 的文档。

    首先像这样安装winston:

    $ npm install winston
    

    然后调整config/log.js如下图

    var winston = require('winston');
    
    /*see the documentation for Winston:  https://github.com/flatiron/winston */
    var logger = new(winston.Logger)({
      transports: [
        new (winston.transports.Console)({}),
        new (winston.transports.File)({
          filename: 'logfile.log',
          level: 'verbose',
          json: false,
          colorize: false
        })
      ]
    });
    
    module.exports.log = {
      /***************************************************************************
       *                                                                          *
       * Valid `level` configs: i.e. the minimum log level to capture with        *
       * sails.log.*()                                                            *
       *                                                                          *
       * The order of precedence for log levels from lowest to highest is:        *
       * silly, verbose, info, debug, warn, error                                 *
       *                                                                          *
       * You may also set the level to "silent" to suppress all logs.             *
       *                                                                          *
       ***************************************************************************/
    
      level: 'silly',
      colorize: false,
      custom: logger
    };
    

    【讨论】:

    • 如果有足够多的人支持它,我将重新接受它作为新的正确答案。我没有积极使用帆,所以我现在不能保证这一点。
    • 我需要 npm install winston 才能正常工作。此外,我没有看到任何连接被记录(但这可能是另一个话题)
    • 从过去两天开始,winston 没有在文件中记录任何日志。当我重新启动 PM2 时,它会记录几个小时,然后再次停止记录。可能是什么问题
    • 这可行,但会强制您在此处指定日志级别。你知道如何使用 winston 但允许覆盖值,例如来自config/local.js,设置日志级别?
    • 完美运行。它可以安全地成为公认的答案。
    【解决方案3】:

    对于winston 3.x.x 版本

    @djsadinoff 的回答无效。

    改为:

     $ npm install winston
    

    将您的 config/log.js 文件替换为 Sails.js 中的以下代码

        var winston = require('winston');
        const logger = winston.createLogger({
          level: 'silly',
          format: winston.format.json(),
          transports: [
            //
            // - Write to all logs with level `info` and below to `combined.log`
            // - Write all logs error (and below) to `error.log`.
            //
            new winston.transports.File({ filename: 'error.log', level: 'error' }),
            new winston.transports.File({ filename: 'sails.log' })
          ]
        });
    
        //
        // If we're not in production then log to the `console` with the format:
        // `${info.level}: ${info.message} JSON.stringify({ ...rest }) `
        //
        if (process.env.NODE_ENV !== 'production') {
          logger.add(new winston.transports.Console({
            format: winston.format.simple()
          }));
        }
    
        module.exports.log = {
          /***************************************************************************
          *                                                                          *
          * Valid `level` configs: i.e. the minimum log level to capture with        *
          * sails.log.*()                                                            *
          *                                                                          *
          * The order of precedence for log levels from lowest to highest is:        *
          * silly, verbose, info, debug, warn, error                                 *
          *                                                                          *
          * You may also set the level to "silent" to suppress all logs.             *
          *                                                                          *
          ***************************************************************************/
    
          // Pass in our custom logger, and pass all log levels through.
          custom: logger,
          level: 'silly',
    
          // Disable captain's log so it doesn't prefix or stringify our meta data.
          inspect: false
        };
    

    那就做吧

    $ sails lift
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-09
      • 2017-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多