Skip to main content
Version: Current

Scenario logs

Logger components emit messages under scenarios.<scenario>.<node>. Curated runtime and deployment events use nussknacker.events. Configure your log viewer to select these categories and preserve the structured fields described below. Selecting the scenarios. prefix shows messages authored in Log nodes only.

User-facing events​

Events describe the failure without copying arbitrary exception messages, input data or scenario variables:

Event codeLevelMeaning
processing.timeoutERRORProcessing timed out; check the external service and timeout configuration.
processing.connection_failedERRORA connection or hostname lookup failed; check address, availability and network access.
processing.secure_connection_failedERRORA TLS handshake failed; check the external service's certificate and the connection's TLS settings.
processing.failedERRORAnother processing failure; check the node configuration and input data.
request.invalid_inputWARNThe request cannot be parsed; check it against the scenario's API definition.
request.failedERRORThe request could not be completed outside the normal interpreter error path.
deployment.accepted / deployment.failedINFO / ERRORThe engine accepted the deployment request, or that request failed. Acceptance does not mean the scenario is already running.
cancellation.accepted / cancellation.failedINFO / ERRORThe engine accepted the cancellation request, or rejected it or could not be reached; check the scenario status.

The scenario's runtime emits the processing.* and request.* events: live Flink and Lite interpreters report processing failures, and the request-response HTTP endpoint also reports request parsing and response encoding failures. The Designer emits the deployment.* and cancellation.* events, so they appear in the Designer's logs, not in the runtime's. Scenario tests emit none of these events.

Technical logs and existing exception consumers retain their current behavior, including stacktraces, exception topics and restart policies. Failures outside these paths, such as a crashed worker, can still appear only in technical logs, so retain them for diagnosis.

Repeated runtime errors are grouped for 60 seconds by node and event code. The first error is emitted immediately. A .repeated event reports how many more were grouped: when any later error arrives after the 60 seconds, when the group is evicted, or when the runtime stops normally. No periodic background flush is used, so the count of a group that stays quiet appears with the next error or at the stop. A grouping state retains at most 1024 groups, without records or exceptions. In Flink every operator of the scenario keeps its own state; a request-response scenario keeps one for processing and one for its HTTP endpoint. The grouping is therefore not cluster-wide, and a crash can lose pending counts. Summary events omit record IDs, because they represent several records. Log-node messages are never grouped by this mechanism.

Correlation and OpenTelemetry​

context_id identifies processing within an engine run and may repeat after restart. correlation_id preserves NU's existing arbitrary trace-id value, including UUIDs. HTTP header names are matched without regard to case. This value is present only when the source provides it: standard Flink sources currently do not populate it, so use context_id for a Flink record instead of expecting a correlation ID. A Lite source reads the trace-id before deserializing the record, so the error event of a record that cannot be deserialized keeps it. These fields are independent of OpenTelemetry's trace_id and span_id; no synthetic OTel identifiers are derived from NU IDs. The logging helper keeps OTel fields already present in the logging context but does not propagate tracing context across threads or operators. See HTTP tracing with OpenTelemetry for tracing request-response scenarios.

Logging configuration​

The runtime writes these fields through MDC: nu_log_source, scenario_name, node_id, node_name, context_id, correlation_id and event_code. node_name is the name shown on the canvas; node_id is the node's technical identifier. The Logback configurations bundled with Nussknacker use plain text patterns that do not print MDC, so add the fields you need to the pattern or use a JSON layout that keeps MDC. For example:

<pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} [%X{scenario_name}/%X{node_name}] %X{event_code} %X{correlation_id} - %msg%n</pattern>

The category for curated events is nussknacker.events; existing Log-node categories remain scenarios.<scenario>.<node>. Do not treat every pl.touk.nussknacker.* logger as a user-facing event: for example, NU's HTTP client emits Resolving addresses of ... took ... ms, and RocksDB initialization and memory warnings are technical diagnostics as well.