bot: fix production run (logger problem)

This commit is contained in:
vchikalkin 2025-08-26 23:03:30 +03:00
parent e182db1740
commit 73b943fefc
6 changed files with 25 additions and 23 deletions

View File

@ -1,4 +1,3 @@
import { type logger } from '@/utils/logger';
import { type AutoChatActionFlavor } from '@grammyjs/auto-chat-action'; import { type AutoChatActionFlavor } from '@grammyjs/auto-chat-action';
import { type CommandsFlavor } from '@grammyjs/commands'; import { type CommandsFlavor } from '@grammyjs/commands';
import { type ConversationFlavor } from '@grammyjs/conversations'; import { type ConversationFlavor } from '@grammyjs/conversations';
@ -8,13 +7,7 @@ import { type Context as DefaultContext, type SessionFlavor } from 'grammy';
export type Context = ConversationFlavor< export type Context = ConversationFlavor<
HydrateFlavor< HydrateFlavor<
AutoChatActionFlavor & AutoChatActionFlavor & CommandsFlavor & DefaultContext & I18nFlavor & SessionFlavor<SessionData>
CommandsFlavor &
DefaultContext &
I18nFlavor &
SessionFlavor<SessionData> & {
logger: typeof logger;
}
> >
>; >;

View File

@ -1,6 +1,7 @@
import { type Context } from '../context'; import { type Context } from '../context';
import { getUpdateInfo } from '../helpers/logging'; import { getUpdateInfo } from '../helpers/logging';
import { KEYBOARD_REMOVE } from '@/config/keyboards'; import { KEYBOARD_REMOVE } from '@/config/keyboards';
import { logger } from '@/utils/logger';
import { ERRORS } from '@repo/graphql/constants/errors'; import { ERRORS } from '@repo/graphql/constants/errors';
import { type ErrorHandler } from 'grammy'; import { type ErrorHandler } from 'grammy';
@ -11,7 +12,7 @@ export const errorHandler: ErrorHandler<Context> = async (error) => {
await ctx.reply(ctx.t(text), { ...KEYBOARD_REMOVE, parse_mode: 'HTML' }); await ctx.reply(ctx.t(text), { ...KEYBOARD_REMOVE, parse_mode: 'HTML' });
ctx.logger.error({ logger.error({
err: error.error, err: error.error,
update: getUpdateInfo(ctx), update: getUpdateInfo(ctx),
}); });

View File

@ -1,5 +1,6 @@
/* eslint-disable @typescript-eslint/no-unused-vars */ /* eslint-disable @typescript-eslint/no-unused-vars */
import { type Context } from '../context'; import { type Context } from '../context';
import { logger } from '@/utils/logger';
import { type Update } from '@grammyjs/types'; import { type Update } from '@grammyjs/types';
import { type Middleware } from 'grammy'; import { type Middleware } from 'grammy';
@ -11,7 +12,7 @@ export function getUpdateInfo(context: Context): Omit<Update, 'update_id'> {
export function logHandle(id: string): Middleware<Context> { export function logHandle(id: string): Middleware<Context> {
return (context, next) => { return (context, next) => {
context.logger.info({ logger.info({
msg: `Handle "${id}"`, msg: `Handle "${id}"`,
...(id.startsWith('unhandled') ? { update: getUpdateInfo(context) } : {}), ...(id.startsWith('unhandled') ? { update: getUpdateInfo(context) } : {}),
}); });

View File

@ -1,12 +1,13 @@
import { type Context } from '@/bot/context'; import { type Context } from '@/bot/context';
import { getUpdateInfo } from '@/bot/helpers/logging'; import { getUpdateInfo } from '@/bot/helpers/logging';
import { logger } from '@/utils/logger';
import { type Middleware } from 'grammy'; import { type Middleware } from 'grammy';
import { performance } from 'node:perf_hooks'; import { performance } from 'node:perf_hooks';
export function updateLogger(): Middleware<Context> { export function updateLogger(): Middleware<Context> {
return async (ctx, next) => { return async (ctx, next) => {
ctx.api.config.use((previous, method, payload, signal) => { ctx.api.config.use((previous, method, payload, signal) => {
ctx.logger.debug({ logger.debug({
method, method,
msg: 'Bot API call', msg: 'Bot API call',
payload, payload,
@ -15,7 +16,7 @@ export function updateLogger(): Middleware<Context> {
return previous(method, payload, signal); return previous(method, payload, signal);
}); });
ctx.logger.debug({ logger.debug({
msg: 'Update received', msg: 'Update received',
update: getUpdateInfo(ctx), update: getUpdateInfo(ctx),
}); });
@ -25,7 +26,7 @@ export function updateLogger(): Middleware<Context> {
return next(); return next();
} finally { } finally {
const endTime = performance.now(); const endTime = performance.now();
ctx.logger.debug({ logger.debug({
elapsed: endTime - startTime, elapsed: endTime - startTime,
msg: 'Update processed', msg: 'Update processed',
}); });

View File

@ -1,7 +1,7 @@
/* eslint-disable turbo/no-undeclared-env-vars */ /* eslint-disable turbo/no-undeclared-env-vars */
import pino from 'pino'; import pino from 'pino';
export const logger = pino({ const logger = pino({
transport: { transport: {
level: process.env.NODE_ENV === 'production' ? 'info' : 'debug', level: process.env.NODE_ENV === 'production' ? 'info' : 'debug',
options: { options: {
@ -11,3 +11,9 @@ export const logger = pino({
target: 'pino-pretty', target: 'pino-pretty',
}, },
}); });
logger.info = logger.info.bind(logger);
logger.debug = logger.debug.bind(logger);
logger.error = logger.error.bind(logger);
export { logger };

18
pnpm-lock.yaml generated
View File

@ -23,7 +23,7 @@ catalogs:
version: 2.2.2 version: 2.2.2
autoprefixer: autoprefixer:
specifier: ^10.4.20 specifier: ^10.4.20
version: 10.4.21 version: 10.4.20
dayjs: dayjs:
specifier: ^1.11.3 specifier: ^1.11.3
version: 1.11.13 version: 1.11.13
@ -35,7 +35,7 @@ catalogs:
version: 9.21.0 version: 9.21.0
graphql: graphql:
specifier: ^16.9.0 specifier: ^16.9.0
version: 16.11.0 version: 16.9.0
husky: husky:
specifier: ^9.1.7 specifier: ^9.1.7
version: 9.1.7 version: 9.1.7
@ -44,13 +44,13 @@ catalogs:
version: 9.0.2 version: 9.0.2
lint-staged: lint-staged:
specifier: ^15.2.10 specifier: ^15.2.10
version: 15.5.2 version: 15.2.10
lucide-react: lucide-react:
specifier: ^0.462.0 specifier: ^0.462.0
version: 0.462.0 version: 0.462.0
postcss: postcss:
specifier: ^8.4.49 specifier: ^8.4.49
version: 8.5.6 version: 8.4.49
postcss-load-config: postcss-load-config:
specifier: ^6.0.1 specifier: ^6.0.1
version: 6.0.1 version: 6.0.1
@ -59,7 +59,7 @@ catalogs:
version: 3.6.2 version: 3.6.2
radashi: radashi:
specifier: ^12.5.1 specifier: ^12.5.1
version: 12.6.0 version: 12.5.1
react: react:
specifier: ^19.1.1 specifier: ^19.1.1
version: 19.1.1 version: 19.1.1
@ -68,19 +68,19 @@ catalogs:
version: 19.1.1 version: 19.1.1
tailwindcss: tailwindcss:
specifier: ^3.4.15 specifier: ^3.4.15
version: 3.4.17 version: 3.4.15
typescript: typescript:
specifier: ^5.7 specifier: ^5.7
version: 5.8.3 version: 5.7.2
vite-tsconfig-paths: vite-tsconfig-paths:
specifier: ^5.1.4 specifier: ^5.1.4
version: 5.1.4 version: 5.1.4
vitest: vitest:
specifier: ^2.1.8 specifier: ^2.1.8
version: 2.1.9 version: 2.1.8
zod: zod:
specifier: ^3.24.1 specifier: ^3.24.1
version: 3.25.71 version: 3.24.1
importers: importers: