aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/README.md1
-rw-r--r--examples/log.tm53
2 files changed, 54 insertions, 0 deletions
diff --git a/examples/README.md b/examples/README.md
index 174546b6..3c8e6e15 100644
--- a/examples/README.md
+++ b/examples/README.md
@@ -4,5 +4,6 @@
(using [libaco](https://libaco.org)).
- [game/](game/): An example game using raylib.
- [ini.tm](ini.tm): An INI configuration file reader tool.
+- [log.tm](log.tm): A logging utility.
- [vectors.tm](vectors.tm): A math vector library.
- [wrap.tm](wrap.tm): A command-line program to wrap text.
diff --git a/examples/log.tm b/examples/log.tm
new file mode 100644
index 00000000..765fc61f
--- /dev/null
+++ b/examples/log.tm
@@ -0,0 +1,53 @@
+use <time.h>
+use <stdio.h>
+
+timestamp_format := CString("%F %T")
+
+logfiles := {:Path}
+
+func _timestamp()->Text:
+ return inline C (
+ ({
+ char *str = GC_MALLOC_ATOMIC(20);
+ time_t t;
+ time(&t);
+ struct tm *tm_info;
+ tm_info = localtime(&t);
+ strftime(str, 20, "%F %T", tm_info);
+ Text$format("%s", str);
+ })
+ ) : Text
+
+func info(text:Text, newline=yes):
+ say("$\[2]⚫ $text$\[]", newline)
+ for file in logfiles:
+ file:append("$(_timestamp()) [info] $text$\n")
+
+func debug(text:Text, newline=yes):
+ say("$\[32]🟢 $text$\[]", newline)
+ for file in logfiles:
+ file:append("$(_timestamp()) [debug] $text$\n")
+
+func warn(text:Text, newline=yes):
+ say("$\[33;1]🟡 $text$\[]", newline)
+ for file in logfiles:
+ file:append("$(_timestamp()) [warn] $text$\n")
+
+func error(text:Text, newline=yes):
+ say("$\[31;1]🔴 $text$\[]", newline)
+ for file in logfiles:
+ file:append("$(_timestamp()) [error] $text$\n")
+
+func add_logfile(file:Path):
+ logfiles:add(file)
+
+func remove_logfile(file:Path):
+ logfiles:remove(file)
+
+func main():
+ add_logfile((./log.txt))
+ >> info("Hello")
+ >> debug("Hello")
+ >> warn("Hello")
+ >> error("Hello")
+