Description
gateway.log uses a _ComponentFilter that only passes records from loggers starting with the prefixes in COMPONENT_PREFIXES["gateway"]. Currently that is just ("gateway",). Plugin modules are loaded under the hermes_plugins.* namespace — so all plugin log output is silently dropped from gateway.log.
Affected file
hermes_logging.py line 144:
COMPONENT_PREFIXES = {
"gateway": ("gateway",),
...
}
The _ComponentFilter (line 126-138) checks record.name.startswith(("gateway",)) — plugin loggers like hermes_plugins.group_chat_rate_limiter and hermes_plugins.memory_pipeline never match.
Evidence
agent.log (unfiltered) has 117 occurrences of "Plugin discovery complete" from plugin discovery. gateway.log has 0. Plugin register() calls that log at INFO — e.g. "registered speak-limiter hooks" — appear in agent.log (sometimes) but NEVER in gateway.log.
Reproduce
- Enable any plugin that logs during
register(), e.g. memory-pipeline which logs "memory-pipeline: registered..." at INFO
- Restart gateway
grep "registered" gateway.log → empty
grep "registered" agent.log → present
Impact
Operators debugging gateway behavior check gateway.log for gateway-related activity. Plugin registration — which directly affects gateway hooks (pre_gateway_dispatch, transform_llm_output, etc.) — is gateway-relevant but invisible in the gateway-specific log. The gobby-rate-limiter plugin appeared to not load at all based on gateway.log inspection, when in fact it was working perfectly — the registration just was not visible there.
Suggested fix
Add "hermes_plugins" to the gateway component prefixes:
COMPONENT_PREFIXES = {
"gateway": ("gateway", "hermes_plugins"),
...
}
Alternatively, add a separate plugin component or make gateway.log less restrictive.
Description
gateway.loguses a_ComponentFilterthat only passes records from loggers starting with the prefixes inCOMPONENT_PREFIXES["gateway"]. Currently that is just("gateway",). Plugin modules are loaded under thehermes_plugins.*namespace — so all plugin log output is silently dropped fromgateway.log.Affected file
hermes_logging.pyline 144:The
_ComponentFilter(line 126-138) checksrecord.name.startswith(("gateway",))— plugin loggers likehermes_plugins.group_chat_rate_limiterandhermes_plugins.memory_pipelinenever match.Evidence
agent.log(unfiltered) has 117 occurrences of "Plugin discovery complete" from plugin discovery.gateway.loghas 0. Pluginregister()calls that log at INFO — e.g. "registered speak-limiter hooks" — appear inagent.log(sometimes) but NEVER ingateway.log.Reproduce
register(), e.g.memory-pipelinewhich logs"memory-pipeline: registered..."at INFOgrep "registered" gateway.log→ emptygrep "registered" agent.log→ presentImpact
Operators debugging gateway behavior check
gateway.logfor gateway-related activity. Plugin registration — which directly affects gateway hooks (pre_gateway_dispatch,transform_llm_output, etc.) — is gateway-relevant but invisible in the gateway-specific log. Thegobby-rate-limiterplugin appeared to not load at all based ongateway.loginspection, when in fact it was working perfectly — the registration just was not visible there.Suggested fix
Add
"hermes_plugins"to the gateway component prefixes:Alternatively, add a separate
plugincomponent or makegateway.logless restrictive.