Log4kLogger

class Log4kLogger(log4k: Logger) : LegacyAbstractLogger, LoggingEventAware(source)

A logger implementation that adapts the Log4k logging facade to a legacy abstract logger.

Every classic org.slf4j.Logger method is inherited from LegacyAbstractLogger/AbstractLogger and funnels into handleNormalizedLoggingCall. Deliberately not overriding the per-level methods is what gives us SLF4J's argument normalization for free — most importantly, extracting a trailing Throwable argument (log.error("failed for {}", id, e)) so it is attached to the event instead of being consumed as a formatting argument. The base class also short-circuits on isXxxEnabled() before normalizing, so disabled levels cost nothing.

Fluent-API calls (logger.atInfo().addKeyValue("tenant", "acme").log("…")) arrive through LoggingEventAware.log instead: SLF4J routes the fully built event here because this logger is LoggingEventAware, so the key-value pairs survive as the log4k event's tags — rather than being flattened into the message text by SLF4J's non-aware fallback.

A SourceLocation cannot be captured here at compile time — the SLF4J API transports no source location, and the log4k-compiler-plugin instruments log4k entry points only (walking the stack at runtime on every call is deliberately avoided). Instead, the bridge recovers one when the caller (or an upstream instrumentation) has recorded it under a known convention:

  • the OpenTelemetry code attributes — code.file.path / code.line.number / code.function.name (the legacy spellings code.filepath / code.lineno / code.function + code.namespace are accepted as well);

  • or logstash-logback-encoder's caller-data fields — caller_file_name / caller_line_number / caller_method_name (+ caller_class_name), the shape Logback-based JSON logs use.

The fluent event's key-value pairs are consulted first; pairs that formed the call site are consumed into it instead of being duplicated as tags. Otherwise the MDC is read — on the caller's thread, before the event enters log4k's asynchronous pipeline, so the propagated context is the caller's. The file key is required (without it no SourceLocation is built); the line and function are best-effort (0 / "" when absent).

Constructors

Link copied to clipboard
constructor(log4k: Logger)

Properties

Link copied to clipboard
open override val isDebugEnabled: Boolean
Link copied to clipboard
open override val isErrorEnabled: Boolean
Link copied to clipboard
open override val isInfoEnabled: Boolean
Link copied to clipboard
open override val isTraceEnabled: Boolean
Link copied to clipboard
open override val isWarnEnabled: Boolean
Link copied to clipboard
open override val name: String

Functions

Link copied to clipboard
@CheckReturnValue
open fun atDebug(): LoggingEventBuilder?
Link copied to clipboard
@CheckReturnValue
open fun atError(): LoggingEventBuilder?
Link copied to clipboard
@CheckReturnValue
open fun atInfo(): LoggingEventBuilder?
Link copied to clipboard
@CheckReturnValue
open fun atLevel(level: Level?): LoggingEventBuilder?
Link copied to clipboard
@CheckReturnValue
open fun atTrace(): LoggingEventBuilder?
Link copied to clipboard
@CheckReturnValue
open fun atWarn(): LoggingEventBuilder?
Link copied to clipboard
open fun debug(msg: String?)
open fun debug(format: String?, arg: Any?)
open fun debug(msg: String?, t: Throwable?)
open fun debug(format: String?, vararg arguments: Any?)
open fun debug(marker: Marker?, msg: String?)
open fun debug(format: String?, arg1: Any?, arg2: Any?)
open fun debug(marker: Marker?, format: String?, arg: Any?)
open fun debug(marker: Marker?, msg: String?, t: Throwable?)
open fun debug(marker: Marker?, format: String?, vararg arguments: Any?)
open fun debug(marker: Marker?, format: String?, arg1: Any?, arg2: Any?)
Link copied to clipboard
open fun error(msg: String?)
open fun error(format: String?, arg: Any?)
open fun error(msg: String?, t: Throwable?)
open fun error(format: String?, vararg arguments: Any?)
open fun error(marker: Marker?, msg: String?)
open fun error(format: String?, arg1: Any?, arg2: Any?)
open fun error(marker: Marker?, format: String?, arg: Any?)
open fun error(marker: Marker?, msg: String?, t: Throwable?)
open fun error(marker: Marker?, format: String?, vararg arguments: Any?)
open fun error(marker: Marker?, format: String?, arg1: Any?, arg2: Any?)
Link copied to clipboard
open override fun getName(): String
Link copied to clipboard
open fun info(msg: String?)
open fun info(format: String?, arg: Any?)
open fun info(msg: String?, t: Throwable?)
open fun info(format: String?, vararg arguments: Any?)
open fun info(marker: Marker?, msg: String?)
open fun info(format: String?, arg1: Any?, arg2: Any?)
open fun info(marker: Marker?, format: String?, arg: Any?)
open fun info(marker: Marker?, msg: String?, t: Throwable?)
open fun info(marker: Marker?, format: String?, vararg arguments: Any?)
open fun info(marker: Marker?, format: String?, arg1: Any?, arg2: Any?)
Link copied to clipboard
open override fun isDebugEnabled(): Boolean
open fun isDebugEnabled(marker: Marker?): Boolean
Link copied to clipboard
open fun isEnabledForLevel(level: Level?): Boolean
Link copied to clipboard
open override fun isErrorEnabled(): Boolean
open fun isErrorEnabled(marker: Marker?): Boolean
Link copied to clipboard
open override fun isInfoEnabled(): Boolean
open fun isInfoEnabled(marker: Marker?): Boolean
Link copied to clipboard
open override fun isTraceEnabled(): Boolean
open fun isTraceEnabled(marker: Marker?): Boolean
Link copied to clipboard
open override fun isWarnEnabled(): Boolean
open fun isWarnEnabled(marker: Marker?): Boolean
Link copied to clipboard
open override fun log(event: LoggingEvent)

The fluent-API path: forwards the built event's message, arguments, and throwable, and turns its key-value pairs into the log4k event's tags. A null key-value value is rendered as "null", since log4k tag values are non-null. Key-value pairs recorded under the OpenTelemetry code conventions become the event's SourceLocation (falling back to the MDC) and are consumed rather than kept as tags.

Link copied to clipboard
open fun makeLoggingEventBuilder(level: Level?): LoggingEventBuilder?
Link copied to clipboard
open fun trace(msg: String?)
open fun trace(format: String?, arg: Any?)
open fun trace(msg: String?, t: Throwable?)
open fun trace(format: String?, vararg arguments: Any?)
open fun trace(marker: Marker?, msg: String?)
open fun trace(format: String?, arg1: Any?, arg2: Any?)
open fun trace(marker: Marker?, format: String?, arg: Any?)
open fun trace(marker: Marker?, msg: String?, t: Throwable?)
open fun trace(marker: Marker?, format: String?, vararg argArray: Any?)
open fun trace(marker: Marker?, format: String?, arg1: Any?, arg2: Any?)
Link copied to clipboard
open fun warn(msg: String?)
open fun warn(format: String?, arg: Any?)
open fun warn(msg: String?, t: Throwable?)
open fun warn(format: String?, vararg arguments: Any?)
open fun warn(marker: Marker?, msg: String?)
open fun warn(format: String?, arg1: Any?, arg2: Any?)
open fun warn(marker: Marker?, format: String?, arg: Any?)
open fun warn(marker: Marker?, msg: String?, t: Throwable?)
open fun warn(marker: Marker?, format: String?, vararg arguments: Any?)
open fun warn(marker: Marker?, format: String?, arg1: Any?, arg2: Any?)