From 7e7e2897b2acd9eb4d652713d9b36cc7d37a1d50 Mon Sep 17 00:00:00 2001 From: KernelDeimos Date: Tue, 22 Apr 2025 12:52:09 -0400 Subject: [PATCH] dev: improve actor logs This commit adds the concept of a toLogFields method on objects which will determine how they're turned into log fields in LogService. This method is now implemented on actor to prevent errors when the object is passed to log functions without being stringified first. --- src/backend/src/modules/core/LogService.js | 9 ++++++++- src/backend/src/services/auth/Actor.js | 9 +++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/backend/src/modules/core/LogService.js b/src/backend/src/modules/core/LogService.js index f8fc7a6f9..83413b4e5 100644 --- a/src/backend/src/modules/core/LogService.js +++ b/src/backend/src/modules/core/LogService.js @@ -30,6 +30,7 @@ const winston = require('winston'); const { Context } = require('../../util/context'); const BaseService = require('../../services/BaseService'); const { stringify_log_entry } = require('./lib/log'); +const { whatis } = require('../../util/langutil'); require('winston-daily-rotate-file'); const WINSTON_LEVELS = { @@ -99,12 +100,18 @@ class LogContext { } if ( ! fields.actor && x && x.get('actor') ) { try { - fields.actor = x.get('actor').uid; + fields.actor = x.get('actor'); } catch (e) { console.log('error logging actor (this is probably fine):', e); } } } + for ( const k in fields ) { + if ( + whatis(fields[k]) === 'object' && + typeof fields[k].toLogFields === 'function' + ) fields[k] = fields[k].toLogFields(); + } this.logService.log_( log_level, this.crumbs, diff --git a/src/backend/src/services/auth/Actor.js b/src/backend/src/services/auth/Actor.js index 215032c7c..ac55e3343 100644 --- a/src/backend/src/services/auth/Actor.js +++ b/src/backend/src/services/auth/Actor.js @@ -91,6 +91,15 @@ class Actor extends AdvancedBase { get uid () { return this.type.uid; } + + toLogFields () { + return { + uid: this.type.uid, + ...(this.type.user ? { + username: this.type.user.username, + } : {}) + } + } /** * Generates a cryptographically-secure deterministic UUID