aboutsummaryrefslogtreecommitdiff
path: root/core/sys/orca/odin.odin
blob: bdda9aa5b572b9b148fc17a79d694f0f2deb145f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package orca

// File contains Odin specific helpers.

import "base:runtime"

create_odin_logger :: proc(lowest := runtime.Logger_Level.Debug, ident := "") -> runtime.Logger {
	return runtime.Logger{odin_logger_proc, nil, lowest, {}}
}

log_typed :: proc "contextless" (level: log_level, msg: cstring, loc := #caller_location) {
	log_ext(
		level,
		cstring(raw_data(loc.procedure)),
		cstring(raw_data(loc.file_path)),
		loc.line,
		msg,
	)
}

odin_logger_proc :: proc(logger_data: rawptr, level: runtime.Logger_Level, text: string, options: runtime.Logger_Options, location := #caller_location) {
	cbuf := make([]byte, len(text)+1, context.temp_allocator)
	copy(cbuf, text)
	ctext := cstring(raw_data(cbuf))

	switch level {
	case .Debug, .Info: log_typed(.INFO, ctext, location)
	case .Warning:       log_typed(.WARNING, ctext, location)
	case:                fallthrough
	case .Error, .Fatal: log_typed(.ERROR, ctext, location)
	}
}