neologger

n8n community nodes for NeoLogger: WebSocket trigger via Broadcaster and HTTP push to Ingress.

Documentation

n8n-nodes-neologger

n8n community nodes for NeoLogger:

  • NeoLogger Trigger - subscribe to a NeoLogger Broadcaster over WebSocket and start workflows on each matching log document. Filtering happens server-side in the broadcaster.
  • NeoLogger Push - POST a log document to NeoLogger Ingress (/api/v1/push/{endpoint}) from a workflow.

Topology

Spigot/Velocity ---> Ingress ---> Redis ---> Broadcaster ---> n8n Trigger ---> Workflow
                       ^                                                        |
                       +---------------------- n8n Push --------------------------+

Install

In a self-hosted n8n instance:

cd ~/.n8n/custom
npm install n8n-nodes-neologger

Or build locally:

git clone <this repo>
cd n8n-nodes-neologger
npm install
npm run build
npm link
cd ~/.n8n
npm link n8n-nodes-neologger

Credentials

NeoLogger API

Used by NeoLogger Push.

Field Notes
Base URL Origin only, e.g. https://ingress.example.com.
API Key The api_key from the matching entry in Ingress endpoints.json. Sent as Authorization: Bearer ....
Allow Insecure TLS Local development only.

NeoLogger Broadcaster

Used by NeoLogger Trigger.

Field Notes
WebSocket URL Full URL to the broadcaster, e.g. wss://broadcaster.example.com/v1/stream.
Auth Token Must match the broadcaster auth_token in its config.ini.
Auth Method query (?token=...) or header (Authorization: Bearer ...).
Allow Insecure TLS Local development only.

NeoLogger Trigger

The trigger opens a WebSocket to the broadcaster, performs the protocol
handshake, then sends a single subscribe frame containing the channel and
filter you configure. Reconnection uses exponential backoff up to 30s.

Options

Field Description
Channel Channel name from the broadcaster's channels.json.
Use Raw Filter JSON Toggle to switch between the structured filter form and a free-form JSON object.
Filter (collection) Structured fields that are serialized into the broadcaster's filter DSL.
Reconnect Backoff (ms) Initial reconnect delay (capped at 30s).
Include Connection Metadata Wraps each emitted item as { meta, document } with channel, session id, and receivedAt.

Filter fields

Each structured field maps directly to the broadcaster filter DSL. Comma-separated lists become JSON arrays.

n8n field Broadcaster JSON Matches against
Module ID moduleId module.id
Module Version moduleVersion module.version
Source Name sourceName source.name
Source Session ID sourceSessionId source.session_id
Event Name eventName event.event
Event Name Regex eventNameRegex event.event (regex)
Exists Paths exists dot-paths that must exist
Equals (JSON Object) equals dot-path -> scalar equality
JMESPath jmespath full document, must be truthy

Decoupling from new modules

The trigger never enumerates module ids in code. Adding a new logger module
only matters to workflows whose filter mentions that module id or one of its
event-specific fields. The package itself does not need a release.

NeoLogger Push

POSTs a JSON document to NeoLogger Ingress.

Body modes

  • Wrap Event (default): provide just the inner event JSON; the node
    generates _id (ULID-style), unique_id (UUIDv4), timings.generated,
    timings.client_queue, and minimal module and source blocks. The
    generated source.type defaults to n8n so these documents are easy to
    distinguish from agent-produced ones in workflows.
  • Full Document: pass the entire envelope yourself. Use this when you need
    to mirror the exact shape produced by NeoLogger.sendLog in the Java agents.

Options

Field Description
Endpoint Name The {endpoint} segment in /api/v1/push/{endpoint}.
Body Mode Wrap Event or Full Document.
Event Body / Full Document JSON expression. Defaults to {{ $json }}.
Module ID, Module Version Wrap Event only.
Source Name, Source Type Wrap Event only.
Timeout (ms) HTTP timeout.
Continue on Fail Emit error responses as items instead of failing the node.

Durability and scaling caveats

  • The broadcaster is built on Redis pub/sub, which is best-effort. If the
    trigger is offline, messages from that window are lost.
  • Multiple broadcaster replicas subscribing to the same Redis channel will each
    push the same message, so each n8n trigger connected to a different replica
    will receive duplicates. Run one broadcaster per channel, or migrate to a
    durable transport before scaling out.
  • The trigger's Use Raw Filter JSON mode is the safest way to use new filter
    features added by the broadcaster without waiting for a node update.

Discussion