diff --git a/.vscode/launch.json b/.vscode/launch.json index da3268152b..8cd523d5d9 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -17,7 +17,7 @@ "type": "node-terminal" }, { - "command": "pnpm run dev:postgres collections-graphql -- -I", // Allow input + "command": "pnpm run dev:postgres collections-graphql", "cwd": "${workspaceFolder}", "name": "Run Dev Postgres", "request": "launch", @@ -31,7 +31,7 @@ "type": "node-terminal" }, { - "command": "PAYLOAD_BUNDLER=vite pnpm run dev fields -- -I", // Allow input + "command": "PAYLOAD_BUNDLER=vite pnpm run dev fields", "cwd": "${workspaceFolder}", "name": "Run Dev Fields (Vite)", "request": "launch", diff --git a/nodemon.json b/nodemon.json new file mode 100644 index 0000000000..9b72e81f4b --- /dev/null +++ b/nodemon.json @@ -0,0 +1,15 @@ +{ + "$schema": "https://json.schemastore.org/nodemon.json", + "exec": "ts-node ./test/dev.ts", + "ext": "ts,js,json", + "ignore": [ + ".git", + "node_modules", + "node_modules/**/node_modules", + "packages/payload/src/admin", + "packages/payload/src/**/*.spec.ts", + "test/**/payload-types.ts" + ], + "watch": ["./test/", "./packages/**/*.ts"], + "stdin": true +} diff --git a/package.json b/package.json index 4e12390475..e83c1a4d5b 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "clean": "rimraf dist && rimraf packages/payload/dist", "clean:cache": "rimraf node_modules/.cache && rimraf packages/payload/node_modules/.cache", "clean:unix": "find . \\( -type d \\( -name node_modules -o -name dist -o -name .cache \\) -o -type f -name tsconfig.tsbuildinfo \\) -exec rm -rf {} +", - "dev": "pnpm --filter payload run dev", + "dev": "nodemon", "dev:generate-graphql-schema": "ts-node -T ./test/generateGraphQLSchema.ts", "dev:generate-types": "ts-node -T ./test/generateTypes.ts", "dev:postgres": "pnpm --filter payload run dev:postgres", @@ -63,6 +63,7 @@ "lint-staged": "^14.0.1", "mongodb-memory-server": "8.12.2", "node-fetch": "2.6.12", + "nodemon": "3.0.1", "prettier": "^3.0.3", "qs": "6.11.2", "rimraf": "3.0.2", diff --git a/packages/db-postgres/src/connect.ts b/packages/db-postgres/src/connect.ts index 17d7bdd627..e396c96ae5 100644 --- a/packages/db-postgres/src/connect.ts +++ b/packages/db-postgres/src/connect.ts @@ -30,8 +30,7 @@ export const connect: Connect = async function connect(this: PostgresAdapter, pa process.exit(1) } - // TODO: Bring this log back once we figure out logging issues - // this.payload.logger.info('Connected to Postgres successfully') + this.payload.logger.info('Connected to Postgres successfully') // Only push schema if not in production if (process.env.NODE_ENV === 'production' || process.env.PAYLOAD_MIGRATING === 'true') return @@ -50,14 +49,13 @@ export const connect: Connect = async function connect(this: PostgresAdapter, pa // }) if (warnings.length) { - console.log({ + this.payload.logger.info({ msg: `Warnings detected during schema push: ${warnings.join('\n')}`, warnings, }) if (hasDataLoss) { - // TODO: Bring this log back once we figure out logging issues - console.log({ + this.payload.logger.info({ msg: 'DATA LOSS WARNING: Possible data loss detected if schema is pushed.', }) } diff --git a/packages/payload/nodemon.json b/packages/payload/nodemon.json index fc33328104..392113e48e 100644 --- a/packages/payload/nodemon.json +++ b/packages/payload/nodemon.json @@ -9,5 +9,6 @@ "src/**/*.spec.ts", "test/**/payload-types.ts" ], - "watch": ["src/**/*.ts", "../../test/", "packages/**/*.ts"] + "watch": ["src/**/*.ts", "../../test/", "../../packages/**/*.ts"], + "stdin": true } diff --git a/packages/payload/src/bin/migrate.ts b/packages/payload/src/bin/migrate.ts index b8007f551b..248a7737da 100644 --- a/packages/payload/src/bin/migrate.ts +++ b/packages/payload/src/bin/migrate.ts @@ -1,4 +1,14 @@ import payload from '..' +import { prettySyncLoggerDestination } from '../utilities/logger' + +/** + * The default logger's options did not allow for forcing sync logging + * Using these options, to force both pretty print and sync logging + */ +const prettySyncLogger = { + loggerDestination: prettySyncLoggerDestination, + loggerOptions: {}, +} const availableCommands = [ 'migrate', @@ -20,6 +30,7 @@ export const migrate = async (args: string[]): Promise => { disableOnInit: true, local: true, secret: process.env.PAYLOAD_SECRET || '--unused--', + ...prettySyncLogger, }) const adapter = payload.db diff --git a/packages/payload/src/payload.ts b/packages/payload/src/payload.ts index 390dd6741d..aa2c93df41 100644 --- a/packages/payload/src/payload.ts +++ b/packages/payload/src/payload.ts @@ -314,7 +314,7 @@ export class BasePayload { async init(options: InitOptions): Promise { this.logger = Logger('payload', options.loggerOptions, options.loggerDestination) - // this.logger.info('Starting Payload...') + this.logger.info('Starting Payload...') if (!options.secret) { throw new Error('Error: missing secret key. A secret key is needed to secure Payload.') } diff --git a/packages/payload/src/utilities/logger.ts b/packages/payload/src/utilities/logger.ts index 17759c913b..cef225fde2 100644 --- a/packages/payload/src/utilities/logger.ts +++ b/packages/payload/src/utilities/logger.ts @@ -1,18 +1,27 @@ import pino from 'pino' +import prettifier from 'pino-pretty' export type PayloadLogger = pino.Logger -const defaultLoggerOptions: pino.LoggerOptions = { +const prettyOptions = { + colorize: true, + ignore: 'pid,hostname', + translateTime: 'HH:MM:ss', +} + +export const defaultLoggerOptions: pino.LoggerOptions = { transport: { - options: { - colorize: true, - ignore: 'pid,hostname', - translateTime: 'HH:MM:ss', - }, + options: prettyOptions, target: 'pino-pretty', }, } +export const prettySyncLoggerDestination = prettifier({ + ...prettyOptions, + destination: 1, // stdout + sync: true, +}) + const getLogger = ( name = 'payload', options?: pino.LoggerOptions, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0d0f1a1695..23a4edf609 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -96,6 +96,9 @@ importers: node-fetch: specifier: 2.6.12 version: 2.6.12 + nodemon: + specifier: 3.0.1 + version: 3.0.1 prettier: specifier: ^3.0.3 version: 3.0.3 @@ -6419,7 +6422,7 @@ packages: handlebars: 4.7.8 json-stringify-safe: 5.0.1 meow: 8.1.2 - semver: 7.5.1 + semver: 7.5.4 split: 1.0.1 dev: true @@ -8616,7 +8619,7 @@ packages: hasBin: true dependencies: meow: 8.1.2 - semver: 7.5.1 + semver: 7.5.4 dev: true /git-up@7.0.0: @@ -11306,7 +11309,7 @@ packages: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.13.0 - semver: 7.5.1 + semver: 7.5.4 validate-npm-package-license: 3.0.4 dev: true diff --git a/test/dev.ts b/test/dev.ts index 7fad033ffd..a5e8540eac 100644 --- a/test/dev.ts +++ b/test/dev.ts @@ -5,12 +5,22 @@ import path from 'path' import { v4 as uuid } from 'uuid' import payload from '../packages/payload/src' +import { prettySyncLoggerDestination } from '../packages/payload/src/utilities/logger' import { startLivePreviewDemo } from './live-preview/startLivePreviewDemo' dotenv.config() const [testSuiteDir] = process.argv.slice(2) +/** + * The default logger's options did not allow for forcing sync logging + * Using these options, to force both pretty print and sync logging + */ +const prettySyncLogger = { + loggerDestination: prettySyncLoggerDestination, + loggerOptions: {}, +} + if (!testSuiteDir) { console.error('ERROR: You must provide an argument for "testSuiteDir"') process.exit(1) @@ -47,6 +57,7 @@ const startDev = async () => { fromName: 'Payload', fromAddress: 'hello@payloadcms.com', }, + ...prettySyncLogger, onInit: async (payload) => { payload.logger.info('Payload Dev Server Initialized') },