From ff1e73ce6dbd35cba44444be3c4e6822fa06cfc7 Mon Sep 17 00:00:00 2001 From: Sasha Koshka Date: Thu, 12 Dec 2024 12:38:06 -0500 Subject: [PATCH] Add logging provider --- document.go | 6 ++++++ providers/all.go | 2 ++ providers/log/log.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 providers/log/log.go diff --git a/document.go b/document.go index 1857277..6de99bc 100644 --- a/document.go +++ b/document.go @@ -91,6 +91,12 @@ func (this *Document) Rel (name string) (string, error) { return name, nil } +// Name returns the document's name, which is a path relative to its +// environment. +func (this *Document) Name () string { + return this.name +} + func (this *Document) dir () string { directory := this.name ext := filepath.Ext(directory) diff --git a/providers/all.go b/providers/all.go index b165e95..576d122 100644 --- a/providers/all.go +++ b/providers/all.go @@ -2,6 +2,7 @@ package providers import "git.tebibyte.media/sashakoshka/step" import fpos "git.tebibyte.media/sashakoshka/step/providers/os" +import fplog "git.tebibyte.media/sashakoshka/step/providers/log" import fphttp "git.tebibyte.media/sashakoshka/step/providers/http" import fppath "git.tebibyte.media/sashakoshka/step/providers/path" import fpmime "git.tebibyte.media/sashakoshka/step/providers/mime" @@ -15,6 +16,7 @@ import fpmarkdown "git.tebibyte.media/sashakoshka/step/providers/markdown" func All () []step.Provider { return []step.Provider { new(fpos.Provider), + new(fplog.Provider), new(fphttp.Provider), new(fppath.Provider), new(fpmime.Provider), diff --git a/providers/log/log.go b/providers/log/log.go new file mode 100644 index 0000000..916f6aa --- /dev/null +++ b/providers/log/log.go @@ -0,0 +1,44 @@ +package log + +import "fmt" +import "log" +import "html/template" +import "git.tebibyte.media/sashakoshka/step" + +var _ step.FuncProviderFor = new(Provider) + +// Provider provides MIME functions. +type Provider struct { + +} + +// Package fulfills the step.Provider interface. +func (this *Provider) Package () string { + return "mime" +} + +// FuncMapFor fulfills the step.FuncProviderFor interface. +func (this *Provider) FuncMapFor (document *step.Document) template.FuncMap { + stat := &state { + document: document, + } + return template.FuncMap { + "println": stat.funcPrintln, + "errorln": stat.funcPrintln, + "debugln": stat.funcDebugln, + } +} + +type state struct { + document *step.Document +} + +func (this *state) funcPrintln (v ...any) string { + log.Printf("(i) %s: %s", this.document.Name, fmt.Sprintln(v)) + return "" +} + +func (this *state) funcDebugln (v ...any) string { + log.Printf("DBG %s: %s", this.document.Name, fmt.Sprintln(v)) + return "" +}