pm2-tls-logger
Version:
A simple and efficient PM2 module that forwards logs to Typesense Server
59 lines (46 loc) • 1.44 kB
text/typescript
import os from "os";
import winston from "winston";
const SYSTEM_TRANSPORT = new winston.transports.Http({
host: process.env.host,
port: process.env.port ? parseInt(process.env.port, 10) : undefined,
ssl: false,
path: '/log',
});
SYSTEM_TRANSPORT.on('error', (err) => {
console.error("[ERROR] Transport failed:", err);
});
SYSTEM_TRANSPORT.on("finish", () => {
console.log("[FINISH] Transport finished.");
});
const LOGGER = winston.createLogger({
format: winston.format.combine(
winston.format.timestamp(),
winston.format.json(),
winston.format.printf(({ timestamp, message }) => `[${timestamp}] ${message}`)
),
level: "info",
transports: [SYSTEM_TRANSPORT],
});
export class Logger {
private name: string;
private appName: string;
private process: string;
constructor(systemName: string, programName: string) {
this.name = systemName;
this.appName = programName;
this.process = programName;
}
log(level: string, message: string): void {
try {
if (!SYSTEM_TRANSPORT || !LOGGER) {
console.error(`Discarding log from '${this.process}' as transport is not ready.`);
return;
}
console.log({ message, level }, this.name, this.appName, this.process)
LOGGER.info(`${this.name} - ${this.appName}: ${message}`);
} catch (error) {
console.error(`[ERROR] Failed to log message to remote server for process '${this.process}' with level ${level}:`);
console.error(error);
}
}
}