Saltar al contenido

DSL de Logging

En esta página

Una familia de macros pequeños puede formar una mini-DSL — un vocabulario específico de dominio sin necesidad de un framework externo. Cada nivel (INFO, WARN, ERROR) se convierte en un macro dedicado que prefija el mensaje automáticamente. El argumento es cualquier expresión de cadena, incluidas las interpolaciones.

El macro log_at! agrega un campo de hora, mostrando cómo componer macros con aridad variable para enriquecer el contexto:

log_info!, log_warn!, log_error! y log_at! formando una DSL de log concisa.

08-logging-dsl.zolo
Playground
// Feature: Mini logging DSL with macros

// Syntax: several small macros that prefix messages with a level

// When to use: standardize log format without needing a framework;

// makes the level visually obvious in code.


macro log_info(msg) {
  print("[INFO ] {$msg}")
}


macro log_warn(msg) {
  print("[WARN ] {$msg}")
}


macro log_error(msg) {
  print("[ERROR] {$msg}")
}


// Direct usage.

log_info!("server started")
log_warn!("slow connection")
log_error!("database timeout")

// expected:

// [INFO ] server started

// [WARN ] slow connection

// [ERROR] database timeout


// Combined with interpolation — the argument is any expr.

let user = "alice"
let attempts = 3
log_warn!("user {user} tried {attempts} times")

// expected: [WARN ] user alice tried 3 times


// Composed macro: log with simulated timestamp.

macro log_at(when, level, msg) {
  print("[{$when}][{$level}] {$msg}")
}


log_at!("12:00:01", "INFO", "boot complete")
// expected: [12:00:01][INFO] boot complete

Desafío

Agrega un macro log_debug!(msg) que imprima "[DEBUG] msg", pero solo cuando una variable let debug_mode = true esté definida en el ámbito. Usa pick! del capítulo de múltiples parámetros para condicionar la impresión.

Buscar en Zolo

9 resultados

enespt-br