Pular para o conteúdo

DSL de Logging

Nesta página

Uma família de macros pequenos pode formar uma mini-DSL — um vocabulário específico de domínio sem a necessidade de um framework externo. Cada nível (INFO, WARN, ERROR) vira um macro dedicado que prefixa a mensagem automaticamente. O argumento é qualquer expressão de string, incluindo interpolações.

O macro log_at! acrescenta um campo de horário, mostrando como compor macros com aridade variada para enriquecer o contexto:

log_info!, log_warn!, log_error! e log_at! formando uma 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

Desafio

Adicione um macro log_debug!(msg) que imprime "[DEBUG] msg", mas apenas quando uma variável let debug_mode = true estiver definida no escopo. Use pick! do capítulo de múltiplos parâmetros para condicionar a impressão.

Buscar no Zolo

9 resultados

enespt-br