import { Redis } from "ioredis"; import superjson from "superjson"; import Transport from "winston-transport"; // // Inherit from `winston-transport` so you can take advantage // of the base functionality and `.exceptions.handle()`. // export class RedisTransport extends Transport { private redis: Redis | null = null; /** * Log the info to the Redis channel */ log(info: { message: string; timestamp: string; level: string }, callback: () => void) { setImmediate(() => { this.emit("logged", info); }); // Is only initialized here because it did not work when initialized in the constructor or outside the class this.redis ??= new Redis(); this.redis .publish( "pubSub:logging", superjson.stringify({ message: info.message, timestamp: info.timestamp, level: info.level, }), ) .then(() => { callback(); }) .catch(() => { // Ignore errors }); } }