ditto/src/db/KyselyLogger.ts

32 lines
867 B
TypeScript

import { logi } from '@soapbox/logi';
import { JsonValue } from '@std/json';
import { Logger } from 'kysely';
import { dbQueriesCounter, dbQueryDurationHistogram } from '@/metrics.ts';
import { errorJson } from '@/utils/log.ts';
/** Log the SQL for queries. */
export const KyselyLogger: Logger = (event) => {
const { query, queryDurationMillis } = event;
const { parameters, sql } = query;
const duration = queryDurationMillis / 1000;
dbQueriesCounter.inc();
dbQueryDurationHistogram.observe(duration);
if (event.level === 'query') {
logi({ level: 'debug', ns: 'ditto.sql', sql, parameters: parameters as JsonValue, duration });
}
if (event.level === 'error') {
logi({
level: 'error',
ns: 'ditto.sql',
sql,
parameters: parameters as JsonValue,
error: errorJson(event.error),
duration,
});
}
};