summaryrefslogtreecommitdiffhomepage
path: root/src/rodeo_log.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/rodeo_log.c')
-rw-r--r--src/rodeo_log.c62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/rodeo_log.c b/src/rodeo_log.c
new file mode 100644
index 0000000..0bce445
--- /dev/null
+++ b/src/rodeo_log.c
@@ -0,0 +1,62 @@
+
+// public external
+#include "rodeo_types.h"
+#include "rodeo.h"
+
+static rodeo_log_function logging_function = NULL;
+
+void
+rodeo_log(
+ rodeo_loglevel_t loglevel,
+ const char *format,
+ ...
+)
+{
+ rodeo_string_t formatted;
+ mrodeo_vargs_do(format)
+ {
+ formatted = rodeo_string_format(format, vargs);
+ }
+
+ switch(loglevel)
+ {
+ case rodeo_loglevel_info:
+ rodeo_string_prepend(
+ &formatted,
+ rodeo_string_create("[INFO]: ")
+ );
+ break;
+ case rodeo_loglevel_warning:
+ rodeo_string_prepend(
+ &formatted,
+ rodeo_string_create("\033[33m[WARN]:\033[0m ")
+ );
+ break;
+ case rodeo_loglevel_error:
+ rodeo_string_prepend(
+ &formatted,
+ rodeo_string_create("\033[31;1m[ERROR]:\033[0m ")
+ );
+ break;
+ }
+ rodeo_string_append(
+ &formatted,
+ rodeo_string_create("\n")
+ );
+
+ if(logging_function == NULL)
+ {
+ printf("%s", rodeo_string_to_constcstr(&formatted));
+ }
+ else
+ {
+ logging_function(formatted);
+ }
+}
+
+void
+rodeo_log_function_set(rodeo_log_function rodeo_log_func)
+{
+ logging_function = rodeo_log_func;
+}
+