feat: add Fedify LogTape logging for delivery visibility

Configure LogTape to route Fedify's internal logs (federation, vocab,
delivery) to console at info level. This makes activity delivery
attempts, HTTP signature issues, and queue processing visible in
container logs.
This commit is contained in:
Ricardo
2026-02-19 19:19:15 +01:00
parent 78f6d8b34a
commit fb8d90232b
2 changed files with 25 additions and 1 deletions

View File

@@ -16,6 +16,7 @@ import {
createFederation, createFederation,
importSpki, importSpki,
} from "@fedify/fedify"; } from "@fedify/fedify";
import { configure, getConsoleSink, getLogger } from "@logtape/logtape";
import { MongoKvStore } from "./kv-store.js"; import { MongoKvStore } from "./kv-store.js";
import { registerInboxListeners } from "./inbox-listeners.js"; import { registerInboxListeners } from "./inbox-listeners.js";
@@ -29,6 +30,9 @@ import { registerInboxListeners } from "./inbox-listeners.js";
* @param {boolean} options.storeRawActivities - Whether to store full raw JSON * @param {boolean} options.storeRawActivities - Whether to store full raw JSON
* @returns {{ federation: import("@fedify/fedify").Federation }} * @returns {{ federation: import("@fedify/fedify").Federation }}
*/ */
// Track whether LogTape has been configured (can only call configure() once)
let _logtapeConfigured = false;
export function setupFederation(options) { export function setupFederation(options) {
const { const {
collections, collections,
@@ -37,6 +41,26 @@ export function setupFederation(options) {
storeRawActivities = false, storeRawActivities = false,
} = options; } = options;
// Configure LogTape for Fedify delivery logging (once per process)
if (!_logtapeConfigured) {
_logtapeConfigured = true;
configure({
sinks: {
console: getConsoleSink(),
},
loggers: [
{
// All Fedify logs — federation, vocab, delivery, HTTP signatures
category: ["fedify"],
sinks: ["console"],
lowestLevel: "info",
},
],
}).catch((error) => {
console.warn("[ActivityPub] LogTape configure failed:", error.message);
});
}
const federation = createFederation({ const federation = createFederation({
kv: new MongoKvStore(collections.ap_kv), kv: new MongoKvStore(collections.ap_kv),
queue: new InProcessMessageQueue(), queue: new InProcessMessageQueue(),

View File

@@ -1,6 +1,6 @@
{ {
"name": "@rmdes/indiekit-endpoint-activitypub", "name": "@rmdes/indiekit-endpoint-activitypub",
"version": "1.0.6", "version": "1.0.7",
"description": "ActivityPub federation endpoint for Indiekit via Fedify. Adds full fediverse support: actor, inbox, outbox, followers, following, syndication, and Mastodon migration.", "description": "ActivityPub federation endpoint for Indiekit via Fedify. Adds full fediverse support: actor, inbox, outbox, followers, following, syndication, and Mastodon migration.",
"keywords": [ "keywords": [
"indiekit", "indiekit",