correctly parse response errors for logging

This commit is contained in:
Hazelnoot 2025-05-06 17:42:23 -04:00
parent 2aa3cf2731
commit c0f24eaf5d
3 changed files with 12 additions and 9 deletions

View file

@ -27,7 +27,7 @@ export type DataObject = Record<string, unknown> | (object & { length?: never; }
export default class Logger { export default class Logger {
private context: Context; private context: Context;
private parentLogger: Logger | null = null; private parentLogger: Logger | null = null;
private readonly verbose: boolean; public readonly verbose: boolean;
constructor(context: string, color?: KEYWORD, verbose?: boolean) { constructor(context: string, color?: KEYWORD, verbose?: boolean) {
this.context = { this.context = {

View file

@ -56,10 +56,13 @@ export class MastodonApiServerService {
// Log error responses (including converted JSON exceptions) // Log error responses (including converted JSON exceptions)
fastify.addHook('onSend', (request, reply, payload, done) => { fastify.addHook('onSend', (request, reply, payload, done) => {
if (reply.statusCode >= 400) { if (reply.statusCode >= 500 || (reply.statusCode >= 400 && this.logger.verbose)) {
const data = getErrorData(payload); if (typeof(payload) === 'string' && String(reply.getHeader('content-type')).toLowerCase().includes('application/json')) {
const body = JSON.parse(payload);
const data = getErrorData(body);
this.logger.error(request, data, reply.statusCode); this.logger.error(request, data, reply.statusCode);
} }
}
done(); done();
}); });

View file

@ -3,22 +3,22 @@
* SPDX-License-Identifier: AGPL-3.0-only * SPDX-License-Identifier: AGPL-3.0-only
*/ */
import { Inject, Injectable } from '@nestjs/common'; import { Injectable } from '@nestjs/common';
import { FastifyRequest } from 'fastify'; import { FastifyRequest } from 'fastify';
import Logger from '@/logger.js'; import Logger from '@/logger.js';
import { LoggerService } from '@/core/LoggerService.js'; import { LoggerService } from '@/core/LoggerService.js';
import { ApiError } from '@/server/api/error.js'; import { ApiError } from '@/server/api/error.js';
import { EnvService } from '@/core/EnvService.js';
import { getBaseUrl } from '@/server/api/mastodon/MastodonClientService.js'; import { getBaseUrl } from '@/server/api/mastodon/MastodonClientService.js';
@Injectable() @Injectable()
export class MastodonLogger { export class MastodonLogger {
public readonly logger: Logger; public readonly logger: Logger;
constructor( public get verbose() {
@Inject(EnvService) return this.logger.verbose;
private readonly envService: EnvService, }
constructor(
loggerService: LoggerService, loggerService: LoggerService,
) { ) {
this.logger = loggerService.getLogger('masto-api'); this.logger = loggerService.getLogger('masto-api');