aboutsummaryrefslogtreecommitdiff
path: root/core/log/multi_logger.odin
blob: 6122554bb735821273ccdf5ea1cee70220d45d3c (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
package log


Multi_Logger_Data :: struct {
	loggers: []Logger,
}

create_multi_logger :: proc(logs: ..Logger, allocator := context.allocator) -> Logger {
	data := new(Multi_Logger_Data, allocator)
	data.loggers = make([]Logger, len(logs), allocator)
	copy(data.loggers, logs)
	return Logger{multi_logger_proc, data, Level.Debug, nil}
}

destroy_multi_logger :: proc(log: Logger, allocator := context.allocator) {
	data := (^Multi_Logger_Data)(log.data)
	delete(data.loggers, allocator)
	free(data, allocator)
}

multi_logger_proc :: proc(logger_data: rawptr, level: Level, text: string,
                          options: Options, location := #caller_location) {
	data := cast(^Multi_Logger_Data)logger_data
	for log in data.loggers {
		if level < log.lowest_level {
			return
		}
		log.procedure(log.data, level, text, log.options, location)
	}
}