
Filtering.pudu
Pudu46 lines1.7 KB
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 Value111213fn 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