Winston logger: установить фактическое имя вызывающего файла в качестве метки информации журнала - PullRequest
0 голосов
/ 19 июня 2019

У меня есть регистратор winston, и я хочу установить имя файла для файла, в котором выполняется регистратор, в качестве объекта метки информационного объекта регистратора.Например:
[info]:[callingFileName.js] - 19.06.2019 14:09:19: [message]:...

Вот мой код:

'use strict';
const { createLogger, format, transports } = require('winston');
const winston = require('winston');
const path = require('path');
var appRoot = require('app-root-path');

const { splat, combine, timestamp, colorize, printf, label } = winston.format;

const o = {
  a: [1, 2, [[
    'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do ' +
      'eiusmod tempor incididunt ut labore et dolore magna aliqua.',
    'test',
    'foo']], 4],
  b: new Map([['za', 1], ['zb', 'test']])
};

var options = {
      debugfile: {
        level: 'debug',
        filename: `${appRoot}/logs/debug.log`,
        handleExceptions: true,
        json: true,
        maxsize: 5242880, // 5MB
        maxFiles: 5,
        colorize: false,
      },
      errorfile: {
        level: 'error',
        filename: `${appRoot}/logs/error.log`,
        handleExceptions: true,
        json: true,
        maxsize: 5242880, // 5MB
        maxFiles: 5,
        colorize: false,
      },
      console: {
        colorize: true,
        handleExceptions: true,
        prettyPrint: true,
        json: true,

      }
    };

    const customFormat = printf(info => `[${info.level}]:[${info.label}] - ${info.timestamp}: [message]: ${info.message}  ${info.meta? JSON.stringify(info.meta) : ''}`);


    const simplelogger = createLogger({
      name: "debug-console",
      format: combine(
        colorize({all:false}),
        timestamp({
          format: 'DD.MM.YYYY HH:mm:ss'
        }),
        label({ 
          label: path.basename(process.mainModule.filename) 
        }),
        splat(),
        customFormat
      ),
      transports: [
        new transports.Console(options.console),
        new transports.File( options.errorfile),
        new transports.File( options.debugfile)
      ]
    });

Часть с надписью здесь:

label({ label: path.basename(process.mainModule.filename) }),

но у меня проблема в том, чтокогда я запускаю свою программу, я запускаю npm run index.js, поэтому он всегда регистрирует вызывающий файл как метку index.js: [info]:[index.js] - 19.06.2019 14:09:19: [message]: ....Можно ли как-то динамически установить метку в качестве имени файла, в котором я выполняю свою функцию logger.log()?Или мне нужно создавать новый класс / экземпляр каждый раз, когда я нахожусь в новом файле, отличном от index.js?

РЕДАКТИРОВАТЬ: я перешел на модуль журнала npm, который сразу же решил мои проблемы с 3 строками кода.Однако есть ли простое решение с Уинстоном?Я только что увидел, что мне больше не нужен Уинстон с логатом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...