# Log and annotate a run

Control / log

logging, audit, metrics, annotations, comments

Page: <https://meridian.online/operations/log-and-annotate-a-run>

## Status

A feature, not a step.

It lives in how a Protocol runs. [src/contract.rs in arcform at fc62d6f](https://github.com/meridian-online/arcform/blob/fc62d6f861dd/src/contract.rs)

## Variants

- [Annotate a pipeline](https://meridian.online/operations/log-and-annotate-a-run/annotate-a-pipeline): Attach comments, notes, descriptions or groupings to the steps of a pipeline without affecting what it computes.
- Track experiments and runs: Record experiment runs with their parameters and results in a tracking store and read them back.
- [Explain or profile a query plan](https://meridian.online/operations/log-and-annotate-a-run/explain-a-query-plan): Show the plan a query will run, or run it and report where the time went.
- Keep a replayable command history: Record every command or change of a session so it can be reviewed, undone or replayed.
- Set how much is logged: Turn logging, profiling or verbose output on or off for a run.
- Count, time and publish run metrics: Increment counters, record gauges and timers, and publish metrics or progress while a run proceeds.
- [Read run logs and metrics as rows](https://meridian.online/operations/log-and-annotate-a-run/read-run-logs-as-rows): Return the run's log records, step timings, row counts or engine statistics as a table that later steps can query.
- Write a message to the log: Write a message, warning or the passing rows to the run log or console, and pass the data through unchanged.

## What other tools call it

Meridian's classification; an independent blind rating agreed on 86.2% of 312 rows (exact class, version 2).

- Alteryx Designer: [`API Output`](https://help.alteryx.com/current/en/designer/tools/developer/api-output-tool.html) (read 2026-09-27)
- Alteryx Designer: [`Comment`](https://help.alteryx.com/current/en/designer/tools/documentation/comment-tool.html) (read 2026-09-27)
- Alteryx Designer: [`Explorer Box`](https://help.alteryx.com/current/en/designer/tools/documentation/explorer-box-tool.html) (read 2026-09-27)
- Alteryx Designer: [`Message`](https://help.alteryx.com/current/en/designer/tools/developer/message-tool.html) (read 2026-09-27)
- Alteryx Designer: [`Tool Container`](https://help.alteryx.com/current/en/designer/tools/documentation/tool-container-tool.html) (read 2026-09-27)
- Apache DataFusion: [`EXPLAIN`](https://datafusion.apache.org/user-guide/sql/explain.html) (read 2026-09-27)
- Apache DataFusion: [`EXPLAIN ANALYZE`](https://datafusion.apache.org/user-guide/sql/explain.html) (read 2026-09-27)
- Apache DataFusion: [`explain`](https://docs.rs/datafusion/latest/datafusion/dataframe/struct.DataFrame.html) (read 2026-09-27)
- Apache DataFusion: [`list_files_cache`](https://datafusion.apache.org/user-guide/cli/functions.html) (read 2026-09-27)
- Apache DataFusion: [`metadata_cache`](https://datafusion.apache.org/user-guide/cli/functions.html) (read 2026-09-27)
- Apache DataFusion: [`statistics_cache`](https://datafusion.apache.org/user-guide/cli/functions.html) (read 2026-09-27)
- dbt-utils: [`log_info`](https://raw.githubusercontent.com/dbt-labs/dbt-utils/main/README.md) (read 2026-09-27)
- dbt-utils: [`pretty_log_format`](https://raw.githubusercontent.com/dbt-labs/dbt-utils/main/README.md) (read 2026-09-27)
- dbt-utils: [`pretty_time`](https://raw.githubusercontent.com/dbt-labs/dbt-utils/main/README.md) (read 2026-09-27)
- DuckDB: [`Profiling`](https://duckdb.org/docs/current/sql/statements/profiling) (read 2026-09-27)
- DuckDB: `disable_logging` (read 2026-09-27)
- DuckDB: `disable_profiling` (read 2026-09-27)
- DuckDB: `duckdb_log_contexts` (read 2026-09-27)
- DuckDB: `duckdb_logs` (read 2026-09-27)
- DuckDB: `duckdb_logs_parsed` (read 2026-09-27)
- DuckDB: `duckdb_profiling_settings` (read 2026-09-27)
- DuckDB: `enable_logging` (read 2026-09-27)
- DuckDB: `enable_profiling` (read 2026-09-27)
- DuckDB: `truncate_duckdb_logs` (read 2026-09-27)
- Duckle: [`Log Message`](https://github.com/slothflowlabs/duckle/blob/f85f8960edfb6efbf4cb89d58a7b32e16df0e867/website/docs/components.html) (read 2026-09-25)
- Duckle: [`Run Events`](https://github.com/slothflowlabs/duckle/blob/f85f8960edfb6efbf4cb89d58a7b32e16df0e867/frontend/src/workflow-ui/palette-data.ts) (read 2026-09-25)
- Duckle: [`Warn`](https://github.com/slothflowlabs/duckle/blob/f85f8960edfb6efbf4cb89d58a7b32e16df0e867/website/docs/components.html) (read 2026-09-25)
- EasyMorph: [`Generate documentation`](https://help.easymorph.com/doku.php?id=transformations:generatedocumentation) (read 2026-09-27)
- EasyMorph: [`Status`](https://help.easymorph.com/doku.php?id=transformations:status) (read 2026-09-27)
- EasyMorph: [`To-do`](https://help.easymorph.com/doku.php?id=transformations:todo) (read 2026-09-27)
- Apache Hop: [`Execution information`](https://hop.apache.org/manual/latest/pipeline/transforms/execinfo.html) (read 2026-09-27)
- Apache Hop: [`Neo4j Get Logging Info`](https://hop.apache.org/manual/latest/pipeline/transforms/neo4j-getloginfo.html) (read 2026-09-27)
- Apache Hop: [`Output transform metrics`](https://hop.apache.org/manual/next/pipeline/transforms/outputtransformmetrics.html) (read 2026-09-27)
- Apache Hop: [`Pipeline Data Probe`](https://hop.apache.org/manual/latest/pipeline/transforms/pipeline-data-probe.html) (read 2026-09-27)
- Apache Hop: [`Pipeline logging`](https://hop.apache.org/manual/latest/pipeline/transforms/pipeline-logging.html) (read 2026-09-27)
- Apache Hop: [`Server Status`](https://hop.apache.org/manual/latest/pipeline/transforms/serverstatus.html) (read 2026-09-27)
- Apache Hop: [`Workflow logging`](https://hop.apache.org/manual/latest/pipeline/transforms/workflow-logging.html) (read 2026-09-27)
- Apache Hop: [`Write to Log`](https://hop.apache.org/manual/latest/workflow/actions/writetolog.html) (read 2026-09-27)
- Apache Hop: [`Write to log`](https://hop.apache.org/manual/latest/pipeline/transforms/writetolog.html) (read 2026-09-27)
- KNIME Analytics Platform: [`Global Timer Info`](https://api.hub.knime.com/nodes/*GvF1OLhWkWtNIH9-?details=full) (read 2026-09-27)
- KNIME Analytics Platform: [`Timer Info`](https://api.hub.knime.com/nodes/*LPVh862Ydlwk4inj?details=full) (read 2026-09-27)
- mlpack: [`mlpack_silent`](https://duckdb.org/community_extensions/extensions/mlpack) (read 2026-09-27)
- mlpack: [`mlpack_verbose`](https://duckdb.org/community_extensions/extensions/mlpack) (read 2026-09-27)
- Apache NiFi: [`DebugFlow`](https://nifi.apache.org/components/org.apache.nifi.processors.standard.DebugFlow/) (read 2026-09-27)
- Apache NiFi: [`Label`](https://nifi.apache.org/nifi-docs/user-guide.html) (read 2026-09-27)
- Apache NiFi: [`LogAttribute`](https://nifi.apache.org/components/org.apache.nifi.processors.standard.LogAttribute/) (read 2026-09-27)
- Apache NiFi: [`LogMessage`](https://nifi.apache.org/components/org.apache.nifi.processors.standard.LogMessage/) (read 2026-09-27)
- Apache NiFi: [`LoggingRecordSink`](https://nifi.apache.org/components/org.apache.nifi.record.sink.LoggingRecordSink/) (read 2026-09-27)
- Apache NiFi: [`MonitorActivity`](https://nifi.apache.org/components/org.apache.nifi.processors.standard.MonitorActivity/) (read 2026-09-27)
- Apache NiFi: [`PutCloudWatchMetric`](https://nifi.apache.org/components/org.apache.nifi.processors.aws.cloudwatch.PutCloudWatchMetric/) (read 2026-09-27)
- Apache NiFi: [`Reporting Tasks (family)`](https://nifi.apache.org/components/) (read 2026-09-27)
- Apache NiFi: [`UpdateCounter`](https://nifi.apache.org/components/org.apache.nifi.processors.standard.UpdateCounter/) (read 2026-09-27)
- Apache NiFi: [`UpdateGauge`](https://nifi.apache.org/components/org.apache.nifi.processors.standard.UpdateGauge/) (read 2026-09-27)
- OpenRefine: [`History (Undo/Redo)`](https://openrefine.org/docs/manual/running#history-undoredo) (read 2026-09-27)
- Pentaho Data Integration: [`Output steps metrics`](https://docs.pentaho.com/pdia-data-integration/9.3-data-integration/pdi-transformation-steps-reference-overview) (read 2026-09-27)
- Pentaho Data Integration: [`Send message to Syslog`](https://docs.pentaho.com/pdia-data-integration/9.3-data-integration/pdi-transformation-steps-reference-overview) (read 2026-09-27)
- Pentaho Data Integration: [`Write to log`](https://docs.pentaho.com/pdia-data-integration/9.3-data-integration/pdi-transformation-steps-reference-overview) (read 2026-09-27)
- Polars: [`Expr manipulation/selection: utilities (group)`](https://docs.pola.rs/api/python/stable/reference/expressions/modify_select.html) (read 2026-09-27)
- Polars: [`Expr.meta (group)`](https://docs.pola.rs/api/python/stable/reference/expressions/meta.html) (read 2026-09-27)
- Polars: [`LazyFrame query plan inspection (family)`](https://docs.pola.rs/api/python/stable/reference/lazyframe/descriptive.html) (read 2026-09-27)
- RapidMiner Studio: [`Annotate`](https://docs.rapidminer.com/latest/studio/operators/utility/annotations/annotate.html) (read 2026-09-27)
- RapidMiner Studio: [`Annotations to Data`](https://docs.rapidminer.com/latest/studio/operators/utility/annotations/annotations_to_data.html) (read 2026-09-27)
- RapidMiner Studio: [`Clear Log`](https://docs.rapidminer.com/latest/studio/operators/utility/logging/clear_log.html) (read 2026-09-27)
- RapidMiner Studio: [`Create Experiment`](https://docs.rapidminer.com/latest/studio/operators/extensions/MLFlow/experiments/mlflow_create_experiment.html) (read 2026-09-27)
- RapidMiner Studio: [`Create Run`](https://docs.rapidminer.com/latest/studio/operators/extensions/MLFlow/experiments/mlflow_create_run.html) (read 2026-09-27)
- RapidMiner Studio: [`Data to Annotations`](https://docs.rapidminer.com/latest/studio/operators/utility/annotations/data_to_annotations.html) (read 2026-09-27)
- RapidMiner Studio: [`Delete Experiment`](https://docs.rapidminer.com/latest/studio/operators/extensions/MLFlow/experiments/mlflow_delete_experiment.html) (read 2026-09-27)
- RapidMiner Studio: [`Delete Run`](https://docs.rapidminer.com/latest/studio/operators/extensions/MLFlow/experiments/mlflow_delete_run.html) (read 2026-09-27)
- RapidMiner Studio: [`Extract Log Value`](https://docs.rapidminer.com/latest/studio/operators/utility/logging/extract_log_value.html) (read 2026-09-27)
- RapidMiner Studio: [`Get Experiments`](https://docs.rapidminer.com/latest/studio/operators/extensions/MLFlow/experiments/mlflow_get_experiments.html) (read 2026-09-27)
- RapidMiner Studio: [`Get Jobs (AI Hub)`](https://docs.rapidminer.com/latest/studio/operators/extensions/Admin%20Tools/ai_hub/aihub_get_jobs.html) (read 2026-09-27)
- RapidMiner Studio: [`Get Log (AI Hub)`](https://docs.rapidminer.com/latest/studio/operators/extensions/Admin%20Tools/ai_hub/aihub_get_log.html) (read 2026-09-27)
- RapidMiner Studio: [`Get Log (RTSA)`](https://docs.rapidminer.com/latest/studio/operators/extensions/Admin%20Tools/rtsa/get_log_rtsa.html) (read 2026-09-27)
- RapidMiner Studio: [`Get Logs (RTSA)`](https://docs.rapidminer.com/latest/studio/operators/extensions/Admin%20Tools/rtsa/get_logs_rtsa.html) (read 2026-09-27)
- RapidMiner Studio: [`Get Metrics (AI Hub)`](https://docs.rapidminer.com/latest/studio/operators/extensions/Admin%20Tools/ai_hub/aihub_get_metrics.html) (read 2026-09-27)
- RapidMiner Studio: [`Get Run`](https://docs.rapidminer.com/latest/studio/operators/extensions/MLFlow/experiments/mlflow_get_run.html) (read 2026-09-27)
- RapidMiner Studio: [`Get Runs`](https://docs.rapidminer.com/latest/studio/operators/extensions/MLFlow/experiments/mlflow_get_runs.html) (read 2026-09-27)
- RapidMiner Studio: [`Log`](https://docs.rapidminer.com/latest/studio/operators/utility/logging/log.html) (read 2026-09-27)
- RapidMiner Studio: [`Log Operator Runtimes`](https://docs.rapidminer.com/latest/studio/operators/extensions/Operator%20Toolbox/utility/runtime_logger.html) (read 2026-09-27)
- RapidMiner Studio: [`Log Run`](https://docs.rapidminer.com/latest/studio/operators/extensions/MLFlow/experiments/mlflow_log_run.html) (read 2026-09-27)
- RapidMiner Studio: [`Log to Data`](https://docs.rapidminer.com/latest/studio/operators/utility/logging/log_to_data.html) (read 2026-09-27)
- RapidMiner Studio: [`Log to Weights`](https://docs.rapidminer.com/latest/studio/operators/utility/logging/log_to_weights.html) (read 2026-09-27)
- RapidMiner Studio: [`Print to Console`](https://docs.rapidminer.com/latest/studio/operators/utility/logging/print_to_console.html) (read 2026-09-27)
- RapidMiner Studio: [`Provide Macro as Log Value`](https://docs.rapidminer.com/latest/studio/operators/utility/logging/provide_macro_as_log_value.html) (read 2026-09-27)
- RapidMiner Studio: [`Step Custom Progress`](https://docs.rapidminer.com/latest/studio/operators/extensions/Custom%20Operators/progress/step_custom_progress.html) (read 2026-09-27)
- RapidMiner Studio: [`Total Custom Progress`](https://docs.rapidminer.com/latest/studio/operators/extensions/Custom%20Operators/progress/total_custom_progress.html) (read 2026-09-27)
- subtoken: [`subtoken_cache_stats`](https://github.com/meridian-online/subtoken/blob/ceb61bd796b15b4d54ca3bb2db8a74792d67026e/README.md) (read 2026-09-27)
- Tableau Prep: [`Descriptions`](https://help.tableau.com/current/prep/en-us/prep_build_flow.htm) (read 2026-09-27)
- Tableau Prep: [`Group steps`](https://help.tableau.com/current/prep/en-us/prep_build_flow.htm) (read 2026-09-27)
- Talend: [`tAssertCatcher`](https://help.qlik.com/talend/en-US/components/8.0/logs-and-errors/logs-and-errors-component) (read 2026-09-27)
- Talend: [`tChronometerStart`](https://help.qlik.com/talend/en-US/components/8.0/logs-and-errors/logs-and-errors-component) (read 2026-09-27)
- Talend: [`tChronometerStop`](https://help.qlik.com/talend/en-US/components/8.0/logs-and-errors/logs-and-errors-component) (read 2026-09-27)
- Talend: [`tFlowMeter`](https://help.qlik.com/talend/en-US/components/8.0/logs-and-errors/logs-and-errors-component) (read 2026-09-27)
- Talend: [`tFlowMeterCatcher`](https://help.qlik.com/talend/en-US/components/8.0/logs-and-errors/logs-and-errors-component) (read 2026-09-27)
- Talend: [`tJobLog`](https://help.qlik.com/talend/en-US/components/8.0/talend-cloud/talend-cloud-component) (read 2026-09-27)
- Talend: [`tLogCatcher`](https://help.qlik.com/talend/en-US/components/8.0/logs-and-errors/logs-and-errors-component) (read 2026-09-27)
- Talend: [`tLogRow`](https://help.qlik.com/talend/en-US/components/8.0/logs-and-errors/logs-and-errors-component) (read 2026-09-27)
- Talend: [`tStatCatcher`](https://help.qlik.com/talend/en-US/components/8.0/logs-and-errors/logs-and-errors-component) (read 2026-09-27)
- Trifacta: [`Comment`](https://help.alteryx.com/aac/en/trifacta-classic/reference/transformation-reference.html) (read 2026-09-27)
- Trifacta: [`Comment Transform`](https://help.alteryx.com/aac/en/trifacta-classic/wrangle-language/language-appendices/transforms.html) (read 2026-09-27)
- VisiData: [`cmdlog-all`](https://github.com/saulpw/visidata/blob/7609212ec2febafa9caba7183cbebfaf49627909/visidata/cmdlog.py#L472) (read 2026-09-23)
- VisiData: [`cmdlog-sheet`](https://github.com/saulpw/visidata/blob/7609212ec2febafa9caba7183cbebfaf49627909/visidata/cmdlog.py#L473) (read 2026-09-23)
- VisiData: [`cmdlog-sheet-only`](https://github.com/saulpw/visidata/blob/7609212ec2febafa9caba7183cbebfaf49627909/visidata/cmdlog.py#L474) (read 2026-09-23)
- VisiData: [`open-input-history`](https://github.com/saulpw/visidata/blob/7609212ec2febafa9caba7183cbebfaf49627909/visidata/input_history.py#L55) (read 2026-09-23)
- VisiData: [`open-statuses`](https://github.com/saulpw/visidata/blob/7609212ec2febafa9caba7183cbebfaf49627909/visidata/statusbar.py#L294) (read 2026-09-23)
- VisiData: [`save-cmdlog`](https://github.com/saulpw/visidata/blob/7609212ec2febafa9caba7183cbebfaf49627909/visidata/cmdlog.py#L475) (read 2026-09-23)
- VisiData: [`vd (loader)`](https://github.com/saulpw/visidata/blob/7609212ec2febafa9caba7183cbebfaf49627909/visidata/cmdlog.py#L33) (read 2026-09-23)
- VisiData: [`vd (saver)`](https://github.com/saulpw/visidata/blob/7609212ec2febafa9caba7183cbebfaf49627909/visidata/cmdlog.py#L40) (read 2026-09-23)
- VisiData: [`vdj (loader)`](https://github.com/saulpw/visidata/blob/7609212ec2febafa9caba7183cbebfaf49627909/visidata/cmdlog.py#L37) (read 2026-09-23)
- VisiData: [`vdj (saver)`](https://github.com/saulpw/visidata/blob/7609212ec2febafa9caba7183cbebfaf49627909/visidata/cmdlog.py#L44) (read 2026-09-23)
- VisiData: [`vdx (loader)`](https://github.com/saulpw/visidata/blob/7609212ec2febafa9caba7183cbebfaf49627909/visidata/loaders/vdx.py#L11) (read 2026-09-23)
- VisiData: [`vdx (saver)`](https://github.com/saulpw/visidata/blob/7609212ec2febafa9caba7183cbebfaf49627909/visidata/loaders/vdx.py#L61) (read 2026-09-23)
- Yggdrasil Decision Forests: [`strict`](https://github.com/google/yggdrasil-decision-forests/blob/0a54b57c95ff0cf42ecf0310ace0513a4f32cb65/yggdrasil_decision_forests/port/python/ydf/utils/log.py) (read 2026-09-27)
- Yggdrasil Decision Forests: [`verbose`](https://github.com/google/yggdrasil-decision-forests/blob/0a54b57c95ff0cf42ecf0310ace0513a4f32cb65/yggdrasil_decision_forests/port/python/ydf/utils/log.py) (read 2026-09-27)
- Yggdrasil Decision Forests: [`ydf.help.loading_data`](https://github.com/google/yggdrasil-decision-forests/blob/0a54b57c95ff0cf42ecf0310ace0513a4f32cb65/yggdrasil_decision_forests/port/python/ydf/util/help.py) (read 2026-09-27)
- Yggdrasil Decision Forests: [`ydf.util.LogBook`](https://github.com/google/yggdrasil-decision-forests/blob/0a54b57c95ff0cf42ecf0310ace0513a4f32cb65/yggdrasil_decision_forests/port/python/ydf/util/log_book.py) (read 2026-09-27)
