Pudu programming language
Menu
Package

@chrismichaelps / pudu-lang-log

Structured event logging for Pudu: message templates, enrichment, filtering, formatting, and sinks

0.1.0Apache-2.01

InstallClose

Filtering.pudu

Pudu46 lines1.7 KB

GitHub ↗
1/** @Example.Filtering.Program — expression filters, computed properties, and templates */2module Filtering34import Std.Io as Io5import PuduLangLog.Configuration as Configuration6import PuduLangLog.Expressions as Expressions7import PuduLangLog as Log8import PuduLangLog.Logger as Logger9import PuduLangLog.Sinks.Console as Console10import PuduLangLog.Value as Value1112/// Writes orders through an expression filter and an expression template, and answers 0.13fn main() -> Int {14  let expensive = match Expressions.predicate("Total > 100 or @l = 'Error'") {15    case Ok(test) => test16    case Err(problem) => {17      let _said = Io.writeErrorLine(problem)18      return 119    }20  }21  let area = match Expressions.computed("Area", "Substring(SourceContext, LastIndexOf(SourceContext, '.') + 1)") {22    case Ok(enricher) => enricher23    case Err(problem) => {24      let _said = Io.writeErrorLine(problem)25      return 126    }27  }28  let layout = match Expressions.template("[\{@l:u3\}] \{#if Area is not null\}\{Area\}: \{#end\}\{@m\}\{#each name, held in Rest(true)\} \{name\}=\{held\}\{#end\}\n") {29    case Ok(formatter) => formatter30    case Err(problem) => {31      let _said = Io.writeErrorLine(problem)32      return 133    }34  }35  let console = Console.sink(Console.Options{..Console.defaults(), formatter: Some(layout)})36  let logger = Configuration.create().filterIncludingOnly(expensive).enrichWith(area).writeTo(console).createLogger()37  let orders = logger.forSource("Shop.Orders")38  for total in [40, 250, 90] {39    orders.information("Order placed for \{Total\}", [Value.int(total)])40  }41  orders.forContext("Customer", Value.text("ada")).information("Order placed for \{Total\} with \{Items\} items", [Value.int(120), Value.int(3)])42  orders.error("Payment declined", [])43  Logger.close(&logger)44  045}46