From f7e8862d285311d0b9b3008affb7b22debe25297 Mon Sep 17 00:00:00 2001 From: tamaina Date: Mon, 4 Mar 2024 11:32:08 +0000 Subject: [PATCH 01/23] =?UTF-8?q?enhance(backend):=20logger=E3=81=A7?= =?UTF-8?q?=E3=83=87=E3=83=BC=E3=82=BF=E3=81=AE=E8=A1=A8=E7=A4=BA=E3=81=AB?= =?UTF-8?q?util.inspect=E3=82=92=E4=BD=BF=E7=94=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/backend/src/logger.ts | 12 +++++++++++- .../backend/src/queue/QueueProcessorService.ts | 18 +++++++----------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/packages/backend/src/logger.ts b/packages/backend/src/logger.ts index d4705af601..7ebcd392f7 100644 --- a/packages/backend/src/logger.ts +++ b/packages/backend/src/logger.ts @@ -4,6 +4,7 @@ */ import cluster from 'node:cluster'; +import { inspect } from 'node:util'; import chalk from 'chalk'; import { default as convertColor } from 'color-convert'; import { format as dateFormat } from 'date-fns'; @@ -73,7 +74,16 @@ export default class Logger { const args: unknown[] = [important ? chalk.bold(log) : log]; if (data != null) { - args.push(data); + args.push(inspect(data, { + depth: Infinity, + compact: true, + breakLength: Infinity, + colors: true, + showHidden: false, + showProxy: false, + maxArrayLength: Infinity, + maxStringLength: Infinity, + })); } console.log(...args); } diff --git a/packages/backend/src/queue/QueueProcessorService.ts b/packages/backend/src/queue/QueueProcessorService.ts index ce999d9cef..2775b81b9e 100644 --- a/packages/backend/src/queue/QueueProcessorService.ts +++ b/packages/backend/src/queue/QueueProcessorService.ts @@ -120,11 +120,7 @@ export class QueueProcessorService implements OnApplicationShutdown { function renderError(e: Error): any { if (e) { // 何故かeがundefinedで来ることがある - return { - stack: e.stack, - message: e.message, - name: e.name, - }; + return e; } else { return { stack: '?', @@ -155,8 +151,8 @@ export class QueueProcessorService implements OnApplicationShutdown { this.systemQueueWorker .on('active', (job) => systemLogger.debug(`active id=${job.id}`)) .on('completed', (job, result) => systemLogger.debug(`completed(${result}) id=${job.id}`)) - .on('failed', (job, err) => systemLogger.warn(`failed(${err.stack}) id=${job ? job.id : '-'}`, { job, e: renderError(err) })) - .on('error', (err: Error) => systemLogger.error(`error ${err.stack}`, { e: renderError(err) })) + .on('failed', (job, err) => systemLogger.warn(`failed id=${job ? job.id : '-'}`, { data: job?.data, e: renderError(err) })) + .on('error', (err: Error) => systemLogger.error(`error`, { e: renderError(err) })) .on('stalled', (jobId) => systemLogger.warn(`stalled id=${jobId}`)); //#endregion @@ -218,8 +214,8 @@ export class QueueProcessorService implements OnApplicationShutdown { this.deliverQueueWorker .on('active', (job) => deliverLogger.debug(`active ${getJobInfo(job, true)} to=${job.data.to}`)) .on('completed', (job, result) => deliverLogger.debug(`completed(${result}) ${getJobInfo(job, true)} to=${job.data.to}`)) - .on('failed', (job, err) => deliverLogger.warn(`failed(${err.stack}) ${getJobInfo(job)} to=${job ? job.data.to : '-'}`)) - .on('error', (err: Error) => deliverLogger.error(`error ${err.stack}`, { e: renderError(err) })) + .on('failed', (job, err) => deliverLogger.warn(`failed ${getJobInfo(job)} id=${job ? job.id : '-'} to=${job?.data.to}`, { data: job?.data, e: renderError(err) })) + .on('error', (err: Error) => deliverLogger.error('error', { e: renderError(err) })) .on('stalled', (jobId) => deliverLogger.warn(`stalled id=${jobId}`)); //#endregion @@ -242,8 +238,8 @@ export class QueueProcessorService implements OnApplicationShutdown { this.inboxQueueWorker .on('active', (job) => inboxLogger.debug(`active ${getJobInfo(job, true)}`)) .on('completed', (job, result) => inboxLogger.debug(`completed(${result}) ${getJobInfo(job, true)}`)) - .on('failed', (job, err) => inboxLogger.warn(`failed(${err.stack}) ${getJobInfo(job)} activity=${job ? (job.data.activity ? job.data.activity.id : 'none') : '-'}`, { job, e: renderError(err) })) - .on('error', (err: Error) => inboxLogger.error(`error ${err.stack}`, { e: renderError(err) })) + .on('failed', (job, err) => inboxLogger.warn(`failed(${err}) ${getJobInfo(job)} activity=${job ? (job.data.activity ? job.data.activity.id : 'none') : '-'}`, { data: job?.data, e: renderError(err) })) + .on('error', (err: Error) => inboxLogger.error(`error ${err}`, { e: renderError(err) })) .on('stalled', (jobId) => inboxLogger.warn(`stalled id=${jobId}`)); //#endregion From c9ff8d0624a0106b30be5ec9a4debbd4814e1f0e Mon Sep 17 00:00:00 2001 From: tamaina Date: Mon, 4 Mar 2024 11:35:46 +0000 Subject: [PATCH 02/23] :art: --- .../src/queue/QueueProcessorService.ts | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/packages/backend/src/queue/QueueProcessorService.ts b/packages/backend/src/queue/QueueProcessorService.ts index 2775b81b9e..f3a056008e 100644 --- a/packages/backend/src/queue/QueueProcessorService.ts +++ b/packages/backend/src/queue/QueueProcessorService.ts @@ -190,8 +190,8 @@ export class QueueProcessorService implements OnApplicationShutdown { this.dbQueueWorker .on('active', (job) => dbLogger.debug(`active id=${job.id}`)) .on('completed', (job, result) => dbLogger.debug(`completed(${result}) id=${job.id}`)) - .on('failed', (job, err) => dbLogger.warn(`failed(${err.stack}) id=${job ? job.id : '-'}`, { job, e: renderError(err) })) - .on('error', (err: Error) => dbLogger.error(`error ${err.stack}`, { e: renderError(err) })) + .on('failed', (job, err) => dbLogger.warn(`failed id=${job ? job.id : '-'}`, { job, e: renderError(err) })) + .on('error', (err: Error) => dbLogger.error('error', { e: renderError(err) })) .on('stalled', (jobId) => dbLogger.warn(`stalled id=${jobId}`)); //#endregion @@ -238,8 +238,11 @@ export class QueueProcessorService implements OnApplicationShutdown { this.inboxQueueWorker .on('active', (job) => inboxLogger.debug(`active ${getJobInfo(job, true)}`)) .on('completed', (job, result) => inboxLogger.debug(`completed(${result}) ${getJobInfo(job, true)}`)) - .on('failed', (job, err) => inboxLogger.warn(`failed(${err}) ${getJobInfo(job)} activity=${job ? (job.data.activity ? job.data.activity.id : 'none') : '-'}`, { data: job?.data, e: renderError(err) })) - .on('error', (err: Error) => inboxLogger.error(`error ${err}`, { e: renderError(err) })) + .on('failed', (job, err) => inboxLogger.warn( + `failed ${getJobInfo(job)} activity=${job ? (job.data.activity ? job.data.activity.id : 'none') : '-'}`, + { data: job?.data, e: renderError(err) } + )) + .on('error', (err: Error) => inboxLogger.error('error', { e: renderError(err) })) .on('stalled', (jobId) => inboxLogger.warn(`stalled id=${jobId}`)); //#endregion @@ -262,8 +265,8 @@ export class QueueProcessorService implements OnApplicationShutdown { this.webhookDeliverQueueWorker .on('active', (job) => webhookLogger.debug(`active ${getJobInfo(job, true)} to=${job.data.to}`)) .on('completed', (job, result) => webhookLogger.debug(`completed(${result}) ${getJobInfo(job, true)} to=${job.data.to}`)) - .on('failed', (job, err) => webhookLogger.warn(`failed(${err.stack}) ${getJobInfo(job)} to=${job ? job.data.to : '-'}`)) - .on('error', (err: Error) => webhookLogger.error(`error ${err.stack}`, { e: renderError(err) })) + .on('failed', (job, err) => webhookLogger.warn(`failed ${getJobInfo(job)} to=${job ? job.data.to : '-'}`, { e: renderError(e) })) + .on('error', (err: Error) => webhookLogger.error('error', { e: renderError(err) })) .on('stalled', (jobId) => webhookLogger.warn(`stalled id=${jobId}`)); //#endregion @@ -291,8 +294,8 @@ export class QueueProcessorService implements OnApplicationShutdown { this.relationshipQueueWorker .on('active', (job) => relationshipLogger.debug(`active id=${job.id}`)) .on('completed', (job, result) => relationshipLogger.debug(`completed(${result}) id=${job.id}`)) - .on('failed', (job, err) => relationshipLogger.warn(`failed(${err.stack}) id=${job ? job.id : '-'}`, { job, e: renderError(err) })) - .on('error', (err: Error) => relationshipLogger.error(`error ${err.stack}`, { e: renderError(err) })) + .on('failed', (job, err) => relationshipLogger.warn(`failed id=${job ? job.id : '-'}`, { job, e: renderError(err) })) + .on('error', (err: Error) => relationshipLogger.error('error', { e: renderError(err) })) .on('stalled', (jobId) => relationshipLogger.warn(`stalled id=${jobId}`)); //#endregion @@ -314,8 +317,8 @@ export class QueueProcessorService implements OnApplicationShutdown { this.objectStorageQueueWorker .on('active', (job) => objectStorageLogger.debug(`active id=${job.id}`)) .on('completed', (job, result) => objectStorageLogger.debug(`completed(${result}) id=${job.id}`)) - .on('failed', (job, err) => objectStorageLogger.warn(`failed(${err.stack}) id=${job ? job.id : '-'}`, { job, e: renderError(err) })) - .on('error', (err: Error) => objectStorageLogger.error(`error ${err.stack}`, { e: renderError(err) })) + .on('failed', (job, err) => objectStorageLogger.warn(`failed id=${job ? job.id : '-'}`, { job, e: renderError(err) })) + .on('error', (err: Error) => objectStorageLogger.error('error', { e: renderError(err) })) .on('stalled', (jobId) => objectStorageLogger.warn(`stalled id=${jobId}`)); //#endregion From 84a6877f57aa983bf1bfae538d659e80110c2f93 Mon Sep 17 00:00:00 2001 From: tamaina Date: Mon, 4 Mar 2024 11:44:03 +0000 Subject: [PATCH 03/23] failed((${err.message})) --- .../backend/src/queue/QueueProcessorService.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/backend/src/queue/QueueProcessorService.ts b/packages/backend/src/queue/QueueProcessorService.ts index f3a056008e..e05fe20458 100644 --- a/packages/backend/src/queue/QueueProcessorService.ts +++ b/packages/backend/src/queue/QueueProcessorService.ts @@ -151,7 +151,7 @@ export class QueueProcessorService implements OnApplicationShutdown { this.systemQueueWorker .on('active', (job) => systemLogger.debug(`active id=${job.id}`)) .on('completed', (job, result) => systemLogger.debug(`completed(${result}) id=${job.id}`)) - .on('failed', (job, err) => systemLogger.warn(`failed id=${job ? job.id : '-'}`, { data: job?.data, e: renderError(err) })) + .on('failed', (job, err) => systemLogger.warn(`failed(${err.message}) id=${job ? job.id : '-'}`, { data: job?.data, e: renderError(err) })) .on('error', (err: Error) => systemLogger.error(`error`, { e: renderError(err) })) .on('stalled', (jobId) => systemLogger.warn(`stalled id=${jobId}`)); //#endregion @@ -190,7 +190,7 @@ export class QueueProcessorService implements OnApplicationShutdown { this.dbQueueWorker .on('active', (job) => dbLogger.debug(`active id=${job.id}`)) .on('completed', (job, result) => dbLogger.debug(`completed(${result}) id=${job.id}`)) - .on('failed', (job, err) => dbLogger.warn(`failed id=${job ? job.id : '-'}`, { job, e: renderError(err) })) + .on('failed', (job, err) => dbLogger.warn(`failed(${err.message}) id=${job ? job.id : '-'}`, { job, e: renderError(err) })) .on('error', (err: Error) => dbLogger.error('error', { e: renderError(err) })) .on('stalled', (jobId) => dbLogger.warn(`stalled id=${jobId}`)); //#endregion @@ -214,7 +214,7 @@ export class QueueProcessorService implements OnApplicationShutdown { this.deliverQueueWorker .on('active', (job) => deliverLogger.debug(`active ${getJobInfo(job, true)} to=${job.data.to}`)) .on('completed', (job, result) => deliverLogger.debug(`completed(${result}) ${getJobInfo(job, true)} to=${job.data.to}`)) - .on('failed', (job, err) => deliverLogger.warn(`failed ${getJobInfo(job)} id=${job ? job.id : '-'} to=${job?.data.to}`, { data: job?.data, e: renderError(err) })) + .on('failed', (job, err) => deliverLogger.warn(`failed(${err.message}) ${getJobInfo(job)} id=${job ? job.id : '-'} to=${job?.data.to}`, { data: job?.data, e: renderError(err) })) .on('error', (err: Error) => deliverLogger.error('error', { e: renderError(err) })) .on('stalled', (jobId) => deliverLogger.warn(`stalled id=${jobId}`)); //#endregion @@ -239,7 +239,7 @@ export class QueueProcessorService implements OnApplicationShutdown { .on('active', (job) => inboxLogger.debug(`active ${getJobInfo(job, true)}`)) .on('completed', (job, result) => inboxLogger.debug(`completed(${result}) ${getJobInfo(job, true)}`)) .on('failed', (job, err) => inboxLogger.warn( - `failed ${getJobInfo(job)} activity=${job ? (job.data.activity ? job.data.activity.id : 'none') : '-'}`, + `failed(${err.message}) ${getJobInfo(job)} activity=${job ? (job.data.activity ? job.data.activity.id : 'none') : '-'}`, { data: job?.data, e: renderError(err) } )) .on('error', (err: Error) => inboxLogger.error('error', { e: renderError(err) })) @@ -265,7 +265,7 @@ export class QueueProcessorService implements OnApplicationShutdown { this.webhookDeliverQueueWorker .on('active', (job) => webhookLogger.debug(`active ${getJobInfo(job, true)} to=${job.data.to}`)) .on('completed', (job, result) => webhookLogger.debug(`completed(${result}) ${getJobInfo(job, true)} to=${job.data.to}`)) - .on('failed', (job, err) => webhookLogger.warn(`failed ${getJobInfo(job)} to=${job ? job.data.to : '-'}`, { e: renderError(e) })) + .on('failed', (job, err) => webhookLogger.warn(`failed(${err.message}) ${getJobInfo(job)} to=${job ? job.data.to : '-'}`, { e: renderError(e) })) .on('error', (err: Error) => webhookLogger.error('error', { e: renderError(err) })) .on('stalled', (jobId) => webhookLogger.warn(`stalled id=${jobId}`)); //#endregion @@ -294,7 +294,7 @@ export class QueueProcessorService implements OnApplicationShutdown { this.relationshipQueueWorker .on('active', (job) => relationshipLogger.debug(`active id=${job.id}`)) .on('completed', (job, result) => relationshipLogger.debug(`completed(${result}) id=${job.id}`)) - .on('failed', (job, err) => relationshipLogger.warn(`failed id=${job ? job.id : '-'}`, { job, e: renderError(err) })) + .on('failed', (job, err) => relationshipLogger.warn(`failed(${err.message}) id=${job ? job.id : '-'}`, { job, e: renderError(err) })) .on('error', (err: Error) => relationshipLogger.error('error', { e: renderError(err) })) .on('stalled', (jobId) => relationshipLogger.warn(`stalled id=${jobId}`)); //#endregion @@ -317,7 +317,7 @@ export class QueueProcessorService implements OnApplicationShutdown { this.objectStorageQueueWorker .on('active', (job) => objectStorageLogger.debug(`active id=${job.id}`)) .on('completed', (job, result) => objectStorageLogger.debug(`completed(${result}) id=${job.id}`)) - .on('failed', (job, err) => objectStorageLogger.warn(`failed id=${job ? job.id : '-'}`, { job, e: renderError(err) })) + .on('failed', (job, err) => objectStorageLogger.warn(`failed(${err.message}) id=${job ? job.id : '-'}`, { job, e: renderError(err) })) .on('error', (err: Error) => objectStorageLogger.error('error', { e: renderError(err) })) .on('stalled', (jobId) => objectStorageLogger.warn(`stalled id=${jobId}`)); //#endregion From d84a5767bf1708e58de800349b60e92b0b9424a2 Mon Sep 17 00:00:00 2001 From: tamaina Date: Mon, 4 Mar 2024 12:07:03 +0000 Subject: [PATCH 04/23] force one-line log (queue processor) --- .../src/queue/QueueProcessorService.ts | 31 ++++++++++++------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/packages/backend/src/queue/QueueProcessorService.ts b/packages/backend/src/queue/QueueProcessorService.ts index e05fe20458..32e8146f55 100644 --- a/packages/backend/src/queue/QueueProcessorService.ts +++ b/packages/backend/src/queue/QueueProcessorService.ts @@ -68,6 +68,25 @@ function getJobInfo(job: Bull.Job | undefined, increment = false): string { return `id=${job.id} attempts=${currentAttempts}/${maxAttempts} age=${formated}`; } +function renderError(e: Error): any { + if (e) { // 何故かeがundefinedで来ることがある + return { + ...Object.getOwnPropertyNames(e).reduce((acc, key) => { + //@ts-expect-error Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'Error'. + acc[key] = e[key]; + return acc; + }, {} as Record), + stack: e.stack?.split('\n').map(s => s.trim()), + }; + } else { + return { + stack: '?', + message: '?', + name: '?', + }; + } +} + @Injectable() export class QueueProcessorService implements OnApplicationShutdown { private logger: Logger; @@ -118,18 +137,6 @@ export class QueueProcessorService implements OnApplicationShutdown { ) { this.logger = this.queueLoggerService.logger; - function renderError(e: Error): any { - if (e) { // 何故かeがundefinedで来ることがある - return e; - } else { - return { - stack: '?', - message: '?', - name: '?', - }; - } - } - //#region system this.systemQueueWorker = new Bull.Worker(QUEUE.SYSTEM, (job) => { switch (job.name) { From d803ec3e3eb85b70ab52080167e75abfee9cbd59 Mon Sep 17 00:00:00 2001 From: tamaina Date: Mon, 4 Mar 2024 12:16:44 +0000 Subject: [PATCH 05/23] compact: false --- packages/backend/src/logger.ts | 2 +- packages/backend/src/queue/QueueProcessorService.ts | 9 +-------- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/packages/backend/src/logger.ts b/packages/backend/src/logger.ts index 7ebcd392f7..c6a0436c60 100644 --- a/packages/backend/src/logger.ts +++ b/packages/backend/src/logger.ts @@ -76,7 +76,7 @@ export default class Logger { if (data != null) { args.push(inspect(data, { depth: Infinity, - compact: true, + compact: false, breakLength: Infinity, colors: true, showHidden: false, diff --git a/packages/backend/src/queue/QueueProcessorService.ts b/packages/backend/src/queue/QueueProcessorService.ts index 32e8146f55..c2c953b9cf 100644 --- a/packages/backend/src/queue/QueueProcessorService.ts +++ b/packages/backend/src/queue/QueueProcessorService.ts @@ -70,14 +70,7 @@ function getJobInfo(job: Bull.Job | undefined, increment = false): string { function renderError(e: Error): any { if (e) { // 何故かeがundefinedで来ることがある - return { - ...Object.getOwnPropertyNames(e).reduce((acc, key) => { - //@ts-expect-error Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'Error'. - acc[key] = e[key]; - return acc; - }, {} as Record), - stack: e.stack?.split('\n').map(s => s.trim()), - }; + return e; } else { return { stack: '?', From 18f13cea980314531fc2f92ea611471b8cbac713 Mon Sep 17 00:00:00 2001 From: tamaina Date: Mon, 4 Mar 2024 12:18:16 +0000 Subject: [PATCH 06/23] =?UTF-8?q?=E3=82=A8=E3=83=A9=E3=83=BC=E3=82=92?= =?UTF-8?q?=E5=85=88=E3=81=AB=E8=A1=A8=E7=A4=BA=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/backend/src/queue/QueueProcessorService.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/backend/src/queue/QueueProcessorService.ts b/packages/backend/src/queue/QueueProcessorService.ts index c2c953b9cf..7996e94830 100644 --- a/packages/backend/src/queue/QueueProcessorService.ts +++ b/packages/backend/src/queue/QueueProcessorService.ts @@ -151,7 +151,7 @@ export class QueueProcessorService implements OnApplicationShutdown { this.systemQueueWorker .on('active', (job) => systemLogger.debug(`active id=${job.id}`)) .on('completed', (job, result) => systemLogger.debug(`completed(${result}) id=${job.id}`)) - .on('failed', (job, err) => systemLogger.warn(`failed(${err.message}) id=${job ? job.id : '-'}`, { data: job?.data, e: renderError(err) })) + .on('failed', (job, err) => systemLogger.warn(`failed(${err.message}) id=${job ? job.id : '-'}`, { e: renderError(err), data: job?.data })) .on('error', (err: Error) => systemLogger.error(`error`, { e: renderError(err) })) .on('stalled', (jobId) => systemLogger.warn(`stalled id=${jobId}`)); //#endregion @@ -190,7 +190,7 @@ export class QueueProcessorService implements OnApplicationShutdown { this.dbQueueWorker .on('active', (job) => dbLogger.debug(`active id=${job.id}`)) .on('completed', (job, result) => dbLogger.debug(`completed(${result}) id=${job.id}`)) - .on('failed', (job, err) => dbLogger.warn(`failed(${err.message}) id=${job ? job.id : '-'}`, { job, e: renderError(err) })) + .on('failed', (job, err) => dbLogger.warn(`failed(${err.message}) id=${job ? job.id : '-'}`, { e: renderError(err), job })) .on('error', (err: Error) => dbLogger.error('error', { e: renderError(err) })) .on('stalled', (jobId) => dbLogger.warn(`stalled id=${jobId}`)); //#endregion @@ -214,7 +214,7 @@ export class QueueProcessorService implements OnApplicationShutdown { this.deliverQueueWorker .on('active', (job) => deliverLogger.debug(`active ${getJobInfo(job, true)} to=${job.data.to}`)) .on('completed', (job, result) => deliverLogger.debug(`completed(${result}) ${getJobInfo(job, true)} to=${job.data.to}`)) - .on('failed', (job, err) => deliverLogger.warn(`failed(${err.message}) ${getJobInfo(job)} id=${job ? job.id : '-'} to=${job?.data.to}`, { data: job?.data, e: renderError(err) })) + .on('failed', (job, err) => deliverLogger.warn(`failed(${err.message}) ${getJobInfo(job)} id=${job ? job.id : '-'} to=${job?.data.to}`, { e: renderError(err), data: job?.data })) .on('error', (err: Error) => deliverLogger.error('error', { e: renderError(err) })) .on('stalled', (jobId) => deliverLogger.warn(`stalled id=${jobId}`)); //#endregion @@ -265,7 +265,7 @@ export class QueueProcessorService implements OnApplicationShutdown { this.webhookDeliverQueueWorker .on('active', (job) => webhookLogger.debug(`active ${getJobInfo(job, true)} to=${job.data.to}`)) .on('completed', (job, result) => webhookLogger.debug(`completed(${result}) ${getJobInfo(job, true)} to=${job.data.to}`)) - .on('failed', (job, err) => webhookLogger.warn(`failed(${err.message}) ${getJobInfo(job)} to=${job ? job.data.to : '-'}`, { e: renderError(e) })) + .on('failed', (job, err) => webhookLogger.warn(`failed(${err.message}) ${getJobInfo(job)} to=${job ? job.data.to : '-'}`, { e: renderError(err) })) .on('error', (err: Error) => webhookLogger.error('error', { e: renderError(err) })) .on('stalled', (jobId) => webhookLogger.warn(`stalled id=${jobId}`)); //#endregion @@ -294,7 +294,7 @@ export class QueueProcessorService implements OnApplicationShutdown { this.relationshipQueueWorker .on('active', (job) => relationshipLogger.debug(`active id=${job.id}`)) .on('completed', (job, result) => relationshipLogger.debug(`completed(${result}) id=${job.id}`)) - .on('failed', (job, err) => relationshipLogger.warn(`failed(${err.message}) id=${job ? job.id : '-'}`, { job, e: renderError(err) })) + .on('failed', (job, err) => relationshipLogger.warn(`failed(${err.message}) id=${job ? job.id : '-'}`, { e: renderError(err), job })) .on('error', (err: Error) => relationshipLogger.error('error', { e: renderError(err) })) .on('stalled', (jobId) => relationshipLogger.warn(`stalled id=${jobId}`)); //#endregion @@ -317,7 +317,7 @@ export class QueueProcessorService implements OnApplicationShutdown { this.objectStorageQueueWorker .on('active', (job) => objectStorageLogger.debug(`active id=${job.id}`)) .on('completed', (job, result) => objectStorageLogger.debug(`completed(${result}) id=${job.id}`)) - .on('failed', (job, err) => objectStorageLogger.warn(`failed(${err.message}) id=${job ? job.id : '-'}`, { job, e: renderError(err) })) + .on('failed', (job, err) => objectStorageLogger.warn(`failed(${err.message}) id=${job ? job.id : '-'}`, { e: renderError(err), job })) .on('error', (err: Error) => objectStorageLogger.error('error', { e: renderError(err) })) .on('stalled', (jobId) => objectStorageLogger.warn(`stalled id=${jobId}`)); //#endregion From ec914d9f0c40fe443110481d45ab1bf4fbaa426b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=BE=E3=81=A3=E3=81=A1=E3=82=83=E3=81=A8=E3=83=BC?= =?UTF-8?q?=E3=81=AB=E3=82=85?= <17376330+u1-liquid@users.noreply.github.com> Date: Mon, 8 Jan 2024 20:26:39 +0900 Subject: [PATCH 07/23] =?UTF-8?q?feat(logging):=20JSON=E5=BD=A2=E5=BC=8F?= =?UTF-8?q?=E3=81=AE=E6=A7=8B=E9=80=A0=E5=8C=96=E3=83=AD=E3=82=B0=E3=81=A7?= =?UTF-8?q?=E3=83=AD=E3=82=B0=E3=82=92=E5=87=BA=E5=8A=9B=E3=81=A7=E3=81=8D?= =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=20(MisskeyIO#346)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/backend/src/boot/master.ts | 4 ++-- packages/backend/src/env.ts | 1 + packages/backend/src/logger.ts | 15 ++++++++++++++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/packages/backend/src/boot/master.ts b/packages/backend/src/boot/master.ts index 30f9477ccf..0b417b077e 100644 --- a/packages/backend/src/boot/master.ts +++ b/packages/backend/src/boot/master.ts @@ -28,7 +28,7 @@ const bootLogger = logger.createSubLogger('boot', 'magenta', false); const themeColor = chalk.hex('#86b300'); function greet() { - if (!envOption.quiet) { + if (!envOption.quiet && !envOption.logJson) { //#region Misskey logo const v = `v${meta.version}`; console.log(themeColor(' _____ _ _ ')); @@ -46,7 +46,7 @@ function greet() { } bootLogger.info('Welcome to Misskey!'); - bootLogger.info(`Misskey v${meta.version}`, null, true); + bootLogger.info(`Misskey v${meta.version}`, { version: meta.version, hostname: os.hostname(), pid: process.pid }, true); } /** diff --git a/packages/backend/src/env.ts b/packages/backend/src/env.ts index ba44cfa2e6..317b35b652 100644 --- a/packages/backend/src/env.ts +++ b/packages/backend/src/env.ts @@ -9,6 +9,7 @@ const envOption = { noDaemons: false, disableClustering: false, verbose: false, + logJson: false, withLogTime: false, quiet: false, }; diff --git a/packages/backend/src/logger.ts b/packages/backend/src/logger.ts index c6a0436c60..3c6cb1009d 100644 --- a/packages/backend/src/logger.ts +++ b/packages/backend/src/logger.ts @@ -42,7 +42,7 @@ export default class Logger { @bindThis private log(level: Level, message: string, data?: Record | null, important = false, subContexts: Context[] = [], store = true): void { - if (envOption.quiet) return; + if (envOption.quiet && !envOption.logJson) return; if (!this.store) store = false; if (level === 'debug') store = false; @@ -51,6 +51,19 @@ export default class Logger { return; } + if (envOption.logJson) { + console.log(JSON.stringify({ + time: new Date().toISOString(), + level: level, + message: message, + data: data, + important: important, + context: [this.context].concat(subContexts).join('.'), + cluster: cluster.isPrimary ? 'primary' : `worker-${cluster.worker!.id}`, + })); + return; + } + const time = dateFormat(new Date(), 'HH:mm:ss'); const worker = cluster.isPrimary ? '*' : cluster.worker!.id; const l = From 670d5096965d87f240f5c3ec7edc1e88078ab8e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=BE=E3=81=A3=E3=81=A1=E3=82=83=E3=81=A8=E3=83=BC?= =?UTF-8?q?=E3=81=AB=E3=82=85?= <17376330+u1-liquid@users.noreply.github.com> Date: Tue, 9 Jan 2024 11:21:37 +0900 Subject: [PATCH 08/23] =?UTF-8?q?fix:=20MK=5FLOG=5FJSON=E3=81=AEcontext?= =?UTF-8?q?=E3=81=AE=E5=80=A4=E3=81=8C=E6=AD=A3=E5=B8=B8=E3=81=AB=E8=A1=A8?= =?UTF-8?q?=E7=A4=BA=E3=81=95=E3=82=8C=E3=81=AA=E3=81=84=E5=95=8F=E9=A1=8C?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3=20(MisskeyIO#347)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix bug from MisskeyIO#346 --- packages/backend/src/logger.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backend/src/logger.ts b/packages/backend/src/logger.ts index 3c6cb1009d..6e0cf5b556 100644 --- a/packages/backend/src/logger.ts +++ b/packages/backend/src/logger.ts @@ -58,7 +58,7 @@ export default class Logger { message: message, data: data, important: important, - context: [this.context].concat(subContexts).join('.'), + context: [this.context].concat(subContexts).map(d => d.name).join('.'), cluster: cluster.isPrimary ? 'primary' : `worker-${cluster.worker!.id}`, })); return; From a7e3f6c1a91003273f594481583534bcaa144ff2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=BE=E3=81=A3=E3=81=A1=E3=82=83=E3=81=A8=E3=83=BC?= =?UTF-8?q?=E3=81=AB=E3=82=85?= <17376330+u1-liquid@users.noreply.github.com> Date: Tue, 16 Jan 2024 22:13:35 +0900 Subject: [PATCH 09/23] =?UTF-8?q?enhance(logging):=20=E3=83=AD=E3=82=B0?= =?UTF-8?q?=E3=81=AE=E5=87=A6=E7=90=86=E3=82=92pino=E3=81=AB=E7=BD=AE?= =?UTF-8?q?=E3=81=8D=E6=8F=9B=E3=81=88=E3=82=8B=20(MisskeyIO#364)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/backend/src/core/LoggerService.ts | 2 +- packages/backend/src/logger.ts | 202 +++++++++------------ packages/backend/src/postgres.ts | 7 +- pnpm-lock.yaml | 92 ++++++---- 4 files changed, 157 insertions(+), 146 deletions(-) diff --git a/packages/backend/src/core/LoggerService.ts b/packages/backend/src/core/LoggerService.ts index 96d9b09992..a3d371a303 100644 --- a/packages/backend/src/core/LoggerService.ts +++ b/packages/backend/src/core/LoggerService.ts @@ -16,6 +16,6 @@ export class LoggerService { @bindThis public getLogger(domain: string, color?: KEYWORD | undefined, store?: boolean) { - return new Logger(domain, color, store); + return new Logger(domain); } } diff --git a/packages/backend/src/logger.ts b/packages/backend/src/logger.ts index 6e0cf5b556..1235e695d8 100644 --- a/packages/backend/src/logger.ts +++ b/packages/backend/src/logger.ts @@ -4,135 +4,113 @@ */ import cluster from 'node:cluster'; -import { inspect } from 'node:util'; -import chalk from 'chalk'; -import { default as convertColor } from 'color-convert'; -import { format as dateFormat } from 'date-fns'; +import { pino } from 'pino'; import { bindThis } from '@/decorators.js'; import { envOption } from './env.js'; import type { KEYWORD } from 'color-convert/conversions.js'; -type Context = { - name: string; - color?: KEYWORD; -}; - -type Level = 'error' | 'success' | 'warning' | 'debug' | 'info'; - // eslint-disable-next-line import/no-default-export export default class Logger { - private context: Context; - private parentLogger: Logger | null = null; - private store: boolean; + private readonly domain: string; + private logger: pino.Logger; - constructor(context: string, color?: KEYWORD, store = true) { - this.context = { - name: context, - color: color, - }; - this.store = store; - } - - @bindThis - public createSubLogger(context: string, color?: KEYWORD, store = true): Logger { - const logger = new Logger(context, color, store); - logger.parentLogger = this; - return logger; - } - - @bindThis - private log(level: Level, message: string, data?: Record | null, important = false, subContexts: Context[] = [], store = true): void { - if (envOption.quiet && !envOption.logJson) return; - if (!this.store) store = false; - if (level === 'debug') store = false; - - if (this.parentLogger) { - this.parentLogger.log(level, message, data, important, [this.context].concat(subContexts), store); - return; - } - - if (envOption.logJson) { - console.log(JSON.stringify({ - time: new Date().toISOString(), - level: level, - message: message, - data: data, - important: important, - context: [this.context].concat(subContexts).map(d => d.name).join('.'), - cluster: cluster.isPrimary ? 'primary' : `worker-${cluster.worker!.id}`, - })); - return; - } - - const time = dateFormat(new Date(), 'HH:mm:ss'); - const worker = cluster.isPrimary ? '*' : cluster.worker!.id; - const l = - level === 'error' ? important ? chalk.bgRed.white('ERR ') : chalk.red('ERR ') : - level === 'warning' ? chalk.yellow('WARN') : - level === 'success' ? important ? chalk.bgGreen.white('DONE') : chalk.green('DONE') : - level === 'debug' ? chalk.gray('VERB') : - level === 'info' ? chalk.blue('INFO') : - null; - const contexts = [this.context].concat(subContexts).map(d => d.color ? chalk.rgb(...convertColor.keyword.rgb(d.color))(d.name) : chalk.white(d.name)); - const m = - level === 'error' ? chalk.red(message) : - level === 'warning' ? chalk.yellow(message) : - level === 'success' ? chalk.green(message) : - level === 'debug' ? chalk.gray(message) : - level === 'info' ? message : - null; - - let log = `${l} ${worker}\t[${contexts.join(' ')}]\t${m}`; - if (envOption.withLogTime) log = chalk.gray(time) + ' ' + log; - - const args: unknown[] = [important ? chalk.bold(log) : log]; - if (data != null) { - args.push(inspect(data, { - depth: Infinity, - compact: false, - breakLength: Infinity, - colors: true, - showHidden: false, - showProxy: false, - maxArrayLength: Infinity, - maxStringLength: Infinity, - })); - } - console.log(...args); - } - - @bindThis - public error(x: string | Error, data?: Record | null, important = false): void { // 実行を継続できない状況で使う - if (x instanceof Error) { - data = data ?? {}; - data.e = x; - this.log('error', x.toString(), data, important); - } else if (typeof x === 'object') { - this.log('error', `${(x as any).message ?? (x as any).name ?? x}`, data, important); + constructor(domain: string, _color?: KEYWORD, _store = true, parentLogger?: Logger) { + if (parentLogger) { + this.domain = parentLogger.domain + '.' + domain; } else { - this.log('error', `${x}`, data, important); + this.domain = domain; + } + + this.logger = pino({ + name: this.domain, + level: envOption.verbose ? 'debug' : 'info', + depthLimit: 8, + edgeLimit: 128, + redact: ['context.password', 'context.token'], + enabled: !envOption.quiet || envOption.logJson, + timestamp: envOption.withLogTime || envOption.logJson ? pino.stdTimeFunctions.isoTime : false, + messageKey: 'message', + errorKey: 'error', + mixin: () => ({ cluster: cluster.isPrimary ? 'primary' : `worker#${cluster.worker!.id}` }), + transport: !envOption.logJson ? { + target: 'pino-pretty', + options: { + levelFirst: false, + levelKey: 'level', + timestampKey: 'time', + messageKey: 'message', + errorLikeObjectKeys: ['e', 'err', 'error'], + ignore: 'pid,hostname,cluster,important', + messageFormat: '@{cluster} | {message}', + }, + } : undefined, + }); + } + + @bindThis + public createSubLogger(domain: string, _color?: KEYWORD, _store = true): Logger { + return new Logger(domain, undefined, false, this); + } + + @bindThis + public error(x: string | Error, context?: Record | null, important = false): void { // 実行を継続できない状況で使う + if (context === null) context = undefined; + + if (x instanceof Error) { + context = context ?? {}; + context.error = x; + + if (important) this.logger.fatal({ context, important }, x.toString()); + else this.logger.error({ context, important }, x.toString()); + } else if (typeof x === 'object') { + context = context ?? {}; + context.error = context.error ?? x; + + if (important) this.logger.fatal({ context, important }, `${(x as any).message ?? (x as any).name ?? x}`); + else this.logger.error({ context, important }, `${(x as any).message ?? (x as any).name ?? x}`); + } else { + if (important) this.logger.fatal({ context, important }, x); + else this.logger.error({ context, important }, x); } } @bindThis - public warn(message: string, data?: Record | null, important = false): void { // 実行を継続できるが改善すべき状況で使う - this.log('warning', message, data, important); - } + public warn(x: string | Error, context?: Record | null, important = false): void { // 実行を継続できるが改善すべき状況で使う + if (context === null) context = undefined; - @bindThis - public succ(message: string, data?: Record | null, important = false): void { // 何かに成功した状況で使う - this.log('success', message, data, important); - } + if (x instanceof Error) { + context = context ?? {}; + context.error = x; - @bindThis - public debug(message: string, data?: Record | null, important = false): void { // デバッグ用に使う(開発者に必要だが利用者に不要な情報) - if (process.env.NODE_ENV !== 'production' || envOption.verbose) { - this.log('debug', message, data, important); + this.logger.warn({ context, important }, x.toString()); + } else if (typeof x === 'object') { + context = context ?? {}; + context.error = context.error ?? x; + + this.logger.warn({ context, important }, `${(x as any).message ?? (x as any).name ?? x}`); + } else { + this.logger.warn({ context, important }, x); } } @bindThis - public info(message: string, data?: Record | null, important = false): void { // それ以外 - this.log('info', message, data, important); + public succ(message: string, context?: Record | null, important = false): void { // 何かに成功した状況で使う + if (context === null) context = undefined; + + this.logger.trace({ context, important }, message); + } + + @bindThis + public debug(message: string, context?: Record | null, important = false): void { // デバッグ用に使う(開発者に必要だが利用者に不要な情報) + if (context === null) context = undefined; + + this.logger.debug({ context, important }, message); + } + + @bindThis + public info(message: string, context?: Record | null, important = false): void { // それ以外 + if (context === null) context = undefined; + + this.logger.info({ context, important }, message); } } diff --git a/packages/backend/src/postgres.ts b/packages/backend/src/postgres.ts index 2d14537bbb..9d61385ffd 100644 --- a/packages/backend/src/postgres.ts +++ b/packages/backend/src/postgres.ts @@ -80,8 +80,9 @@ import { MiBubbleGameRecord } from '@/models/BubbleGameRecord.js'; import { MiReversiGame } from '@/models/ReversiGame.js'; import { Config } from '@/config.js'; -import MisskeyLogger from '@/logger.js'; import { bindThis } from '@/decorators.js'; +import { envOption } from './env.js'; +import MisskeyLogger from '@/logger.js'; export const dbLogger = new MisskeyLogger('db'); @@ -90,6 +91,8 @@ const sqlLogger = dbLogger.createSubLogger('sql', 'gray', false); class MyCustomLogger implements Logger { @bindThis private highlight(sql: string) { + if (envOption.logJson) return sql; + return highlight.highlight(sql, { language: 'sql', ignoreIllegals: true, }); @@ -97,7 +100,7 @@ class MyCustomLogger implements Logger { @bindThis public logQuery(query: string, parameters?: any[]) { - sqlLogger.info(this.highlight(query).substring(0, 100)); + sqlLogger.info(this.highlight(query)); } @bindThis diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5e29c1162b..f46719a595 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -317,6 +317,12 @@ importers: pg: specifier: 8.11.3 version: 8.11.3 + pino: + specifier: 8.17.2 + version: 8.17.2 + pino-pretty: + specifier: 10.3.1 + version: 10.3.1 pkce-challenge: specifier: 4.1.0 version: 4.1.0 @@ -1891,7 +1897,7 @@ packages: '@babel/traverse': 7.23.5 '@babel/types': 7.23.5 convert-source-map: 2.0.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -2016,7 +2022,7 @@ packages: '@babel/core': 7.23.5 '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -3198,7 +3204,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.23.9 '@babel/types': 7.23.5 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -3869,7 +3875,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) espree: 9.6.1 globals: 13.19.0 ignore: 5.2.4 @@ -4076,7 +4082,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 2.0.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -7927,7 +7933,7 @@ packages: '@typescript-eslint/type-utils': 6.11.0(eslint@8.53.0)(typescript@5.3.3) '@typescript-eslint/utils': 6.11.0(eslint@8.53.0)(typescript@5.3.3) '@typescript-eslint/visitor-keys': 6.11.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) eslint: 8.53.0 graphemer: 1.4.0 ignore: 5.2.4 @@ -7982,7 +7988,7 @@ packages: '@typescript-eslint/types': 6.11.0 '@typescript-eslint/typescript-estree': 6.11.0(typescript@5.3.3) '@typescript-eslint/visitor-keys': 6.11.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) eslint: 8.53.0 typescript: 5.3.3 transitivePeerDependencies: @@ -8038,7 +8044,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 6.11.0(typescript@5.3.3) '@typescript-eslint/utils': 6.11.0(eslint@8.53.0)(typescript@5.3.3) - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) eslint: 8.53.0 ts-api-utils: 1.0.1(typescript@5.3.3) typescript: 5.3.3 @@ -8087,7 +8093,7 @@ packages: dependencies: '@typescript-eslint/types': 6.11.0 '@typescript-eslint/visitor-keys': 6.11.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 @@ -8537,7 +8543,7 @@ packages: engines: {node: '>= 6.0.0'} requiresBuild: true dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -8545,7 +8551,7 @@ packages: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: false @@ -8902,7 +8908,7 @@ packages: resolution: {integrity: sha512-TAlMYvOuwGyLK3PfBb5WKBXZmXz2fVCgv23d6zZFdle/q3gPjmxBaeuC0pY0Dzs5PWMSgfqqEZkrye19GlDTgw==} dependencies: archy: 1.0.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) fastq: 1.15.0 transitivePeerDependencies: - supports-color @@ -9837,7 +9843,6 @@ packages: /colorette@2.0.19: resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} - dev: true /colors@1.2.5: resolution: {integrity: sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==} @@ -10341,7 +10346,6 @@ packages: dependencies: ms: 2.1.2 supports-color: 5.5.0 - dev: true /debug@4.3.4(supports-color@8.1.1): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} @@ -10354,6 +10358,7 @@ packages: dependencies: ms: 2.1.2 supports-color: 8.1.1 + dev: true /decamelize-keys@1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} @@ -10561,7 +10566,7 @@ packages: hasBin: true dependencies: address: 1.2.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: true @@ -10891,7 +10896,7 @@ packages: peerDependencies: esbuild: '>=0.12 <1' dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) esbuild: 0.18.20 transitivePeerDependencies: - supports-color @@ -11200,7 +11205,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -11247,7 +11252,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -11547,6 +11552,10 @@ packages: resolution: {integrity: sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==} dev: false + /fast-copy@3.0.1: + resolution: {integrity: sha512-Knr7NOtK3HWRYGtHoJrjkaWepqT8thIVGAwt0p0aUs1zqkAzXZV4vo9fFNwyb5fcqK1GKYFYxldQdIDVKhUAfA==} + dev: false + /fast-decode-uri-component@1.0.1: resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} dev: false @@ -11866,7 +11875,7 @@ packages: debug: optional: true dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -12410,7 +12419,6 @@ packages: /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} - dev: true /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} @@ -12489,6 +12497,10 @@ packages: resolution: {integrity: sha512-EWGTfnTqAO2L/j5HZgoM/3z82L7necsJ0pO9Tp0X1wil3PDLrkypTBRgVO2ExehEEvUycejZD3FuRaXpZZc3kw==} dev: true + /help-me@5.0.0: + resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} + dev: false + /highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} dev: false @@ -12569,7 +12581,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: false @@ -12629,7 +12641,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color @@ -12638,7 +12650,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: false @@ -12800,7 +12812,7 @@ packages: dependencies: '@ioredis/commands': 1.2.0 cluster-key-slot: 1.1.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) denque: 2.1.0 lodash.defaults: 4.2.0 lodash.isarguments: 3.1.0 @@ -16033,12 +16045,32 @@ packages: split2: 4.1.0 dev: false + /pino-pretty@10.3.1: + resolution: {integrity: sha512-az8JbIYeN/1iLj2t0jR9DV48/LQ3RC6hZPpapKPkb84Q+yTidMCpgWxIT3N0flnBDilyBQ1luWNpOeJptjdp/g==} + hasBin: true + dependencies: + colorette: 2.0.19 + dateformat: 4.6.3 + fast-copy: 3.0.1 + fast-safe-stringify: 2.1.1 + help-me: 5.0.0 + joycon: 3.1.1 + minimist: 1.2.8 + on-exit-leak-free: 2.1.0 + pino-abstract-transport: 1.1.0 + pump: 3.0.0 + readable-stream: 4.3.0 + secure-json-parse: 2.7.0 + sonic-boom: 3.7.0 + strip-json-comments: 3.1.1 + dev: false + /pino-std-serializers@6.1.0: resolution: {integrity: sha512-KO0m2f1HkrPe9S0ldjx7za9BJjeHqBku5Ch8JyxETxT8dEFGz1PwgrHaOQupVYitpzbFSYm7nnljxD8dik2c+g==} dev: false - /pino@8.17.0: - resolution: {integrity: sha512-ey+Mku+PVPhvxglLXMg1l1zQMwSHuNrKC3MD40EDZbkckJmmuY7DYZLIOwwjZ8ix/Nvhe9dZt5H99cgkot9bAw==} + /pino@8.17.2: + resolution: {integrity: sha512-LA6qKgeDMLr2ux2y/YiUt47EfgQ+S9LznBWOJdN3q1dx2sv0ziDLUBeVpyVv17TEcGCBuWf0zNtg3M5m1NhhWQ==} hasBin: true dependencies: atomic-sleep: 1.0.0 @@ -16046,7 +16078,7 @@ packages: on-exit-leak-free: 2.1.0 pino-abstract-transport: 1.1.0 pino-std-serializers: 6.1.0 - process-warning: 2.2.0 + process-warning: 3.0.0 quick-format-unescaped: 4.0.4 real-require: 0.2.0 safe-stable-stringify: 2.4.2 @@ -17888,7 +17920,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) socks: 2.7.1 transitivePeerDependencies: - supports-color @@ -18042,7 +18074,7 @@ packages: arg: 5.0.2 bluebird: 3.7.2 check-more-types: 2.24.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4(supports-color@5.5.0) execa: 5.1.1 lazy-ass: 1.6.0 ps-tree: 1.2.0 @@ -18259,7 +18291,6 @@ packages: /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - dev: true /strip-literal@1.3.0: resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} @@ -18300,7 +18331,6 @@ packages: engines: {node: '>=4'} dependencies: has-flag: 3.0.0 - dev: true /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} From c8fe7b337efed96189454f6ffcc8bbfe48c6255a Mon Sep 17 00:00:00 2001 From: tamaina Date: Mon, 4 Mar 2024 12:40:32 +0000 Subject: [PATCH 10/23] add pino pinp-pretty --- packages/backend/package.json | 2 + pnpm-lock.yaml | 77 +++++++++++++++++++++-------------- 2 files changed, 48 insertions(+), 31 deletions(-) diff --git a/packages/backend/package.json b/packages/backend/package.json index 8680610441..6a3f0f18a8 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -148,6 +148,8 @@ "otpauth": "9.2.2", "parse5": "7.1.2", "pg": "8.11.3", + "pino": "^8.19.0", + "pino-pretty": "^10.3.1", "pkce-challenge": "4.1.0", "probe-image-size": "7.2.3", "promise-limit": "2.7.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f46719a595..fdf167ca69 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -318,10 +318,10 @@ importers: specifier: 8.11.3 version: 8.11.3 pino: - specifier: 8.17.2 - version: 8.17.2 + specifier: ^8.19.0 + version: 8.19.0 pino-pretty: - specifier: 10.3.1 + specifier: ^10.3.1 version: 10.3.1 pkce-challenge: specifier: 4.1.0 @@ -1897,7 +1897,7 @@ packages: '@babel/traverse': 7.23.5 '@babel/types': 7.23.5 convert-source-map: 2.0.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -2022,7 +2022,7 @@ packages: '@babel/core': 7.23.5 '@babel/helper-compilation-targets': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -3204,7 +3204,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.23.9 '@babel/types': 7.23.5 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -3875,7 +3875,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) espree: 9.6.1 globals: 13.19.0 ignore: 5.2.4 @@ -4082,7 +4082,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 2.0.1 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -6652,7 +6652,7 @@ packages: ts-dedent: 2.2.0 type-fest: 2.19.0 vue: 3.4.21(typescript@5.3.3) - vue-component-type-helpers: 1.8.27 + vue-component-type-helpers: 2.0.4 transitivePeerDependencies: - encoding - supports-color @@ -7933,7 +7933,7 @@ packages: '@typescript-eslint/type-utils': 6.11.0(eslint@8.53.0)(typescript@5.3.3) '@typescript-eslint/utils': 6.11.0(eslint@8.53.0)(typescript@5.3.3) '@typescript-eslint/visitor-keys': 6.11.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) eslint: 8.53.0 graphemer: 1.4.0 ignore: 5.2.4 @@ -7988,7 +7988,7 @@ packages: '@typescript-eslint/types': 6.11.0 '@typescript-eslint/typescript-estree': 6.11.0(typescript@5.3.3) '@typescript-eslint/visitor-keys': 6.11.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) eslint: 8.53.0 typescript: 5.3.3 transitivePeerDependencies: @@ -8044,7 +8044,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 6.11.0(typescript@5.3.3) '@typescript-eslint/utils': 6.11.0(eslint@8.53.0)(typescript@5.3.3) - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) eslint: 8.53.0 ts-api-utils: 1.0.1(typescript@5.3.3) typescript: 5.3.3 @@ -8093,7 +8093,7 @@ packages: dependencies: '@typescript-eslint/types': 6.11.0 '@typescript-eslint/visitor-keys': 6.11.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 @@ -8543,7 +8543,7 @@ packages: engines: {node: '>= 6.0.0'} requiresBuild: true dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -8551,7 +8551,7 @@ packages: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: false @@ -8908,7 +8908,7 @@ packages: resolution: {integrity: sha512-TAlMYvOuwGyLK3PfBb5WKBXZmXz2fVCgv23d6zZFdle/q3gPjmxBaeuC0pY0Dzs5PWMSgfqqEZkrye19GlDTgw==} dependencies: archy: 1.0.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) fastq: 1.15.0 transitivePeerDependencies: - supports-color @@ -10307,6 +10307,10 @@ packages: '@babel/runtime': 7.23.4 dev: false + /dateformat@4.6.3: + resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} + dev: false + /dayjs@1.11.10: resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} @@ -10346,6 +10350,7 @@ packages: dependencies: ms: 2.1.2 supports-color: 5.5.0 + dev: true /debug@4.3.4(supports-color@8.1.1): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} @@ -10358,7 +10363,6 @@ packages: dependencies: ms: 2.1.2 supports-color: 8.1.1 - dev: true /decamelize-keys@1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} @@ -10566,7 +10570,7 @@ packages: hasBin: true dependencies: address: 1.2.2 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true @@ -10896,7 +10900,7 @@ packages: peerDependencies: esbuild: '>=0.12 <1' dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) esbuild: 0.18.20 transitivePeerDependencies: - supports-color @@ -11205,7 +11209,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -11252,7 +11256,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -11645,7 +11649,7 @@ packages: fast-json-stringify: 5.8.0 find-my-way: 7.7.0 light-my-request: 5.11.0 - pino: 8.17.0 + pino: 8.19.0 process-warning: 3.0.0 proxy-addr: 2.0.7 rfdc: 1.3.0 @@ -11875,7 +11879,7 @@ packages: debug: optional: true dependencies: - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -12419,6 +12423,7 @@ packages: /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} + dev: true /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} @@ -12581,7 +12586,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: false @@ -12641,7 +12646,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -12650,7 +12655,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: false @@ -12812,7 +12817,7 @@ packages: dependencies: '@ioredis/commands': 1.2.0 cluster-key-slot: 1.1.2 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) denque: 2.1.0 lodash.defaults: 4.2.0 lodash.isarguments: 3.1.0 @@ -13737,6 +13742,11 @@ packages: '@sideway/pinpoint': 2.0.0 dev: true + /joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + dev: false + /jpeg-js@0.3.7: resolution: {integrity: sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==} dev: false @@ -16069,8 +16079,8 @@ packages: resolution: {integrity: sha512-KO0m2f1HkrPe9S0ldjx7za9BJjeHqBku5Ch8JyxETxT8dEFGz1PwgrHaOQupVYitpzbFSYm7nnljxD8dik2c+g==} dev: false - /pino@8.17.2: - resolution: {integrity: sha512-LA6qKgeDMLr2ux2y/YiUt47EfgQ+S9LznBWOJdN3q1dx2sv0ziDLUBeVpyVv17TEcGCBuWf0zNtg3M5m1NhhWQ==} + /pino@8.19.0: + resolution: {integrity: sha512-oswmokxkav9bADfJ2ifrvfHUwad6MLp73Uat0IkQWY3iAw5xTRoznXbXksZs8oaOUMpmhVWD+PZogNzllWpJaA==} hasBin: true dependencies: atomic-sleep: 1.0.0 @@ -17920,7 +17930,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) socks: 2.7.1 transitivePeerDependencies: - supports-color @@ -18074,7 +18084,7 @@ packages: arg: 5.0.2 bluebird: 3.7.2 check-more-types: 2.24.0 - debug: 4.3.4(supports-color@5.5.0) + debug: 4.3.4(supports-color@8.1.1) execa: 5.1.1 lazy-ass: 1.6.0 ps-tree: 1.2.0 @@ -18331,6 +18341,7 @@ packages: engines: {node: '>=4'} dependencies: has-flag: 3.0.0 + dev: true /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} @@ -19475,6 +19486,10 @@ packages: resolution: {integrity: sha512-6bnLkn8O0JJyiFSIF0EfCogzeqNXpnjJ0vW/SZzNHfe6sPx30lTtTXlE5TFs2qhJlAtDFybStVNpL73cPe3OMQ==} dev: true + /vue-component-type-helpers@2.0.4: + resolution: {integrity: sha512-IFZ8rjfV1zWf1LOMPfmMaHe28zZfo5w2NyZxCqeqLGT3CGur0Y9+R3/bvX400tqVukuzf8mLw2fOvGTyXKPWjg==} + dev: true + /vue-demi@0.14.7(vue@3.4.21): resolution: {integrity: sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==} engines: {node: '>=12'} From 198d38431a28ac74be9fd560d0dd4bf5907897c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=BE=E3=81=A3=E3=81=A1=E3=82=83=E3=81=A8=E3=83=BC?= =?UTF-8?q?=E3=81=AB=E3=82=85?= <17376330+u1-liquid@users.noreply.github.com> Date: Sat, 10 Feb 2024 00:14:44 +0900 Subject: [PATCH 11/23] =?UTF-8?q?spec(backend):=20severity=E3=81=AE?= =?UTF-8?q?=E3=83=A9=E3=83=99=E3=83=AB=E3=82=92JSON=E5=BD=A2=E5=BC=8F?= =?UTF-8?q?=E3=81=AE=E3=83=AD=E3=82=B0=E3=81=AB=E8=BF=BD=E5=8A=A0=20(Missk?= =?UTF-8?q?eyIO#425)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/backend/src/logger.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/backend/src/logger.ts b/packages/backend/src/logger.ts index 1235e695d8..719a9f701f 100644 --- a/packages/backend/src/logger.ts +++ b/packages/backend/src/logger.ts @@ -31,6 +31,9 @@ export default class Logger { timestamp: envOption.withLogTime || envOption.logJson ? pino.stdTimeFunctions.isoTime : false, messageKey: 'message', errorKey: 'error', + formatters: { + level: (label, number) => ({ severity: label, level: number }), + }, mixin: () => ({ cluster: cluster.isPrimary ? 'primary' : `worker#${cluster.worker!.id}` }), transport: !envOption.logJson ? { target: 'pino-pretty', From 8e55285e48ade948ca0206af51c62ba9c14e18b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=BE=E3=81=A3=E3=81=A1=E3=82=83=E3=81=A8=E3=83=BC?= =?UTF-8?q?=E3=81=AB=E3=82=85?= <17376330+u1-liquid@users.noreply.github.com> Date: Sun, 11 Feb 2024 03:04:11 +0900 Subject: [PATCH 12/23] =?UTF-8?q?chore(logging):=20`severity`=E3=83=95?= =?UTF-8?q?=E3=82=A3=E3=83=BC=E3=83=AB=E3=83=89=E3=81=8C=E3=83=AD=E3=82=B0?= =?UTF-8?q?=E3=81=AB=E5=87=BA=E3=81=A6=E3=81=8F=E3=82=8B=E5=95=8F=E9=A1=8C?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3=20(MisskeyIO#431)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/backend/src/logger.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backend/src/logger.ts b/packages/backend/src/logger.ts index 719a9f701f..34b5368516 100644 --- a/packages/backend/src/logger.ts +++ b/packages/backend/src/logger.ts @@ -43,7 +43,7 @@ export default class Logger { timestampKey: 'time', messageKey: 'message', errorLikeObjectKeys: ['e', 'err', 'error'], - ignore: 'pid,hostname,cluster,important', + ignore: 'severity,pid,hostname,cluster,important', messageFormat: '@{cluster} | {message}', }, } : undefined, From 1f79cd1760e358ba0f38575b8c426979566d8e53 Mon Sep 17 00:00:00 2001 From: tamaina Date: Mon, 4 Mar 2024 13:03:41 +0000 Subject: [PATCH 13/23] :art: --- packages/backend/src/postgres.ts | 2 +- .../src/queue/QueueProcessorService.ts | 28 +++++++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/backend/src/postgres.ts b/packages/backend/src/postgres.ts index 9d61385ffd..4685f0ed0e 100644 --- a/packages/backend/src/postgres.ts +++ b/packages/backend/src/postgres.ts @@ -100,7 +100,7 @@ class MyCustomLogger implements Logger { @bindThis public logQuery(query: string, parameters?: any[]) { - sqlLogger.info(this.highlight(query)); + sqlLogger.debug(this.highlight(query)); } @bindThis diff --git a/packages/backend/src/queue/QueueProcessorService.ts b/packages/backend/src/queue/QueueProcessorService.ts index 7996e94830..16c5d0f365 100644 --- a/packages/backend/src/queue/QueueProcessorService.ts +++ b/packages/backend/src/queue/QueueProcessorService.ts @@ -151,8 +151,8 @@ export class QueueProcessorService implements OnApplicationShutdown { this.systemQueueWorker .on('active', (job) => systemLogger.debug(`active id=${job.id}`)) .on('completed', (job, result) => systemLogger.debug(`completed(${result}) id=${job.id}`)) - .on('failed', (job, err) => systemLogger.warn(`failed(${err.message}) id=${job ? job.id : '-'}`, { e: renderError(err), data: job?.data })) - .on('error', (err: Error) => systemLogger.error(`error`, { e: renderError(err) })) + .on('failed', (job, err) => systemLogger.warn(`failed(${err.message}) id=${job ? job.id : '-'}`, { err: renderError(err), data: job?.data })) + .on('error', (err: Error) => systemLogger.error(`error`, { err: renderError(err) })) .on('stalled', (jobId) => systemLogger.warn(`stalled id=${jobId}`)); //#endregion @@ -190,8 +190,8 @@ export class QueueProcessorService implements OnApplicationShutdown { this.dbQueueWorker .on('active', (job) => dbLogger.debug(`active id=${job.id}`)) .on('completed', (job, result) => dbLogger.debug(`completed(${result}) id=${job.id}`)) - .on('failed', (job, err) => dbLogger.warn(`failed(${err.message}) id=${job ? job.id : '-'}`, { e: renderError(err), job })) - .on('error', (err: Error) => dbLogger.error('error', { e: renderError(err) })) + .on('failed', (job, err) => dbLogger.warn(`failed(${err.message}) id=${job ? job.id : '-'}`, { err: renderError(err), job })) + .on('error', (err: Error) => dbLogger.error('error', { err: renderError(err) })) .on('stalled', (jobId) => dbLogger.warn(`stalled id=${jobId}`)); //#endregion @@ -214,8 +214,8 @@ export class QueueProcessorService implements OnApplicationShutdown { this.deliverQueueWorker .on('active', (job) => deliverLogger.debug(`active ${getJobInfo(job, true)} to=${job.data.to}`)) .on('completed', (job, result) => deliverLogger.debug(`completed(${result}) ${getJobInfo(job, true)} to=${job.data.to}`)) - .on('failed', (job, err) => deliverLogger.warn(`failed(${err.message}) ${getJobInfo(job)} id=${job ? job.id : '-'} to=${job?.data.to}`, { e: renderError(err), data: job?.data })) - .on('error', (err: Error) => deliverLogger.error('error', { e: renderError(err) })) + .on('failed', (job, err) => deliverLogger.warn(`failed(${err.message}) ${getJobInfo(job)} id=${job ? job.id : '-'} to=${job?.data.to}`, { err: renderError(err), data: job?.data })) + .on('error', (err: Error) => deliverLogger.error('error', { err: renderError(err) })) .on('stalled', (jobId) => deliverLogger.warn(`stalled id=${jobId}`)); //#endregion @@ -240,9 +240,9 @@ export class QueueProcessorService implements OnApplicationShutdown { .on('completed', (job, result) => inboxLogger.debug(`completed(${result}) ${getJobInfo(job, true)}`)) .on('failed', (job, err) => inboxLogger.warn( `failed(${err.message}) ${getJobInfo(job)} activity=${job ? (job.data.activity ? job.data.activity.id : 'none') : '-'}`, - { data: job?.data, e: renderError(err) } + { data: job?.data, err: renderError(err) } )) - .on('error', (err: Error) => inboxLogger.error('error', { e: renderError(err) })) + .on('error', (err: Error) => inboxLogger.error('error', { err: renderError(err) })) .on('stalled', (jobId) => inboxLogger.warn(`stalled id=${jobId}`)); //#endregion @@ -265,8 +265,8 @@ export class QueueProcessorService implements OnApplicationShutdown { this.webhookDeliverQueueWorker .on('active', (job) => webhookLogger.debug(`active ${getJobInfo(job, true)} to=${job.data.to}`)) .on('completed', (job, result) => webhookLogger.debug(`completed(${result}) ${getJobInfo(job, true)} to=${job.data.to}`)) - .on('failed', (job, err) => webhookLogger.warn(`failed(${err.message}) ${getJobInfo(job)} to=${job ? job.data.to : '-'}`, { e: renderError(err) })) - .on('error', (err: Error) => webhookLogger.error('error', { e: renderError(err) })) + .on('failed', (job, err) => webhookLogger.warn(`failed(${err.message}) ${getJobInfo(job)} to=${job ? job.data.to : '-'}`, { err: renderError(err) })) + .on('error', (err: Error) => webhookLogger.error('error', { err: renderError(err) })) .on('stalled', (jobId) => webhookLogger.warn(`stalled id=${jobId}`)); //#endregion @@ -294,8 +294,8 @@ export class QueueProcessorService implements OnApplicationShutdown { this.relationshipQueueWorker .on('active', (job) => relationshipLogger.debug(`active id=${job.id}`)) .on('completed', (job, result) => relationshipLogger.debug(`completed(${result}) id=${job.id}`)) - .on('failed', (job, err) => relationshipLogger.warn(`failed(${err.message}) id=${job ? job.id : '-'}`, { e: renderError(err), job })) - .on('error', (err: Error) => relationshipLogger.error('error', { e: renderError(err) })) + .on('failed', (job, err) => relationshipLogger.warn(`failed(${err.message}) id=${job ? job.id : '-'}`, { err: renderError(err), job })) + .on('error', (err: Error) => relationshipLogger.error('error', { err: renderError(err) })) .on('stalled', (jobId) => relationshipLogger.warn(`stalled id=${jobId}`)); //#endregion @@ -317,8 +317,8 @@ export class QueueProcessorService implements OnApplicationShutdown { this.objectStorageQueueWorker .on('active', (job) => objectStorageLogger.debug(`active id=${job.id}`)) .on('completed', (job, result) => objectStorageLogger.debug(`completed(${result}) id=${job.id}`)) - .on('failed', (job, err) => objectStorageLogger.warn(`failed(${err.message}) id=${job ? job.id : '-'}`, { e: renderError(err), job })) - .on('error', (err: Error) => objectStorageLogger.error('error', { e: renderError(err) })) + .on('failed', (job, err) => objectStorageLogger.warn(`failed(${err.message}) id=${job ? job.id : '-'}`, { err: renderError(err), job })) + .on('error', (err: Error) => objectStorageLogger.error('error', { err: renderError(err) })) .on('stalled', (jobId) => objectStorageLogger.warn(`stalled id=${jobId}`)); //#endregion From 7ce4a269707ca1d02dfd9446d4a3ba132e2ea1ba Mon Sep 17 00:00:00 2001 From: tamaina Date: Mon, 4 Mar 2024 13:43:51 +0000 Subject: [PATCH 14/23] force show stack --- packages/backend/src/logger.ts | 4 +++- packages/backend/src/queue/QueueProcessorService.ts | 8 +++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/backend/src/logger.ts b/packages/backend/src/logger.ts index 34b5368516..fccda73bf0 100644 --- a/packages/backend/src/logger.ts +++ b/packages/backend/src/logger.ts @@ -38,11 +38,13 @@ export default class Logger { transport: !envOption.logJson ? { target: 'pino-pretty', options: { + colorize: true, + colorizeObjects: true, levelFirst: false, levelKey: 'level', timestampKey: 'time', messageKey: 'message', - errorLikeObjectKeys: ['e', 'err', 'error'], + errorLikeObjectKeys: ['e', 'err', 'error', 'context.e', 'context.err', 'context.error'], ignore: 'severity,pid,hostname,cluster,important', messageFormat: '@{cluster} | {message}', }, diff --git a/packages/backend/src/queue/QueueProcessorService.ts b/packages/backend/src/queue/QueueProcessorService.ts index 16c5d0f365..dd151af402 100644 --- a/packages/backend/src/queue/QueueProcessorService.ts +++ b/packages/backend/src/queue/QueueProcessorService.ts @@ -70,7 +70,13 @@ function getJobInfo(job: Bull.Job | undefined, increment = false): string { function renderError(e: Error): any { if (e) { // 何故かeがundefinedで来ることがある - return e; + return { + ...Object.getOwnPropertyNames(e).reduce((acc, key) => { + //@ts-expect-error Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'Error'. + acc[key] = e[key]; + return acc; + }, {} as Record), + }; } else { return { stack: '?', From 493829b3eedba32aa965f70f6315acd6e63d24af Mon Sep 17 00:00:00 2001 From: tamaina Date: Mon, 4 Mar 2024 13:44:21 +0000 Subject: [PATCH 15/23] truncate stack --- packages/backend/src/queue/QueueProcessorService.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/backend/src/queue/QueueProcessorService.ts b/packages/backend/src/queue/QueueProcessorService.ts index dd151af402..7c81307a7c 100644 --- a/packages/backend/src/queue/QueueProcessorService.ts +++ b/packages/backend/src/queue/QueueProcessorService.ts @@ -76,6 +76,7 @@ function renderError(e: Error): any { acc[key] = e[key]; return acc; }, {} as Record), + stack: e.stack?.split('\n').map(s => s.trim()), }; } else { return { From b42577e3ad699ae26095a8c782596705fe4fa08b Mon Sep 17 00:00:00 2001 From: tamaina Date: Mon, 4 Mar 2024 13:46:51 +0000 Subject: [PATCH 16/23] =?UTF-8?q?trim=E3=81=AF=E3=82=84=E3=82=81=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/backend/src/queue/QueueProcessorService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backend/src/queue/QueueProcessorService.ts b/packages/backend/src/queue/QueueProcessorService.ts index 7c81307a7c..e547144cc9 100644 --- a/packages/backend/src/queue/QueueProcessorService.ts +++ b/packages/backend/src/queue/QueueProcessorService.ts @@ -76,7 +76,7 @@ function renderError(e: Error): any { acc[key] = e[key]; return acc; }, {} as Record), - stack: e.stack?.split('\n').map(s => s.trim()), + stack: e.stack?.split('\n'), }; } else { return { From 1433a7aecf5032257daf9db55d28d40c0b94949a Mon Sep 17 00:00:00 2001 From: tamaina Date: Mon, 4 Mar 2024 13:49:30 +0000 Subject: [PATCH 17/23] err, data --- packages/backend/src/queue/QueueProcessorService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backend/src/queue/QueueProcessorService.ts b/packages/backend/src/queue/QueueProcessorService.ts index e547144cc9..5107910c46 100644 --- a/packages/backend/src/queue/QueueProcessorService.ts +++ b/packages/backend/src/queue/QueueProcessorService.ts @@ -247,7 +247,7 @@ export class QueueProcessorService implements OnApplicationShutdown { .on('completed', (job, result) => inboxLogger.debug(`completed(${result}) ${getJobInfo(job, true)}`)) .on('failed', (job, err) => inboxLogger.warn( `failed(${err.message}) ${getJobInfo(job)} activity=${job ? (job.data.activity ? job.data.activity.id : 'none') : '-'}`, - { data: job?.data, err: renderError(err) } + { err: renderError(err), data: job?.data } )) .on('error', (err: Error) => inboxLogger.error('error', { err: renderError(err) })) .on('stalled', (jobId) => inboxLogger.warn(`stalled id=${jobId}`)); From 78238d427a04d64dc24a2df41ac61578dd11aa6f Mon Sep 17 00:00:00 2001 From: tamaina Date: Mon, 4 Mar 2024 14:04:10 +0000 Subject: [PATCH 18/23] stringify inbox data --- packages/backend/src/queue/QueueProcessorService.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/backend/src/queue/QueueProcessorService.ts b/packages/backend/src/queue/QueueProcessorService.ts index 5107910c46..87dcd26242 100644 --- a/packages/backend/src/queue/QueueProcessorService.ts +++ b/packages/backend/src/queue/QueueProcessorService.ts @@ -41,6 +41,7 @@ import { CleanProcessorService } from './processors/CleanProcessorService.js'; import { AggregateRetentionProcessorService } from './processors/AggregateRetentionProcessorService.js'; import { QueueLoggerService } from './QueueLoggerService.js'; import { QUEUE, baseQueueOptions } from './const.js'; +import { InboxJobData } from './types.js'; // ref. https://github.com/misskey-dev/misskey/pull/7635#issue-971097019 function httpRelatedBackoff(attemptsMade: number) { @@ -93,7 +94,7 @@ export class QueueProcessorService implements OnApplicationShutdown { private systemQueueWorker: Bull.Worker; private dbQueueWorker: Bull.Worker; private deliverQueueWorker: Bull.Worker; - private inboxQueueWorker: Bull.Worker; + private inboxQueueWorker: Bull.Worker; private webhookDeliverQueueWorker: Bull.Worker; private relationshipQueueWorker: Bull.Worker; private objectStorageQueueWorker: Bull.Worker; @@ -247,7 +248,7 @@ export class QueueProcessorService implements OnApplicationShutdown { .on('completed', (job, result) => inboxLogger.debug(`completed(${result}) ${getJobInfo(job, true)}`)) .on('failed', (job, err) => inboxLogger.warn( `failed(${err.message}) ${getJobInfo(job)} activity=${job ? (job.data.activity ? job.data.activity.id : 'none') : '-'}`, - { err: renderError(err), data: job?.data } + { err: renderError(err), data: job ? { activity: JSON.stringify(job.data.activity), signature: JSON.stringify(job.data.signature) } : null } )) .on('error', (err: Error) => inboxLogger.error('error', { err: renderError(err) })) .on('stalled', (jobId) => inboxLogger.warn(`stalled id=${jobId}`)); From 973d18a5523f81629b5eaa5c1187c601ab0542e5 Mon Sep 17 00:00:00 2001 From: tamaina Date: Mon, 4 Mar 2024 14:16:14 +0000 Subject: [PATCH 19/23] !envOption.logJson --- packages/backend/src/queue/QueueProcessorService.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/backend/src/queue/QueueProcessorService.ts b/packages/backend/src/queue/QueueProcessorService.ts index 87dcd26242..ab3faf4535 100644 --- a/packages/backend/src/queue/QueueProcessorService.ts +++ b/packages/backend/src/queue/QueueProcessorService.ts @@ -9,6 +9,7 @@ import type { Config } from '@/config.js'; import { DI } from '@/di-symbols.js'; import type Logger from '@/logger.js'; import { bindThis } from '@/decorators.js'; +import { envOption } from '@/env.js'; import { WebhookDeliverProcessorService } from './processors/WebhookDeliverProcessorService.js'; import { EndedPollNotificationProcessorService } from './processors/EndedPollNotificationProcessorService.js'; import { DeliverProcessorService } from './processors/DeliverProcessorService.js'; @@ -41,7 +42,7 @@ import { CleanProcessorService } from './processors/CleanProcessorService.js'; import { AggregateRetentionProcessorService } from './processors/AggregateRetentionProcessorService.js'; import { QueueLoggerService } from './QueueLoggerService.js'; import { QUEUE, baseQueueOptions } from './const.js'; -import { InboxJobData } from './types.js'; +import type { InboxJobData } from './types.js'; // ref. https://github.com/misskey-dev/misskey/pull/7635#issue-971097019 function httpRelatedBackoff(attemptsMade: number) { @@ -160,7 +161,7 @@ export class QueueProcessorService implements OnApplicationShutdown { .on('active', (job) => systemLogger.debug(`active id=${job.id}`)) .on('completed', (job, result) => systemLogger.debug(`completed(${result}) id=${job.id}`)) .on('failed', (job, err) => systemLogger.warn(`failed(${err.message}) id=${job ? job.id : '-'}`, { err: renderError(err), data: job?.data })) - .on('error', (err: Error) => systemLogger.error(`error`, { err: renderError(err) })) + .on('error', (err: Error) => systemLogger.error('error', { err: renderError(err) })) .on('stalled', (jobId) => systemLogger.warn(`stalled id=${jobId}`)); //#endregion @@ -248,7 +249,7 @@ export class QueueProcessorService implements OnApplicationShutdown { .on('completed', (job, result) => inboxLogger.debug(`completed(${result}) ${getJobInfo(job, true)}`)) .on('failed', (job, err) => inboxLogger.warn( `failed(${err.message}) ${getJobInfo(job)} activity=${job ? (job.data.activity ? job.data.activity.id : 'none') : '-'}`, - { err: renderError(err), data: job ? { activity: JSON.stringify(job.data.activity), signature: JSON.stringify(job.data.signature) } : null } + { err: renderError(err), data: job && !envOption.logJson ? { activity: JSON.stringify(job.data.activity), signature: JSON.stringify(job.data.signature) } : null }, )) .on('error', (err: Error) => inboxLogger.error('error', { err: renderError(err) })) .on('stalled', (jobId) => inboxLogger.warn(`stalled id=${jobId}`)); From 40781f56e71a48f810c9c6af3c3594bfbb0b1c88 Mon Sep 17 00:00:00 2001 From: tamaina Date: Mon, 4 Mar 2024 14:17:27 +0000 Subject: [PATCH 20/23] fix? --- packages/backend/src/queue/QueueProcessorService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backend/src/queue/QueueProcessorService.ts b/packages/backend/src/queue/QueueProcessorService.ts index ab3faf4535..9fe378f3e5 100644 --- a/packages/backend/src/queue/QueueProcessorService.ts +++ b/packages/backend/src/queue/QueueProcessorService.ts @@ -249,7 +249,7 @@ export class QueueProcessorService implements OnApplicationShutdown { .on('completed', (job, result) => inboxLogger.debug(`completed(${result}) ${getJobInfo(job, true)}`)) .on('failed', (job, err) => inboxLogger.warn( `failed(${err.message}) ${getJobInfo(job)} activity=${job ? (job.data.activity ? job.data.activity.id : 'none') : '-'}`, - { err: renderError(err), data: job && !envOption.logJson ? { activity: JSON.stringify(job.data.activity), signature: JSON.stringify(job.data.signature) } : null }, + { err: renderError(err), data: (job && !envOption.logJson) ? { activity: JSON.stringify(job.data.activity), signature: JSON.stringify(job.data.signature) } : null }, )) .on('error', (err: Error) => inboxLogger.error('error', { err: renderError(err) })) .on('stalled', (jobId) => inboxLogger.warn(`stalled id=${jobId}`)); From 285c8ab334ec75f279866b5544bd5eb773bb7ef6 Mon Sep 17 00:00:00 2001 From: tamaina Date: Tue, 5 Mar 2024 18:24:46 +0000 Subject: [PATCH 21/23] =?UTF-8?q?logger.ts=E3=82=92=E6=88=BB=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/backend/src/logger.ts | 183 +++++++++++++++++---------------- 1 file changed, 95 insertions(+), 88 deletions(-) diff --git a/packages/backend/src/logger.ts b/packages/backend/src/logger.ts index fccda73bf0..a29500eabc 100644 --- a/packages/backend/src/logger.ts +++ b/packages/backend/src/logger.ts @@ -4,118 +4,125 @@ */ import cluster from 'node:cluster'; -import { pino } from 'pino'; +import chalk from 'chalk'; +import { default as convertColor } from 'color-convert'; +import { format as dateFormat } from 'date-fns'; import { bindThis } from '@/decorators.js'; import { envOption } from './env.js'; import type { KEYWORD } from 'color-convert/conversions.js'; +type Context = { + name: string; + color?: KEYWORD; +}; + +type Level = 'error' | 'success' | 'warning' | 'debug' | 'info'; + // eslint-disable-next-line import/no-default-export export default class Logger { - private readonly domain: string; - private logger: pino.Logger; + private context: Context; + private parentLogger: Logger | null = null; + private store: boolean; - constructor(domain: string, _color?: KEYWORD, _store = true, parentLogger?: Logger) { - if (parentLogger) { - this.domain = parentLogger.domain + '.' + domain; - } else { - this.domain = domain; + constructor(context: string, color?: KEYWORD, store = true) { + this.context = { + name: context, + color: color, + }; + this.store = store; + } + + @bindThis + public createSubLogger(context: string, color?: KEYWORD, store = true): Logger { + const logger = new Logger(context, color, store); + logger.parentLogger = this; + return logger; + } + + @bindThis + private log(level: Level, message: string, data?: Record | null, important = false, subContexts: Context[] = [], store = true): void { + if (envOption.quiet) return; + if (!this.store) store = false; + if (level === 'debug') store = false; + + if (this.parentLogger) { + this.parentLogger.log(level, message, data, important, [this.context].concat(subContexts), store); + return; } - this.logger = pino({ - name: this.domain, - level: envOption.verbose ? 'debug' : 'info', - depthLimit: 8, - edgeLimit: 128, - redact: ['context.password', 'context.token'], - enabled: !envOption.quiet || envOption.logJson, - timestamp: envOption.withLogTime || envOption.logJson ? pino.stdTimeFunctions.isoTime : false, - messageKey: 'message', - errorKey: 'error', - formatters: { - level: (label, number) => ({ severity: label, level: number }), - }, - mixin: () => ({ cluster: cluster.isPrimary ? 'primary' : `worker#${cluster.worker!.id}` }), - transport: !envOption.logJson ? { - target: 'pino-pretty', - options: { - colorize: true, - colorizeObjects: true, - levelFirst: false, - levelKey: 'level', - timestampKey: 'time', - messageKey: 'message', - errorLikeObjectKeys: ['e', 'err', 'error', 'context.e', 'context.err', 'context.error'], - ignore: 'severity,pid,hostname,cluster,important', - messageFormat: '@{cluster} | {message}', - }, - } : undefined, - }); + if (envOption.logJson) { + console.log(JSON.stringify({ + time: new Date().toISOString(), + level: level, + message: message, + data: data, + important: important, + context: [this.context].concat(subContexts).join('.'), + cluster: cluster.isPrimary ? 'primary' : `worker-${cluster.worker!.id}`, + })); + return; + } + + const time = dateFormat(new Date(), 'HH:mm:ss'); + const worker = cluster.isPrimary ? '*' : cluster.worker!.id; + const l = + level === 'error' ? important ? chalk.bgRed.white('ERR ') : chalk.red('ERR ') : + level === 'warning' ? chalk.yellow('WARN') : + level === 'success' ? important ? chalk.bgGreen.white('DONE') : chalk.green('DONE') : + level === 'debug' ? chalk.gray('VERB') : + level === 'info' ? chalk.blue('INFO') : + null; + const contexts = [this.context].concat(subContexts).map(d => d.color ? chalk.rgb(...convertColor.keyword.rgb(d.color))(d.name) : chalk.white(d.name)); + const m = + level === 'error' ? chalk.red(message) : + level === 'warning' ? chalk.yellow(message) : + level === 'success' ? chalk.green(message) : + level === 'debug' ? chalk.gray(message) : + level === 'info' ? message : + null; + + let log = `${l} ${worker}\t[${contexts.join(' ')}]\t${m}`; + if (envOption.withLogTime) log = chalk.gray(time) + ' ' + log; + + const args: unknown[] = [important ? chalk.bold(log) : log]; + if (data != null) { + args.push(data); + } + console.log(...args); } @bindThis - public createSubLogger(domain: string, _color?: KEYWORD, _store = true): Logger { - return new Logger(domain, undefined, false, this); - } - - @bindThis - public error(x: string | Error, context?: Record | null, important = false): void { // 実行を継続できない状況で使う - if (context === null) context = undefined; - + public error(x: string | Error, data?: Record | null, important = false): void { // 実行を継続できない状況で使う if (x instanceof Error) { - context = context ?? {}; - context.error = x; - - if (important) this.logger.fatal({ context, important }, x.toString()); - else this.logger.error({ context, important }, x.toString()); + data = data ?? {}; + data.e = x; + this.log('error', x.toString(), data, important); } else if (typeof x === 'object') { - context = context ?? {}; - context.error = context.error ?? x; - - if (important) this.logger.fatal({ context, important }, `${(x as any).message ?? (x as any).name ?? x}`); - else this.logger.error({ context, important }, `${(x as any).message ?? (x as any).name ?? x}`); + this.log('error', `${(x as any).message ?? (x as any).name ?? x}`, data, important); } else { - if (important) this.logger.fatal({ context, important }, x); - else this.logger.error({ context, important }, x); + this.log('error', `${x}`, data, important); } } @bindThis - public warn(x: string | Error, context?: Record | null, important = false): void { // 実行を継続できるが改善すべき状況で使う - if (context === null) context = undefined; + public warn(message: string, data?: Record | null, important = false): void { // 実行を継続できるが改善すべき状況で使う + this.log('warning', message, data, important); + } - if (x instanceof Error) { - context = context ?? {}; - context.error = x; + @bindThis + public succ(message: string, data?: Record | null, important = false): void { // 何かに成功した状況で使う + this.log('success', message, data, important); + } - this.logger.warn({ context, important }, x.toString()); - } else if (typeof x === 'object') { - context = context ?? {}; - context.error = context.error ?? x; - - this.logger.warn({ context, important }, `${(x as any).message ?? (x as any).name ?? x}`); - } else { - this.logger.warn({ context, important }, x); + @bindThis + public debug(message: string, data?: Record | null, important = false): void { // デバッグ用に使う(開発者に必要だが利用者に不要な情報) + if (process.env.NODE_ENV !== 'production' || envOption.verbose) { + this.log('debug', message, data, important); } } @bindThis - public succ(message: string, context?: Record | null, important = false): void { // 何かに成功した状況で使う - if (context === null) context = undefined; - - this.logger.trace({ context, important }, message); - } - - @bindThis - public debug(message: string, context?: Record | null, important = false): void { // デバッグ用に使う(開発者に必要だが利用者に不要な情報) - if (context === null) context = undefined; - - this.logger.debug({ context, important }, message); - } - - @bindThis - public info(message: string, context?: Record | null, important = false): void { // それ以外 - if (context === null) context = undefined; - - this.logger.info({ context, important }, message); + public info(message: string, data?: Record | null, important = false): void { // それ以外 + this.log('info', message, data, important); } } From a84cbeb1559ccef4ead92142997885938838a81b Mon Sep 17 00:00:00 2001 From: tamaina Date: Tue, 5 Mar 2024 18:26:45 +0000 Subject: [PATCH 22/23] remove pino --- packages/backend/package.json | 2 -- pnpm-lock.yaml | 51 ++++------------------------------- 2 files changed, 5 insertions(+), 48 deletions(-) diff --git a/packages/backend/package.json b/packages/backend/package.json index 6a3f0f18a8..8680610441 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -148,8 +148,6 @@ "otpauth": "9.2.2", "parse5": "7.1.2", "pg": "8.11.3", - "pino": "^8.19.0", - "pino-pretty": "^10.3.1", "pkce-challenge": "4.1.0", "probe-image-size": "7.2.3", "promise-limit": "2.7.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fdf167ca69..a113ab8eac 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -317,12 +317,6 @@ importers: pg: specifier: 8.11.3 version: 8.11.3 - pino: - specifier: ^8.19.0 - version: 8.19.0 - pino-pretty: - specifier: ^10.3.1 - version: 10.3.1 pkce-challenge: specifier: 4.1.0 version: 4.1.0 @@ -6652,7 +6646,7 @@ packages: ts-dedent: 2.2.0 type-fest: 2.19.0 vue: 3.4.21(typescript@5.3.3) - vue-component-type-helpers: 2.0.4 + vue-component-type-helpers: 2.0.5 transitivePeerDependencies: - encoding - supports-color @@ -9843,6 +9837,7 @@ packages: /colorette@2.0.19: resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} + dev: true /colors@1.2.5: resolution: {integrity: sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==} @@ -10307,10 +10302,6 @@ packages: '@babel/runtime': 7.23.4 dev: false - /dateformat@4.6.3: - resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} - dev: false - /dayjs@1.11.10: resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} @@ -11556,10 +11547,6 @@ packages: resolution: {integrity: sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==} dev: false - /fast-copy@3.0.1: - resolution: {integrity: sha512-Knr7NOtK3HWRYGtHoJrjkaWepqT8thIVGAwt0p0aUs1zqkAzXZV4vo9fFNwyb5fcqK1GKYFYxldQdIDVKhUAfA==} - dev: false - /fast-decode-uri-component@1.0.1: resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} dev: false @@ -12502,10 +12489,6 @@ packages: resolution: {integrity: sha512-EWGTfnTqAO2L/j5HZgoM/3z82L7necsJ0pO9Tp0X1wil3PDLrkypTBRgVO2ExehEEvUycejZD3FuRaXpZZc3kw==} dev: true - /help-me@5.0.0: - resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} - dev: false - /highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} dev: false @@ -13742,11 +13725,6 @@ packages: '@sideway/pinpoint': 2.0.0 dev: true - /joycon@3.1.1: - resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} - engines: {node: '>=10'} - dev: false - /jpeg-js@0.3.7: resolution: {integrity: sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==} dev: false @@ -16055,26 +16033,6 @@ packages: split2: 4.1.0 dev: false - /pino-pretty@10.3.1: - resolution: {integrity: sha512-az8JbIYeN/1iLj2t0jR9DV48/LQ3RC6hZPpapKPkb84Q+yTidMCpgWxIT3N0flnBDilyBQ1luWNpOeJptjdp/g==} - hasBin: true - dependencies: - colorette: 2.0.19 - dateformat: 4.6.3 - fast-copy: 3.0.1 - fast-safe-stringify: 2.1.1 - help-me: 5.0.0 - joycon: 3.1.1 - minimist: 1.2.8 - on-exit-leak-free: 2.1.0 - pino-abstract-transport: 1.1.0 - pump: 3.0.0 - readable-stream: 4.3.0 - secure-json-parse: 2.7.0 - sonic-boom: 3.7.0 - strip-json-comments: 3.1.1 - dev: false - /pino-std-serializers@6.1.0: resolution: {integrity: sha512-KO0m2f1HkrPe9S0ldjx7za9BJjeHqBku5Ch8JyxETxT8dEFGz1PwgrHaOQupVYitpzbFSYm7nnljxD8dik2c+g==} dev: false @@ -18301,6 +18259,7 @@ packages: /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + dev: true /strip-literal@1.3.0: resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} @@ -19486,8 +19445,8 @@ packages: resolution: {integrity: sha512-6bnLkn8O0JJyiFSIF0EfCogzeqNXpnjJ0vW/SZzNHfe6sPx30lTtTXlE5TFs2qhJlAtDFybStVNpL73cPe3OMQ==} dev: true - /vue-component-type-helpers@2.0.4: - resolution: {integrity: sha512-IFZ8rjfV1zWf1LOMPfmMaHe28zZfo5w2NyZxCqeqLGT3CGur0Y9+R3/bvX400tqVukuzf8mLw2fOvGTyXKPWjg==} + /vue-component-type-helpers@2.0.5: + resolution: {integrity: sha512-v9N4ufDSnd8YHcDq/vURPjxDyBVak5ZVAQ6aGNIrf7ZAj/VxRKpLZXFHEaqt9yHkWi0/TZp76Jmf8yNJxDQi4g==} dev: true /vue-demi@0.14.7(vue@3.4.21): From a7ec9241abf82f0e501b51e9ce6069daf756740e Mon Sep 17 00:00:00 2001 From: tamaina Date: Tue, 5 Mar 2024 18:37:19 +0000 Subject: [PATCH 23/23] =?UTF-8?q?stack=E3=81=84=E3=81=98=E3=82=89=E3=81=AA?= =?UTF-8?q?=E3=81=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/backend/src/queue/QueueProcessorService.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/backend/src/queue/QueueProcessorService.ts b/packages/backend/src/queue/QueueProcessorService.ts index 9fe378f3e5..5dfa05ed84 100644 --- a/packages/backend/src/queue/QueueProcessorService.ts +++ b/packages/backend/src/queue/QueueProcessorService.ts @@ -78,7 +78,6 @@ function renderError(e: Error): any { acc[key] = e[key]; return acc; }, {} as Record), - stack: e.stack?.split('\n'), }; } else { return {