У меня есть регистратор 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 строками кода.Однако есть ли простое решение с Уинстоном?Я только что увидел, что мне больше не нужен Уинстон с логатом.