pgserve 1.0.6 → 1.0.7

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pgserve",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "description": "Embedded PostgreSQL server with true concurrent connections - zero config, auto-provision databases",
5
5
  "main": "src/index.js",
6
6
  "type": "module",
package/src/cluster.js CHANGED
@@ -13,7 +13,7 @@ import cluster from 'cluster';
13
13
  import os from 'os';
14
14
  import net from 'net';
15
15
  import pg from 'pg';
16
- import pino from 'pino';
16
+ import { createLogger } from './logger.js';
17
17
  import { PostgresManager } from './postgres.js';
18
18
  import { extractDatabaseNameFromSocket } from './protocol.js';
19
19
  import { EventEmitter } from 'events';
@@ -34,7 +34,7 @@ class ClusterRouter extends EventEmitter {
34
34
  this.autoProvision = options.autoProvision !== false;
35
35
  this.maxConnections = options.maxConnections || 1000;
36
36
 
37
- this.logger = pino({ level: options.logLevel || 'info' });
37
+ this.logger = createLogger({ level: options.logLevel || 'info' });
38
38
  this.adminClient = null;
39
39
  this.server = null;
40
40
  this.connections = new Set();
@@ -206,7 +206,7 @@ export async function startClusterServer(options = {}) {
206
206
  console.log(`[pgserve] Cluster mode: ${numWorkers} workers`);
207
207
 
208
208
  // PRIMARY: Start our embedded PostgreSQL (single instance)
209
- const logger = pino({ level: options.logLevel || 'info' });
209
+ const logger = createLogger({ level: options.logLevel || 'info' });
210
210
  const pgManager = new PostgresManager({
211
211
  dataDir: options.baseDir,
212
212
  port: pgPort,
package/src/logger.js ADDED
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Shared Logger Configuration
3
+ *
4
+ * Provides colorful, human-readable logging via pino-pretty.
5
+ * All modules should use createLogger() for consistent output.
6
+ */
7
+
8
+ import pino from 'pino';
9
+
10
+ /**
11
+ * Create a configured pino logger with pretty output
12
+ * @param {Object} options - Logger options
13
+ * @param {string} options.level - Log level (default: 'info')
14
+ * @param {string} options.component - Component name for log context
15
+ * @returns {pino.Logger} Configured pino logger
16
+ */
17
+ export function createLogger(options = {}) {
18
+ const level = options.level || process.env.LOG_LEVEL || 'info';
19
+
20
+ const logger = pino({
21
+ level,
22
+ transport: {
23
+ target: 'pino-pretty',
24
+ options: {
25
+ colorize: true,
26
+ ignore: 'pid,hostname', // Remove noise
27
+ translateTime: 'HH:MM:ss', // Short timestamp
28
+ hideObject: true, // Hide JSON attributes for clean output
29
+ }
30
+ }
31
+ });
32
+
33
+ // Return child logger with component if specified
34
+ if (options.component) {
35
+ return logger.child({ component: options.component });
36
+ }
37
+
38
+ return logger;
39
+ }
package/src/restore.js CHANGED
@@ -15,7 +15,7 @@
15
15
 
16
16
  import pg from 'pg';
17
17
  import { from as copyFrom, to as copyTo } from 'pg-copy-streams';
18
- import pino from 'pino';
18
+ import { createLogger } from './logger.js';
19
19
 
20
20
  /**
21
21
  * Match database name against patterns (supports wildcards)
@@ -46,7 +46,7 @@ export class RestoreManager {
46
46
  this.targetPort = options.targetPort; // Local embedded PostgreSQL port
47
47
  this.targetSocketPath = options.targetSocketPath; // Unix socket path (optional)
48
48
 
49
- this.logger = options.logger || pino({ level: options.logLevel || 'info' }).child({ component: 'restore' });
49
+ this.logger = options.logger || createLogger({ level: options.logLevel || 'info', component: 'restore' });
50
50
 
51
51
  // Connection pools (lazy initialized)
52
52
  this.sourcePool = null;
package/src/router.js CHANGED
@@ -19,7 +19,7 @@ import { RestoreManager } from './restore.js';
19
19
  import { Dashboard } from './dashboard.js';
20
20
  import { extractDatabaseNameFromSocket } from './protocol.js';
21
21
  import { EventEmitter } from 'events';
22
- import pino from 'pino';
22
+ import { createLogger } from './logger.js';
23
23
 
24
24
  /**
25
25
  * Multi-Tenant Router Server
@@ -39,13 +39,7 @@ export class MultiTenantRouter extends EventEmitter {
39
39
 
40
40
  // Pino logger (ultra-fast structured logging)
41
41
  const logLevel = options.logLevel || 'info';
42
- this.logger = options.logger || pino({
43
- level: logLevel,
44
- transport: logLevel === 'debug' ? {
45
- target: 'pino-pretty',
46
- options: { colorize: true }
47
- } : undefined
48
- });
42
+ this.logger = options.logger || createLogger({ level: logLevel });
49
43
 
50
44
  // Sync options (async replication to real PostgreSQL)
51
45
  this.syncTo = options.syncTo || null;
package/src/sync.js CHANGED
@@ -6,7 +6,7 @@
6
6
  */
7
7
 
8
8
  import pg from 'pg';
9
- import pino from 'pino';
9
+ import { createLogger } from './logger.js';
10
10
 
11
11
  /**
12
12
  * Match database name against patterns (supports wildcards)
@@ -36,7 +36,7 @@ export class SyncManager {
36
36
  this.sourcePort = options.sourcePort; // pgserve PostgreSQL port
37
37
  this.sourceSocketPath = options.sourceSocketPath; // pgserve socket path (optional)
38
38
 
39
- this.logger = pino({ level: options.logLevel || 'info' }).child({ component: 'sync' });
39
+ this.logger = createLogger({ level: options.logLevel || 'info', component: 'sync' });
40
40
 
41
41
  this.sourcePool = null; // Connection to pgserve's PostgreSQL
42
42
  this.targetPool = null; // Connection to real PostgreSQL