Как настроить ошибку, хранящуюся в файле журнала Winston - PullRequest
0 голосов
/ 02 июля 2019

Я попытался сохранить информационные сообщения и сообщения об ошибках в файле Winston Logger, но он успешно работает. Но я хочу сохранить настраиваемую ошибку в файле Winston Logger.как это исправить

winston.js

var myFormat = winston.format.combine(winston.format.timestamp({format:'YYYY-MM-DD HH:mm:ss.SSS'}),
winston.format.json())
const logger = winston.createLogger({
    level: 'info',
    format: myFormat,
    defaultMeta: { service: 'user-service' },
    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.Console(),
      new winston.transports.File({ filename: 'error.log', level: 'error' }),
      new winston.transports.File({ filename: 'combined.log' })
    ],
    exceptionHandlers: [
        new winston.transports.Console(),
        new winston.transports.File({ filename: './exceptions.log', timestamp: true, maxsize: 1000000 })
      ],  
  });

  //
  // 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 = logger;

authentication.js

const authMiddleware = function (userPermissionLevels) {
    return (request, response, next) => {
        const token = request.header('x-auth-token');
        if (!token) return response.status(401).send("no token provided");
        const decoded = jwt.verify(token, config.get('jwtPrivateKey'));

        // Check for permissions
        if (!userPermissionLevels.includes(decoded.userPermissionLevels)) return response.status(403).send("Access denied.");

        request.user = decoded;
        next();
    }
}
I want to store "no token provided" and access deined error in winston logger file.How to acheive it.

1 Ответ

1 голос
/ 02 июля 2019

Вам просто нужно использовать созданный объект Winston Logger и зарегистрировать сообщение, прежде чем вернуться из функции.

const logger = require('./winston'); //assuming winston.js in the same level as authentication.js

const authMiddleware = function (userPermissionLevels) {
    return (request, response, next) => {
        const token = request.header('x-auth-token');
        if (!token){ 
            logger.info('no token provided');
            return response.status(401).send("no token provided");
        }
        const decoded = jwt.verify(token, config.get('jwtPrivateKey'));

        // Check for permissions
        if (!userPermissionLevels.includes(decoded.userPermissionLevels)){ 
            logger.info('Access denied.');
            return response.status(403).send("Access denied.");
        }

        request.user = decoded;
        next();
    }
}
...