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

Files.pudu

Pudu43 lines1.5 KB

GitHub ↗
1/** @Example.Files.Program — compact JSON files written, rolled, and read back */2module Files34import Std.Env as Env5import Std.Io as Io6import Std.Result as Result7import PuduLangLog.Configuration as Configuration8import PuduLangLog.Event as Event9import PuduLangLog.Formatting.Compact as Compact10import PuduLangLog.Formatting.Reader as Reader11import PuduLangLog as Log12import PuduLangLog.Logger as Logger13import PuduLangLog.Sinks.File as File14import PuduLangLog.Value as Value1516/// Writes events to a daily file of compact JSON, reads them back, and answers 0.17fn main() -> Int {18  let directory = Env.temporaryDirectory() + "/pudu-lang-log-files-example"19  let _made = Io.makeDirectory(directory)20  let path = directory + "/app.clef"21  let file = File.sink(File.Options{..File.defaults(path), formatter: Compact.compact(), rollingInterval: Log.Day, retainedFileCountLimit: Some(7)})22  let logger = Configuration.create().writeTo(file).createLogger()23  for number in [1, 2, 3] {24    logger.information("Processed batch \{Batch\} of \{Size\} items", [Value.int(number), Value.int(number * 100)])25  }26  logger.warning("Batch \{Batch\} was slow", [Value.int(3)])27  Logger.close(&logger)28  var status = 029  for written in Result.unwrapOr(Io.listPaths(directory), []) {30    match Reader.readFile(written) {31      case Ok(events) => {32        for event in events { let _shown = Io.writeLine(show(event.level) + ": " + Event.message(&event)) }33      }34      case Err(problem) => {35        let _said = Io.writeErrorLine(problem)36        status = 137      }38    }39    let _removed = Io.remove(written)40  }41  status42}43