web-dev-qa-db-ja.com

Winston:トランスポートなしでログを書き込もうとしています

Winstonを使用してエクスプレスサーバーのアクセスログとエラーログを設定しようとしていますが、何か間違っているようです。

構成ファイルでの私の試みは次のとおりです。

const winston = require('winston'),
    fs = require('fs');

const tsFormat = () => (new Date()).toLocaleTimeString();
winston.loggers.add('errorLog', {
        file: {
                filename: '<path>/errors.log', //<path> is replaced by the 
                timestamp: tsFormat,           //absolute path of the log
                level: 'info'
        }

});
winston.loggers.add('accessLog', {
        file: {
                filename: '<path>/access.log', //same as before
                timestamp: tsFormat,
                level: 'info'
        }
});

そして、これは私が他のファイルにそれを含める方法です:

var winston = require('winston'),
    accessLog = winston.loggers.get('accessLog'),
    errorLog = winston.loggers.get('errorLog');

これはドキュメントに従っているようです( https://github.com/winstonjs/winston/tree/2.4.0#working-with-multiple-loggers-in-winston )が、私はログに記録しようとすると、このエラーが発生します。

[winston] Attempt to write logs with no transports {"message":"pls","level":"info"}
[winston] Attempt to write logs with no transports {"message":"Bad request: undefined","level":"warn"}

どんな助けも大歓迎です、私は今数日間かなり困惑しています。

9
user2771142

私はこのような何かを試して、すべてのロガー関連のものをモジュールlogger.jsに入れます:

logger.js

_    var winston = require('winston');
    var path = require('path');

    // Set this to whatever, by default the path of the script.
    var logPath = __dirname;

    const tsFormat = () => (new Date().toISOString());

  const errorLog = winston.createLogger({
  transports: [
    new winston.transports.File({
      filename: path.join(logPath, 'errors.log'),
      timestamp: tsFormat,
      level: 'info'})
  ]
});

const accessLog = winston.createLogger({
  transports: [
    new winston.transports.File({
      filename: path.join(logPath, 'access.log'),
      timestamp: tsFormat,
      level: 'info'})
  ]
});


    module.exports = {
        errorLog: errorLog,
        accessLog: accessLog
    };
_

次に、index.jsでテストします。

index.js

_var logger = require('./logger');

logger.errorLog.info('Test error log');
logger.accessLog.info('Test access log');
_

次のようなログ行が表示されるはずです。

errors.log:

_{"level":"info","message":"Test access log","timestamp":"2018-03-14T07:51:11.185Z"}
_

access.log:

_{"level":"info","message":"Test error log","timestamp":"2018-03-14T07:51:11.182Z"}
_

[〜#〜] edit [〜#〜]

Winstonの最新バージョンでは、new (winston.Logger)は_winston.createLogger_に置き換えられました( https://github.com/bithavoc/express-winston/issues/175

6
Terry Lennox

1ロガー+開発目的のコンソールロギング:

logger.js

var logPath = '';
var log_level = '';

const log = winston.createLogger({
  level: log_level,
  format: winston.format.json(),
  transports: [
    new winston.transports.File({
      filename: path.join(logPath, 'access.log'),
      timestamp: tsFormat,
      level: log_level
    }),
    new winston.transports.File({
      filename: path.join(logPath, 'error.log'),
      timestamp: tsFormat,
      level: 'error'
    }),
  ]
});

if (process.env.NODE_ENV !== 'production') {
  log.add(new winston.transports.Console({
    format: winston.format.simple()
  }));
}

module.exports = {
  log: log
};

app.js

const logger = require('./logger');

logger.log.info("starting application..");
0
mel3kings