multi_logger.odin 715 B

1234567891011121314151617181920212223242526272829
  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. free(log.data);
  13. log^ = nil_logger();
  14. }
  15. multi_logger_proc :: proc(logger_data: rawptr, level: Level, text: string,
  16. options: Options, location := #caller_location) {
  17. data := cast(^Multi_Logger_Data)logger_data;
  18. for log in data.loggers {
  19. if level < log.lowest_level {
  20. return;
  21. }
  22. log.procedure(log.data, level, text, log.options, location);
  23. }
  24. }