import { defineConfig } from "sonamu";
import { getFileSink } from "@logtape/logtape";
import type { LogRecord } from "@logtape/logtape";
import type { FastifyRequest, FastifyReply } from "fastify";
export default defineConfig({
logging: {
sinks: {
adminLog: getFileSink("logs/admin.log"),
userLog: getFileSink("logs/user.log"),
publicLog: getFileSink("logs/public.log"),
},
filters: {
"admin": (record: LogRecord) => {
const req = record.properties.req as FastifyRequest | undefined;
const res = record.properties.res as FastifyReply | undefined;
const url = req?.url ?? res?.request.url;
return url?.startsWith("/api/admin") ?? false;
},
"user": (record: LogRecord) => {
const req = record.properties.req as FastifyRequest | undefined;
const res = record.properties.res as FastifyReply | undefined;
const url = req?.url ?? res?.request.url;
return url?.startsWith("/api/user") ?? false;
},
"public": (record: LogRecord) => {
const req = record.properties.req as FastifyRequest | undefined;
const res = record.properties.res as FastifyReply | undefined;
const url = req?.url ?? res?.request.url;
return url?.startsWith("/api/public") ?? false;
},
},
loggers: [
{
category: ["fastify"],
sinks: ["adminLog"],
filters: ["admin"],
lowestLevel: "info",
},
{
category: ["fastify"],
sinks: ["userLog"],
filters: ["user"],
lowestLevel: "info",
},
{
category: ["fastify"],
sinks: ["publicLog"],
filters: ["public"],
lowestLevel: "info",
},
],
},
server: {
listen: { port: 1028 },
},
});