diff --git a/apps/api/package.json b/apps/api/package.json index 1debcc8a..665019f0 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -18,6 +18,7 @@ "@fastify/websocket": "^8.3.1", "@openpanel/common": "workspace:*", "@openpanel/db": "workspace:*", + "@openpanel/logger": "workspace:*", "@openpanel/queue": "workspace:*", "@openpanel/redis": "workspace:*", "@openpanel/trpc": "workspace:*", diff --git a/apps/api/src/utils/logger.ts b/apps/api/src/utils/logger.ts index a8db73d0..d12fac85 100644 --- a/apps/api/src/utils/logger.ts +++ b/apps/api/src/utils/logger.ts @@ -1,25 +1,6 @@ -import type { TransportTargetOptions } from 'pino'; -import pino from 'pino'; +import { createLogger } from '@openpanel/logger'; -const targets: TransportTargetOptions[] = - process.env.NODE_ENV === 'production' - ? [ - { - target: '@baselime/pino-transport', - options: { baselimeApiKey: process.env.BASELIME_API_KEY }, - }, - ] - : [ - { - target: 'pino-pretty', - }, - ]; - -const transport = pino.transport({ - targets, -}); - -export const logger = pino(transport); +export const logger = createLogger({ target: 'api' }); export function logInfo(msg: string, obj?: unknown) { logger.info(obj, msg); diff --git a/apps/worker/package.json b/apps/worker/package.json index 6a4fb39a..6a9993ac 100644 --- a/apps/worker/package.json +++ b/apps/worker/package.json @@ -14,6 +14,7 @@ "@bull-board/api": "^5.13.0", "@bull-board/express": "^5.13.0", "@openpanel/common": "workspace:*", + "@openpanel/logger": "workspace:*", "@openpanel/db": "workspace:*", "@openpanel/queue": "workspace:*", "@openpanel/redis": "workspace:*", diff --git a/apps/worker/src/jobs/events.incoming-event.ts b/apps/worker/src/jobs/events.incoming-event.ts index e4c8c192..1c94f030 100644 --- a/apps/worker/src/jobs/events.incoming-event.ts +++ b/apps/worker/src/jobs/events.incoming-event.ts @@ -1,3 +1,4 @@ +import { logger } from '@/utils/logger'; import { getReferrerWithQuery, parseReferrer } from '@/utils/parse-referrer'; import { isUserAgentSet, parseUserAgent } from '@/utils/parse-user-agent'; import { isSameDomain, parsePath } from '@/utils/url'; @@ -192,15 +193,31 @@ export async function incomingEvent(job: Job) { duration, }, }); - } catch (e) { - job.log(`Failed to update duration: ${e.message}`); + } catch (error) { + logger.error( + { + error, + prevEventJobStatus: await prevEventJob + .getState() + .catch(() => 'unknown'), + }, + `Failed update delayed job` + ); } } try { await prevEventJob.promote(); - } catch (e) { - job.log(`Failed to promote job: ${e.message}`); + } catch (error) { + logger.error( + { + error, + prevEventJobStatus: await prevEventJob + .getState() + .catch(() => 'unknown'), + }, + `Failed to promote job` + ); } } } else if (payload.name !== 'screen_view') { diff --git a/apps/worker/src/utils/logger.ts b/apps/worker/src/utils/logger.ts new file mode 100644 index 00000000..db9330d7 --- /dev/null +++ b/apps/worker/src/utils/logger.ts @@ -0,0 +1,3 @@ +import { createLogger } from '@openpanel/logger'; + +export const logger = createLogger({ target: 'worker' }); diff --git a/packages/logger/index.ts b/packages/logger/index.ts new file mode 100644 index 00000000..954d3d42 --- /dev/null +++ b/packages/logger/index.ts @@ -0,0 +1,24 @@ +import type { TransportTargetOptions } from 'pino'; +import pino from 'pino'; + +export function createLogger({ target }: { target: string }) { + const targets: TransportTargetOptions[] = + process.env.NODE_ENV === 'production' + ? [ + { + target: '@baselime/pino-transport', + options: { baselimeApiKey: process.env.BASELIME_API_KEY, target }, + }, + ] + : [ + { + target: 'pino-pretty', + }, + ]; + + const transport = pino.transport({ + targets, + }); + + return pino(transport); +} diff --git a/packages/logger/package.json b/packages/logger/package.json new file mode 100644 index 00000000..fdbaf5ef --- /dev/null +++ b/packages/logger/package.json @@ -0,0 +1,32 @@ +{ + "name": "@openpanel/logger", + "version": "0.0.1", + "main": "index.ts", + "scripts": { + "lint": "eslint .", + "format": "prettier --check \"**/*.{mjs,ts,md,json}\"", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@baselime/pino-transport": "^0.1.5", + "pino": "^8.17.2", + "pino-pretty": "^10.3.1" + }, + "devDependencies": { + "@openpanel/eslint-config": "workspace:*", + "@openpanel/prettier-config": "workspace:*", + "@openpanel/tsconfig": "workspace:*", + "date-fns": "^3.3.1", + "eslint": "^8.48.0", + "prettier": "^3.0.3", + "prisma": "^5.1.1", + "typescript": "^5.2.2" + }, + "eslintConfig": { + "root": true, + "extends": [ + "@openpanel/eslint-config/base" + ] + }, + "prettier": "@openpanel/prettier-config" +} diff --git a/packages/logger/tsconfig.json b/packages/logger/tsconfig.json new file mode 100644 index 00000000..a291eef2 --- /dev/null +++ b/packages/logger/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "@openpanel/tsconfig/base.json", + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + }, + "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json" + }, + "include": ["."], + "exclude": ["node_modules"] +}