Skip to content

Commit 76dd08a

Browse files
authored
chore: adds redis transport (#717)
1 parent 5fdeeea commit 76dd08a

File tree

2 files changed

+43
-4
lines changed

2 files changed

+43
-4
lines changed
+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { Redis } from '@upstash/redis';
2+
import { v4 as uuidv4 } from 'uuid';
3+
import Transport from 'winston-transport';
4+
5+
export class RedisTransport extends Transport {
6+
private readonly redis: Redis;
7+
8+
constructor(opts: any) {
9+
super(opts);
10+
this.redis = new Redis({
11+
url: process.env.KV_REST_API_URL,
12+
token: process.env.KV_REST_API_TOKEN,
13+
});
14+
}
15+
16+
async log(info: any, callback: () => void): Promise<void> {
17+
setImmediate(() => {
18+
this.emit('logged', info);
19+
});
20+
21+
try {
22+
const uuid = uuidv4();
23+
await this.redis.append(`logs:${uuid}`, JSON.stringify(info));
24+
} catch (ex) {
25+
console.error('Failed to log to Redis', ex);
26+
}
27+
28+
callback();
29+
}
30+
}

Diff for: lib/javascript/fullstack_demo/src/util/server-logger.ts

+13-4
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,26 @@ import { LogEvent } from '@/models';
22
import { auth } from '@clerk/nextjs/server';
33
import { headers } from 'next/headers';
44
import winston, { format } from 'winston';
5+
import Transport from 'winston-transport';
56
import { Logger, LogLevel } from './logger';
67
import { PrismaTransport } from './prisma-transport';
8+
import { RedisTransport } from './redis-transport';
79
const { combine, timestamp, json } = format;
810

911
export class WinstonLogger implements Logger {
1012
private readonly winstonLogger: winston.Logger;
1113

1214
constructor() {
15+
const transports: Transport[] = [
16+
new winston.transports.Console({ level: 'info' }),
17+
];
18+
19+
if (process.env.LOGGING_DB_TYPE?.toUpperCase() === 'POSTGRES') {
20+
transports.push(new PrismaTransport({ level: 'debug' }));
21+
} else if (process.env.LOGGING_DB_TYPE?.toUpperCase() === 'REDIS') {
22+
transports.push(new RedisTransport({ level: 'debug' }));
23+
}
24+
1325
this.winstonLogger = winston.createLogger({
1426
level: 'debug',
1527
format: combine(
@@ -22,10 +34,7 @@ export class WinstonLogger implements Logger {
2234
timestamp(),
2335
json(),
2436
),
25-
transports: [
26-
new winston.transports.Console({ level: 'info' }),
27-
new PrismaTransport({ level: 'debug' }),
28-
],
37+
transports,
2938
});
3039
}
3140

0 commit comments

Comments
 (0)