扩展函数

日志

import org.slf4j.Logger
import org.slf4j.LoggerFactory

/**
 * 日志扩展
 *
 * @author dream
 * @version 1.0
 * @since 2025/7/25 15:23
 */

/**
 * 为任意对象提供一个日志记录器(Logger)实例。
 * 通过该扩展属性,可以方便地获取与对象所属类相关联的日志记录器。
 *
 * @return 与当前对象所属类相关联的日志记录器实例。
 */
val <T : Any> T.log: Logger
    get() = LoggerFactory.getLogger(this.javaClass)


/**
 * 记录调试级别的日志信息。
 * 如果调试级别的日志记录已启用,则执行给定的 lambda 表达式以获取日志消息并记录该消息。
 *
 * @param lazyMessage 一个 lambda 表达式,用于延迟计算日志消息。
 */
inline fun Logger.debug(lazyMessage: () -> String) {
    if (isDebugEnabled) debug(lazyMessage())
}

/**
 * 记录信息级别的日志。
 * 该函数是内联函数,用于在记录日志时避免创建额外的对象。它接受一个lambda表达式作为消息,该消息仅在日志级别为INFO时才会被计算和记录。
 *
 * @param lazyMessage 一个lambda表达式,返回要记录的信息字符串。
 */
inline fun Logger.info(lazyMessage: () -> String) {
    if (isInfoEnabled) info(lazyMessage())
}

/**
 * 记录警告级别的日志信息。
 * 如果警告级别的日志记录已启用,则执行给定的 lambda 表达式以获取日志消息并记录该消息。
 *
 * @param lazyMessage 一个 lambda 表达式,用于延迟计算日志消息。
 */
inline fun Logger.warn(lazyMessage: () -> String) {
    if (isWarnEnabled) warn(lazyMessage())
}

/**
 * 记录错误级别的日志信息。
 * 如果错误级别的日志记录已启用,则执行给定的 lambda 表达式以获取日志消息并记录该消息。
 *
 * @param lazyMessage 一个 lambda 表达式,用于延迟计算日志消息。
 */
inline fun Logger.error(lazyMessage: () -> String) {
    if (isErrorEnabled) error(lazyMessage())
}

/**
 * 记录错误级别的日志信息,并附带异常信息。
 * 如果错误级别的日志记录已启用,则执行给定的 lambda 表达式以获取日志消息并记录该消息和异常。
 *
 * @param throwable 要记录的异常。
 * @param lazyMessage 一个 lambda 表达式,用于延迟计算日志消息。
 */
inline fun Logger.error(throwable: Throwable, lazyMessage: () -> String) {
    if (isErrorEnabled) error(lazyMessage(), throwable)
}