import { createLogger, transports, config, LoggerOptions } from 'winston';
import { indexPrefix, indexSuffixPattern, esTransformer, client } from './esConfig';
import { ElasticsearchTransport, ElasticsearchTransportOptions } from 'winston-elasticsearch';
import { esFormat, httpConsoleFormat, debuggerFormat } from './formats';
import { environment } from './environment';
const inTesting = process.env.NODE_ENV === 'test';
const ElasticSearch: { [key: string]: ElasticsearchTransportOptions } = {
logger: {
level: 'info',
client,
indexPrefix: indexPrefix.logger,
indexSuffixPattern,
format: esFormat,
transformer: esTransformer.logger,
// ensureIndexTemplate: false,
silent: environment.SILENT_ELK_LOGS,
},
debugger: {
level: 'debug',
client,
indexPrefix: indexPrefix.debugger,
indexSuffixPattern,
format: esFormat,
transformer: esTransformer.debugger,
// ensureIndexTemplate: false,
silent: environment.SILENT_ELK_LOGS_DEBUG,
},
};
const Console: { [key: string]: LoggerOptions } = {
logger: {
level: 'info',
format: httpConsoleFormat,
silent: environment.SILENT_STDOUT_LOGS,
},
debugger: {
level: 'debug',
format: debuggerFormat,
silent: environment.SILENT_STDOUT_LOGS_DEBUG,
},
};
const loggerConsoleTransport = new transports.Console(Console.logger);
const debuggerTransport = new transports.Console(Console.debugger);
const loggerESTransport = new ElasticsearchTransport(ElasticSearch.logger);
const debuggerESTransport = new ElasticsearchTransport(ElasticSearch.debugger);
const loggerHttp = createLogger({
exitOnError: false,
handleExceptions: true,
transports: [loggerESTransport, loggerConsoleTransport],
levels: config.npm.levels,
silent: inTesting,
});
const logger = createLogger({
transports: [debuggerTransport, debuggerESTransport],
levels: config.npm.levels,
silent: inTesting,
});
loggerHttp.on('error', (error) => {
// eslint-disable-next-line no-console
console.error('loggerHttp error caught', error);
});
loggerESTransport.on('warning', (error: any) => {
// eslint-disable-next-line no-console
console.error('Elastic Search Transport Error caught', error);
});
debuggerESTransport.on('warning', (error: any) => {
// eslint-disable-next-line no-console
console.error('Elastic Search Transport Error caught', error);
});
export { loggerHttp, logger, loggerESTransport, debuggerESTransport };
Yes, this is the code I am currently using for transport. Obviously, I inherited all of this; it was implemented several years ago.
I have now updated everything to the latest versions, and I will follow the documentation you recommended to perform transport with Winston.
My idea is not to change the current operation, as there are many systems connected, and I don't want to disrupt the functioning of this entire environment.
Thank you very much for your help.