multi_logger.odin 768 B

12345678910111213141516171819202122232425262728293031
  1. package log
  2. Multi_Logger_Data :: struct {
  3. loggers: []Logger,
  4. }
  5. create_multi_logger :: proc(logs: ..Logger) -> Logger {
  6. data := new(Multi_Logger_Data)
  7. data.loggers = make([]Logger, len(logs))
  8. copy(data.loggers, logs)
  9. return Logger{multi_logger_proc, data, Level.Debug, nil}
  10. }
  11. destroy_multi_logger :: proc(log : ^Logger) {
  12. data := (^Multi_Logger_Data)(log.data)
  13. delete(data.loggers)
  14. free(log.data)
  15. log^ = nil_logger()
  16. }
  17. multi_logger_proc :: proc(logger_data: rawptr, level: Level, text: string,
  18. options: Options, location := #caller_location) {
  19. data := cast(^Multi_Logger_Data)logger_data
  20. for log in data.loggers {
  21. if level < log.lowest_level {
  22. return
  23. }
  24. log.procedure(log.data, level, text, log.options, location)
  25. }
  26. }