@spfn/core 0.1.0-alpha.81 → 0.1.0-alpha.83

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -189,6 +189,7 @@ declare function setDatabase(write: PostgresJsDatabase<Record<string, unknown>>
189
189
  * - DB_MONITORING_ENABLED (enable query monitoring, default: true in dev, false in prod)
190
190
  * - DB_MONITORING_SLOW_THRESHOLD (slow query threshold in ms, default: 1000)
191
191
  * - DB_MONITORING_LOG_QUERIES (log actual SQL queries, default: false)
192
+ * - DB_DEBUG_TRACE (enable detailed getDatabase() call tracing with caller info, default: false)
192
193
  *
193
194
  * Configuration priority:
194
195
  * 1. options parameter (ServerConfig)
package/dist/db/index.js CHANGED
@@ -1,6 +1,5 @@
1
1
  import { drizzle } from 'drizzle-orm/postgres-js';
2
- import pino from 'pino';
3
- import { existsSync, mkdirSync, accessSync, constants, writeFileSync, unlinkSync, createWriteStream, statSync, readdirSync, renameSync, readFileSync } from 'fs';
2
+ import { existsSync, mkdirSync, createWriteStream, statSync, readdirSync, renameSync, unlinkSync, accessSync, constants, writeFileSync, readFileSync } from 'fs';
4
3
  import { join, dirname, basename } from 'path';
5
4
  import { config } from 'dotenv';
6
5
  import postgres from 'postgres';
@@ -11,50 +10,6 @@ import { createMiddleware } from 'hono/factory';
11
10
  import { eq, and } from 'drizzle-orm';
12
11
 
13
12
  // src/db/manager/factory.ts
14
- var PinoAdapter = class _PinoAdapter {
15
- logger;
16
- constructor(config) {
17
- this.logger = pino({
18
- level: config.level,
19
- // 기본 필드
20
- base: config.module ? { module: config.module } : void 0
21
- });
22
- }
23
- child(module) {
24
- const childLogger = new _PinoAdapter({ level: this.logger.level, module });
25
- childLogger.logger = this.logger.child({ module });
26
- return childLogger;
27
- }
28
- debug(message, context) {
29
- this.logger.debug(context || {}, message);
30
- }
31
- info(message, context) {
32
- this.logger.info(context || {}, message);
33
- }
34
- warn(message, errorOrContext, context) {
35
- if (errorOrContext instanceof Error) {
36
- this.logger.warn({ err: errorOrContext, ...context }, message);
37
- } else {
38
- this.logger.warn(errorOrContext || {}, message);
39
- }
40
- }
41
- error(message, errorOrContext, context) {
42
- if (errorOrContext instanceof Error) {
43
- this.logger.error({ err: errorOrContext, ...context }, message);
44
- } else {
45
- this.logger.error(errorOrContext || {}, message);
46
- }
47
- }
48
- fatal(message, errorOrContext, context) {
49
- if (errorOrContext instanceof Error) {
50
- this.logger.fatal({ err: errorOrContext, ...context }, message);
51
- } else {
52
- this.logger.fatal(errorOrContext || {}, message);
53
- }
54
- }
55
- async close() {
56
- }
57
- };
58
13
 
59
14
  // src/logger/types.ts
60
15
  var LOG_LEVEL_PRIORITY = {
@@ -695,7 +650,7 @@ function validateConfig() {
695
650
  }
696
651
  }
697
652
 
698
- // src/logger/adapters/custom.ts
653
+ // src/logger/factory.ts
699
654
  function initializeTransports() {
700
655
  const transports = [];
701
656
  const consoleConfig = getConsoleConfig();
@@ -706,74 +661,12 @@ function initializeTransports() {
706
661
  }
707
662
  return transports;
708
663
  }
709
- var CustomAdapter = class _CustomAdapter {
710
- logger;
711
- constructor(config) {
712
- this.logger = new Logger({
713
- level: config.level,
714
- module: config.module,
715
- transports: initializeTransports()
716
- });
717
- }
718
- child(module) {
719
- const adapter = new _CustomAdapter({ level: this.logger.level, module });
720
- adapter.logger = this.logger.child(module);
721
- return adapter;
722
- }
723
- debug(message, context) {
724
- this.logger.debug(message, context);
725
- }
726
- info(message, context) {
727
- this.logger.info(message, context);
728
- }
729
- warn(message, errorOrContext, context) {
730
- if (errorOrContext instanceof Error) {
731
- this.logger.warn(message, errorOrContext, context);
732
- } else {
733
- this.logger.warn(message, errorOrContext);
734
- }
735
- }
736
- error(message, errorOrContext, context) {
737
- if (errorOrContext instanceof Error) {
738
- this.logger.error(message, errorOrContext, context);
739
- } else {
740
- this.logger.error(message, errorOrContext);
741
- }
742
- }
743
- fatal(message, errorOrContext, context) {
744
- if (errorOrContext instanceof Error) {
745
- this.logger.fatal(message, errorOrContext, context);
746
- } else {
747
- this.logger.fatal(message, errorOrContext);
748
- }
749
- }
750
- async close() {
751
- await this.logger.close();
752
- }
753
- };
754
-
755
- // src/logger/adapter-factory.ts
756
- function createAdapter(type) {
757
- const level = getDefaultLogLevel();
758
- switch (type) {
759
- case "pino":
760
- return new PinoAdapter({ level });
761
- case "custom":
762
- return new CustomAdapter({ level });
763
- default:
764
- return new PinoAdapter({ level });
765
- }
766
- }
767
- function getAdapterType() {
768
- const adapterEnv = process.env.LOGGER_ADAPTER;
769
- if (adapterEnv === "custom" || adapterEnv === "pino") {
770
- return adapterEnv;
771
- }
772
- return "pino";
773
- }
774
664
  function initializeLogger() {
775
665
  validateConfig();
776
- return createAdapter(getAdapterType());
666
+ return new Logger({
667
+ level: getDefaultLogLevel(),
668
+ transports: initializeTransports()
669
+ });
777
670
  }
778
671
  var logger = initializeLogger();
779
672
 
@@ -1473,10 +1366,44 @@ function stopHealthCheck() {
1473
1366
 
1474
1367
  // src/db/manager/manager.ts
1475
1368
  var dbLogger4 = logger.child("database");
1369
+ function getCallerInfo() {
1370
+ try {
1371
+ const stack = new Error().stack;
1372
+ if (!stack) return void 0;
1373
+ const lines = stack.split("\n");
1374
+ for (let i = 3; i < lines.length; i++) {
1375
+ const line = lines[i];
1376
+ if (!line.includes("node_modules") && !line.includes("/db/manager/")) {
1377
+ const match = line.match(/\((.+):(\d+):(\d+)\)/) || line.match(/at (.+):(\d+):(\d+)/);
1378
+ if (match) {
1379
+ const fullPath = match[1];
1380
+ const parts = fullPath.split("/");
1381
+ const srcIndex = parts.lastIndexOf("src");
1382
+ if (srcIndex !== -1) {
1383
+ const relativePath = parts.slice(srcIndex).join("/");
1384
+ return `${relativePath}:${match[2]}`;
1385
+ }
1386
+ return `${fullPath}:${match[2]}`;
1387
+ }
1388
+ break;
1389
+ }
1390
+ }
1391
+ } catch {
1392
+ }
1393
+ return void 0;
1394
+ }
1476
1395
  function getDatabase(type) {
1477
1396
  const writeInst = getWriteInstance();
1478
1397
  const readInst = getReadInstance();
1479
- dbLogger4.debug(`getDatabase() called with type=${type}, writeInstance=${!!writeInst}, readInstance=${!!readInst}`);
1398
+ if (process.env.DB_DEBUG_TRACE === "true") {
1399
+ const caller = getCallerInfo();
1400
+ dbLogger4.debug("getDatabase() called", {
1401
+ type: type || "write",
1402
+ hasWrite: !!writeInst,
1403
+ hasRead: !!readInst,
1404
+ caller
1405
+ });
1406
+ }
1480
1407
  if (type === "read") {
1481
1408
  return readInst ?? writeInst;
1482
1409
  }