Logging.kt

  1. package com.hexagonkt.core.logging

  2. import java.lang.System.Logger.Level.*
  3. import com.hexagonkt.core.Jvm

  4. internal val useColor: Boolean by lazy { Jvm.systemSetting("hexagonkt_logging_color", true) }
  5. internal val defaultLoggerName: String by lazy {
  6.     Jvm.systemSetting("hexagonkt_logging_logger_name", "com.hexagonkt.core.logging")
  7. }

  8. /** Default logger for when you feel too lazy to declare one. */
  9. val logger: Logger by lazy { Logger(defaultLoggerName) }

  10. /**
  11.  * Use this [T] to log a message with a prefix using [TRACE] level.
  12.  *
  13.  * [com.hexagonkt.core.logging.logger] must have the [TRACE] level enabled.
  14.  *
  15.  * @receiver Object which string representation will be logged.
  16.  * @param T Type of the logged object.
  17.  * @param prefix Prefix for the logging message.
  18.  * @return The receiver reference for chaining methods.
  19.  */
  20. fun <T> T.trace(prefix: String = ""): T =
  21.     apply { logger.trace { "$prefix$this" } }

  22. /**
  23.  * Use this [T] to log a message with a prefix using [DEBUG] level.
  24.  *
  25.  * [com.hexagonkt.core.logging.logger] must have the [DEBUG] level enabled.
  26.  *
  27.  * @receiver Object which string representation will be logged.
  28.  * @param T Type of the logged object.
  29.  * @param prefix Prefix for the logging message.
  30.  * @return The receiver reference for chaining methods.
  31.  */
  32. fun <T> T.debug(prefix: String = ""): T =
  33.     apply { logger.debug { "$prefix$this" } }

  34. /**
  35.  * Use this [T] to log a message with a prefix using [INFO] level.
  36.  *
  37.  * [com.hexagonkt.core.logging.logger] must have the [INFO] level enabled.
  38.  *
  39.  * @receiver Object which string representation will be logged.
  40.  * @param T Type of the logged object.
  41.  * @param prefix Prefix for the logging message.
  42.  * @return The receiver reference for chaining methods.
  43.  */
  44. fun <T> T.info(prefix: String = ""): T =
  45.     apply { logger.info { "$prefix$this" } }