로그 파일에서 query 결과가 잘려보이는 오류 수정 (2)

This commit is contained in:
2026-07-04 17:48:33 +09:00
parent f6e0e845f4
commit 7e2f629681
+17 -2
View File
@@ -12,6 +12,21 @@ const globalForPrisma = globalThis as unknown as {
const SLOW_QUERY_MS = Number(process.env.DB_SLOW_QUERY_MS ?? "1000");
// Docker 파이프 환경에서 stdout fd는 non-blocking이라 writeSync가 부분 쓰기를
// 하거나 EAGAIN을 던질 수 있다. 전부 쓸 때까지 반복해 로그 유실을 막는다.
function writeAll(fd: number, text: string): void {
const buf = Buffer.from(text, "utf8");
let offset = 0;
while (offset < buf.length) {
try {
offset += writeSync(fd, buf, offset, buf.length - offset);
} catch (err) {
if ((err as NodeJS.ErrnoException).code === "EAGAIN") continue;
throw err;
}
}
}
// ── SQL 로깅 ($on) ────────────────────────────────────────────────
function inlineParams(query: string, rawParams: string): string {
@@ -49,7 +64,7 @@ function onQuery(e: Prisma.QueryEvent): void {
.join("\n");
const out = `${header}\n${indented}\n`;
writeSync(isSlow ? 2 : 1, out);
writeAll(isSlow ? 2 : 1, out);
}
// ── 결과 로깅 ($extends) ──────────────────────────────────────────
@@ -196,7 +211,7 @@ function logResult(
if (!logger.isEnabled("debug")) return;
const ts = new Date().toISOString();
const body = buildResultLog(model, operation, result);
writeSync(1, `[${ts}] [DEBUG] [db:result] ${body}\n`);
writeAll(1, `[${ts}] [DEBUG] [db:result] ${body}\n`);
}
// ── PrismaClient 생성 ─────────────────────────────────────────────