| 1 | // Copyright (c) 2019-2024 Alexander Medvednikov. All rights reserved. |
| 2 | // Use of this source code is governed by an MIT license |
| 3 | // that can be found in the LICENSE file. |
| 4 | module log |
| 5 | |
| 6 | // set_logger changes the default logger instance to the one provided by the user. |
| 7 | // The existing logger will be freed, *after* the change is done. |
| 8 | @[manualfree] |
| 9 | pub fn set_logger(logger &Logger) { |
| 10 | // C.printf(c"set_logger logger: %p | old logger: %p\n", logger, default_logger) |
| 11 | old_logger := unsafe { default_logger } |
| 12 | default_logger = unsafe { logger } |
| 13 | free_logger(old_logger) |
| 14 | } |
| 15 | |
| 16 | // get_logger returns a pointer to the current default logger instance |
| 17 | @[unsafe] |
| 18 | pub fn get_logger() &Logger { |
| 19 | return default_logger |
| 20 | } |
| 21 | |
| 22 | // get_level returns the log level of the default Logger instance |
| 23 | pub fn get_level() Level { |
| 24 | return default_logger.get_level() |
| 25 | } |
| 26 | |
| 27 | // set_level changes the log level of the default Logger instance |
| 28 | pub fn set_level(level Level) { |
| 29 | default_logger.set_level(level) |
| 30 | } |
| 31 | |
| 32 | // fatal logs a `fatal` message, using the default Logger instance |
| 33 | @[noreturn] |
| 34 | pub fn fatal(s string) { |
| 35 | default_logger.fatal(s) |
| 36 | // the compiler currently has no way to mark functions in an interface |
| 37 | // as @[noreturn], so we need to make sure this is never returning ourselves |
| 38 | exit(1) |
| 39 | } |
| 40 | |
| 41 | // error logs an `error` message, using the default Logger instance |
| 42 | pub fn error(s string) { |
| 43 | default_logger.error(s) |
| 44 | } |
| 45 | |
| 46 | // error logs a `warning` message, using the default Logger instance |
| 47 | pub fn warn(s string) { |
| 48 | default_logger.warn(s) |
| 49 | } |
| 50 | |
| 51 | // info logs an `info` message, using the default Logger instance |
| 52 | pub fn info(s string) { |
| 53 | default_logger.info(s) |
| 54 | } |
| 55 | |
| 56 | // debug logs a `debug` message, using the default Logger instance |
| 57 | pub fn debug(s string) { |
| 58 | default_logger.debug(s) |
| 59 | } |
| 60 | |
| 61 | // set_always_flush called with true, will make the log flush after every single .fatal(), .error(), .warn(), .info(), .debug() call. |
| 62 | pub fn set_always_flush(should_flush_on_every_message bool) { |
| 63 | default_logger.set_always_flush(should_flush_on_every_message) |
| 64 | } |
| 65 | |