Skip to content

Commit

Permalink
add back method duplication to fix fqcn issue
Browse files Browse the repository at this point in the history
  • Loading branch information
oshai committed Jul 12, 2023
1 parent ac65cc9 commit b8469b8
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 48 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,20 @@ import io.github.oshai.kotlinlogging.internal.toStringSafe
import io.github.oshai.kotlinlogging.slf4j.toSlf4j
import org.slf4j.event.EventConstants
import org.slf4j.helpers.MessageFormatter
import org.slf4j.spi.CallerBoundaryAware
import org.slf4j.spi.LocationAwareLogger

/**
* A class wrapping a [LocationAwareLogger] instance preserving location information with the
* correct fully qualified class name.
*/
internal class LocationAwareKLogger(override val underlyingLogger: LocationAwareLogger) :
KLogger, DelegatingKLogger<LocationAwareLogger>, Slf4jLogger<LocationAwareLogger>() {
override val fqcn: String?
get() = LocationAwareKLogger::class.java.name
KLogger, DelegatingKLogger<LocationAwareLogger>, Slf4jLogger() {

override val name: String
get() = underlyingLogger.name

private val fqcn: String? = LocationAwareKLogger::class.java.name

private val ENTRY = io.github.oshai.kotlinlogging.KMarkerFactory.getMarker("ENTRY").toSlf4j()
private val EXIT = io.github.oshai.kotlinlogging.KMarkerFactory.getMarker("EXIT").toSlf4j()
Expand All @@ -30,7 +34,37 @@ internal class LocationAwareKLogger(override val underlyingLogger: LocationAware
private val EXITONLY = "exit"
private val EXITMESSAGE = "exit with ({})"

override fun logWithoutPayload(
override fun isLoggingEnabledFor(level: Level, marker: Marker?): Boolean {
return isLoggingEnabledFor(underlyingLogger, level, marker)
}
override fun at(level: Level, marker: Marker?, block: KLoggingEventBuilder.() -> Unit) {
if (isLoggingEnabledFor(level, marker)) {
KLoggingEventBuilder().apply(block).run {
if (payload != null) {
logWithPayload(this, level, marker)
} else {
logWithoutPayload(this, level, marker)
}
}
}
}

private fun logWithPayload(
kLoggingEventBuilder: KLoggingEventBuilder,
level: Level,
marker: Marker?
) {
val builder = underlyingLogger.atLevel(level.toSlf4j())
marker?.toSlf4j()?.let { builder.addMarker(it) }
kLoggingEventBuilder.payload?.forEach { (key, value) -> builder.addKeyValue(key, value) }
builder.setCause(kLoggingEventBuilder.cause)
if (builder is CallerBoundaryAware) {
builder.setCallerBoundary(fqcn)
}
builder.log(kLoggingEventBuilder.message)
}

private fun logWithoutPayload(
kLoggingEventBuilder: KLoggingEventBuilder,
level: Level,
marker: Marker?
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,40 @@ import org.slf4j.Logger
* methods
*/
internal class LocationIgnorantKLogger(override val underlyingLogger: Logger) :
KLogger, DelegatingKLogger<Logger>, Slf4jLogger<Logger>() {
KLogger, DelegatingKLogger<Logger>, Slf4jLogger() {

override val fqcn: String?
get() = null
override val name: String
get() = underlyingLogger.name

override fun logWithoutPayload(
override fun isLoggingEnabledFor(level: Level, marker: Marker?): Boolean {
return isLoggingEnabledFor(underlyingLogger, level, marker)
}

override fun at(level: Level, marker: Marker?, block: KLoggingEventBuilder.() -> Unit) {
if (isLoggingEnabledFor(level, marker)) {
KLoggingEventBuilder().apply(block).run {
if (payload != null) {
logWithPayload(this, level, marker)
} else {
logWithoutPayload(this, level, marker)
}
}
}
}

private fun logWithPayload(
kLoggingEventBuilder: KLoggingEventBuilder,
level: Level,
marker: Marker?
) {
val builder = underlyingLogger.atLevel(level.toSlf4j())
marker?.toSlf4j()?.let { builder.addMarker(it) }
kLoggingEventBuilder.payload?.forEach { (key, value) -> builder.addKeyValue(key, value) }
builder.setCause(kLoggingEventBuilder.cause)
builder.log(kLoggingEventBuilder.message)
}

private fun logWithoutPayload(
kLoggingEventBuilder: KLoggingEventBuilder,
level: Level,
marker: Marker?
Expand Down
Original file line number Diff line number Diff line change
@@ -1,54 +1,18 @@
package io.github.oshai.kotlinlogging.slf4j.internal

import io.github.oshai.kotlinlogging.DelegatingKLogger
import io.github.oshai.kotlinlogging.KLogger
import io.github.oshai.kotlinlogging.KLoggingEventBuilder
import io.github.oshai.kotlinlogging.Level
import io.github.oshai.kotlinlogging.Marker
import io.github.oshai.kotlinlogging.slf4j.toSlf4j
import org.slf4j.Logger
import org.slf4j.spi.CallerBoundaryAware

public abstract class Slf4jLogger<T : Logger> : KLogger, DelegatingKLogger<T> {
public abstract class Slf4jLogger : KLogger {

override val name: String
get() = underlyingLogger.name

protected abstract val fqcn: String?
override fun at(level: Level, marker: Marker?, block: KLoggingEventBuilder.() -> Unit) {
if (isLoggingEnabledFor(level, marker)) {
KLoggingEventBuilder().apply(block).run {
if (payload != null) {
logWithPayload(this, level, marker)
} else {
logWithoutPayload(this, level, marker)
}
}
}
}

protected abstract fun logWithoutPayload(
kLoggingEventBuilder: KLoggingEventBuilder,
level: Level,
marker: Marker?
)

private fun logWithPayload(
kLoggingEventBuilder: KLoggingEventBuilder,
protected fun isLoggingEnabledFor(
underlyingLogger: Logger,
level: Level,
marker: Marker?
) {
val builder = underlyingLogger.atLevel(level.toSlf4j())
marker?.toSlf4j()?.let { builder.addMarker(it) }
kLoggingEventBuilder.payload?.forEach { (key, value) -> builder.addKeyValue(key, value) }
builder.setCause(kLoggingEventBuilder.cause)
if (builder is CallerBoundaryAware) {
builder.setCallerBoundary(fqcn)
}
builder.log(kLoggingEventBuilder.message)
}

override fun isLoggingEnabledFor(level: Level, marker: Marker?): Boolean {
): Boolean {
return when (level) {
Level.TRACE -> underlyingLogger.isTraceEnabled(marker?.toSlf4j())
Level.DEBUG -> underlyingLogger.isDebugEnabled(marker?.toSlf4j())
Expand Down

0 comments on commit b8469b8

Please sign in to comment.