Prisma transport for winston@3.x logger
base dependencies:
npm install --save winston-prisma-transporter
# OR
pnpm add winston-prisma-transporter
peer dependencies:
npm install --save winston @prisma/client
# OR
pnpm add winston @prisma/client
Create models:
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
model UserLog {
id Int @id @default(autoincrement()) @db.UnsignedInt
timestamp DateTime @default(now()) @db.Timestamp(0)
level String @db.Text
message String @db.Text
meta Json?
}
Run your prisma migrations and you're ready to go!
Setup with default configs:
import { createLogger, format } from "winston";
import { PrismaClient } from "@prisma/client";
import { PrismaWinstonTransporter } from "winston-prisma-transporter";
const prisma = new PrismaClient();
const logger = winston.createLogger({
transports: [
format: format.json(),
new PrismaWinstonTransporter({
level: "http",
prisma
}),
],
});
Out of the box, the logger will log all levels to the Table called UserLog
. That can be changed to a different table by passing in the custom table name.
import { createLogger, format } from "winston";
import { PrismaClient } from "@prisma/client";
import { PrismaWinstonTransporter } from "winston-prisma-transporter";
const prisma = new PrismaClient();
const logger = winston.createLogger({
transports: [
format: format.json(),
new PrismaWinstonTransporter({
level: "http",
prisma,
tableName: "CustomTableName"
}),
],
});
All options avaliable while initiating the transport:
export interface PrismaTransporterOptions extends TransportStreamOptions {
prisma: PrismaClient;
tableName?: string;
}
- Add tests
- Add eslint support
- Add ci/cd for tests
- Add ci/cd for code qul check