Merge branch 'staging' into cursor/add-migration-and-update-endpoint-1563

This commit is contained in:
dal 2025-07-03 15:32:02 -06:00
commit d405493b64
No known key found for this signature in database
GPG Key ID: 16F4B0E1E9F61122
4 changed files with 34 additions and 59 deletions

View File

@ -36,7 +36,7 @@ RUN START=$(date +%s) && \
RUN START=$(date +%s) && \
echo "=== Starting application build ===" && \
cd apps/server && \
time bun build src/index.ts --outdir ./dist --target bun && \
time bun build src/index.ts --outdir ./dist --target bun --external pino-pretty && \
echo "Build complete - output:" && \
ls -la dist/ && \
END=$(date +%s) && \

View File

@ -8,7 +8,7 @@
},
"scripts": {
"prebuild": "bun run scripts/validate-env.js",
"build": "bun build src/index.ts --outdir ./dist --target bun",
"build": "bun build src/index.ts --outdir ./dist --target bun --external pino-pretty",
"dev": "bun --max-old-space-size=512 run --hot src/index.ts",
"lint": "biome check",
"prod": "pnpm run build:vercel && pnpm run start:vercel",

View File

@ -10,19 +10,7 @@ describe('logger middleware', () => {
debug: typeof console.debug;
};
beforeEach(() => {
// Save original env and console
originalEnv = { ...process.env };
originalConsole = {
info: console.info,
warn: console.warn,
error: console.error,
debug: console.debug,
};
// Clear module cache to reload logger with new env
vi.resetModules();
});
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
afterEach(() => {
// Restore original env and console

View File

@ -1,61 +1,48 @@
import { pinoLogger } from 'hono-pino';
import pino from 'pino';
import 'pino-pretty';
const isDev = process.env.NODE_ENV !== 'production';
const logLevel = process.env.LOG_LEVEL || 'info';
let isPinoPrettyAvailable = true;
// Create base pino instance
const createBaseLogger = () => {
if (isDev) {
try {
// Only use pino-pretty transport in development
return pino({
level: logLevel,
transport: {
target: 'pino-pretty',
options: { colorize: true },
},
});
} catch (error) {
console.warn('pino-pretty not available, falling back to JSON logging');
console.error(error);
}
}
// Create base pino instance for console capture
const baseLogger = pino({
level: logLevel,
transport: isDev && isPinoPrettyAvailable
? {
target: 'pino-pretty',
options: { colorize: true },
}
: undefined,
});
// Production or fallback: use standard JSON logging
return pino({
level: logLevel,
});
};
const baseLogger = createBaseLogger();
// Simple console capture - only override if LOG_LEVEL is set
if (process.env.LOG_LEVEL) {
const originalConsole = {
info: console.info,
warn: console.warn,
error: console.error,
};
console.info = (...args) => baseLogger.info(...args);
console.warn = (...args) => baseLogger.warn(...args);
console.error = (...args) => baseLogger.error(...args);
console.info = (...args) => baseLogger.info(args.join(' '));
console.warn = (...args) => baseLogger.warn(args.join(' '));
console.error = (...args) => baseLogger.error(args.join(' '));
// Suppress debug logs when LOG_LEVEL is info or higher
if (logLevel !== 'debug' && logLevel !== 'trace') {
console.debug = () => {};
}
}
// Create logger with fallback for pino-pretty failures
function createLogger() {
// Try pino-pretty in development
if (isDev && isPinoPrettyAvailable) {
try {
return pinoLogger({
pino: baseLogger,
});
} catch (error) {
console.error('pino-pretty not available, falling back to JSON logging', error);
isPinoPrettyAvailable = false;
}
}
// Fallback to simple JSON logging
return pinoLogger({
pino: {
level: logLevel,
},
});
}
export const loggerMiddleware = createLogger();
// Create logger middleware
export const loggerMiddleware = pinoLogger({
pino: baseLogger,
});