diff --git a/core-kotlin/pom.xml b/core-kotlin/pom.xml index fa16dad496..afa7d8a963 100644 --- a/core-kotlin/pom.xml +++ b/core-kotlin/pom.xml @@ -60,7 +60,6 @@ org.jetbrains.kotlin kotlin-reflect ${kotlin-reflect.version} - test org.jetbrains.kotlinx @@ -224,10 +223,11 @@ - 1.2.41 - 1.2.41 - 1.2.41 - 1.2.41 + UTF-8 + 1.2.51 + 1.2.51 + 1.2.51 + 1.2.51 0.22.5 0.9.2 1.5.0 diff --git a/core-kotlin/src/main/kotlin/com/baeldung/kotlin/logging/LoggerAsExtensionOnAny.kt b/core-kotlin/src/main/kotlin/com/baeldung/kotlin/logging/LoggerAsExtensionOnAny.kt new file mode 100644 index 0000000000..32d968fff5 --- /dev/null +++ b/core-kotlin/src/main/kotlin/com/baeldung/kotlin/logging/LoggerAsExtensionOnAny.kt @@ -0,0 +1,30 @@ +package com.baeldung.kotlin.logging + +import org.slf4j.Logger + +open class LoggerAsExtensionOnAny { + val logger = logger() + + fun log(s: String) { + logger().info(s) + logger.info(s) + } +} + +class ExtensionSubclass : LoggerAsExtensionOnAny() + +fun T.logger(): Logger = getLogger(getClassForLogging(javaClass)) + +fun main(args: Array) { + LoggerAsExtensionOnAny().log("test") + ExtensionSubclass().log("sub") + "foo".logger().info("foo") + 1.logger().info("uh-oh!") + SomeOtherClass().logger() +} + +class SomeOtherClass { + fun logger(): String { + return "foo" + } +} \ No newline at end of file diff --git a/core-kotlin/src/main/kotlin/com/baeldung/kotlin/logging/LoggerAsExtensionOnMarkerInterface.kt b/core-kotlin/src/main/kotlin/com/baeldung/kotlin/logging/LoggerAsExtensionOnMarkerInterface.kt new file mode 100644 index 0000000000..b33d4c9f93 --- /dev/null +++ b/core-kotlin/src/main/kotlin/com/baeldung/kotlin/logging/LoggerAsExtensionOnMarkerInterface.kt @@ -0,0 +1,30 @@ +package com.baeldung.kotlin.logging + +import org.slf4j.Logger +import org.slf4j.LoggerFactory + +interface Logging + +inline fun T.logger(): Logger = + //Wrong logger name! + //LoggerFactory.getLogger(javaClass.name + " w/interface") + LoggerFactory.getLogger(getClassForLogging(T::class.java).name + " w/interface") + +open class LoggerAsExtensionOnMarkerInterface : Logging { + companion object : Logging { + val logger = logger() + } + + fun log(s: String) { + logger().info(s) + logger.info(s) + } +} + +class MarkerExtensionSubclass : LoggerAsExtensionOnMarkerInterface() + +fun main(args: Array) { + LoggerAsExtensionOnMarkerInterface().log("test") + MarkerExtensionSubclass().log("sub") + "foo".logger().info("foo") +} \ No newline at end of file diff --git a/core-kotlin/src/main/kotlin/com/baeldung/kotlin/logging/LoggerAsProperty.kt b/core-kotlin/src/main/kotlin/com/baeldung/kotlin/logging/LoggerAsProperty.kt new file mode 100644 index 0000000000..979b3b3a10 --- /dev/null +++ b/core-kotlin/src/main/kotlin/com/baeldung/kotlin/logging/LoggerAsProperty.kt @@ -0,0 +1,17 @@ +package com.baeldung.kotlin.logging + +open class LoggerAsProperty { + private val logger = getLogger(javaClass) + + fun log(s: String) { + logger.info(s) + } + +} + +class PropertySubclass : LoggerAsProperty() + +fun main(args: Array) { + LoggerAsProperty().log("test") + PropertySubclass().log("sub") +} \ No newline at end of file diff --git a/core-kotlin/src/main/kotlin/com/baeldung/kotlin/logging/LoggerAsPropertyDelegate.kt b/core-kotlin/src/main/kotlin/com/baeldung/kotlin/logging/LoggerAsPropertyDelegate.kt new file mode 100644 index 0000000000..23f04722be --- /dev/null +++ b/core-kotlin/src/main/kotlin/com/baeldung/kotlin/logging/LoggerAsPropertyDelegate.kt @@ -0,0 +1,47 @@ +package com.baeldung.kotlin.logging + +import org.slf4j.Logger +import kotlin.properties.ReadOnlyProperty +import kotlin.reflect.KProperty + +open class LoggerAsPropertyDelegate { + private val lazyLogger by lazyLogger() + protected val logger by LoggerDelegate() + private val logger2 = logger + + companion object { + private val lazyLoggerComp by lazyLogger() + private val loggerComp by LoggerDelegate() + } + + open fun log(s: String) { + logger.info(s) + logger2.info(s) + lazyLogger.info(s) + loggerComp.info(s) + lazyLoggerComp.info(s) + } + +} + +class DelegateSubclass : LoggerAsPropertyDelegate() { + override fun log(s: String) { + logger.info("-- in sub") + super.log(s) + } +} + +fun lazyLogger(forClass: Class<*>): Lazy = + lazy { getLogger(getClassForLogging(forClass)) } + +fun T.lazyLogger(): Lazy = lazyLogger(javaClass) + +fun main(args: Array) { + LoggerAsPropertyDelegate().log("test") + DelegateSubclass().log("sub") +} + +class LoggerDelegate : ReadOnlyProperty { + override fun getValue(thisRef: R, property: KProperty<*>) = + getLogger(getClassForLogging(thisRef.javaClass)) +} diff --git a/core-kotlin/src/main/kotlin/com/baeldung/kotlin/logging/LoggerInCompanionObject.kt b/core-kotlin/src/main/kotlin/com/baeldung/kotlin/logging/LoggerInCompanionObject.kt new file mode 100644 index 0000000000..f973606369 --- /dev/null +++ b/core-kotlin/src/main/kotlin/com/baeldung/kotlin/logging/LoggerInCompanionObject.kt @@ -0,0 +1,44 @@ +package com.baeldung.kotlin.logging + +open class LoggerInCompanionObject { + companion object { + private val loggerWithExplicitClass = getLogger(LoggerInCompanionObject::class.java) + @Suppress("JAVA_CLASS_ON_COMPANION") + private val loggerWithWrongClass = getLogger(javaClass) + @Suppress("JAVA_CLASS_ON_COMPANION") + private val logger = getLogger(javaClass.enclosingClass) + } + + fun log(s: String) { + loggerWithExplicitClass.info(s) + loggerWithWrongClass.info(s) + logger.info(s) + } + + class Inner { + companion object { + private val loggerWithExplicitClass = getLogger(Inner::class.java) + @Suppress("JAVA_CLASS_ON_COMPANION") + @JvmStatic + private val loggerWithWrongClass = getLogger(javaClass) + @Suppress("JAVA_CLASS_ON_COMPANION") + @JvmStatic + private val logger = getLogger(javaClass.enclosingClass) + } + + fun log(s: String) { + loggerWithExplicitClass.info(s) + loggerWithWrongClass.info(s) + logger.info(s) + } + } + +} + +class CompanionSubclass : LoggerInCompanionObject() + +fun main(args: Array) { + LoggerInCompanionObject().log("test") + LoggerInCompanionObject.Inner().log("test") + CompanionSubclass().log("sub") +} \ No newline at end of file diff --git a/core-kotlin/src/main/kotlin/com/baeldung/kotlin/logging/Util.kt b/core-kotlin/src/main/kotlin/com/baeldung/kotlin/logging/Util.kt new file mode 100644 index 0000000000..b9c0d9e34c --- /dev/null +++ b/core-kotlin/src/main/kotlin/com/baeldung/kotlin/logging/Util.kt @@ -0,0 +1,13 @@ +package com.baeldung.kotlin.logging + +import org.slf4j.Logger +import org.slf4j.LoggerFactory +import kotlin.reflect.full.companionObject + +fun getLogger(forClass: Class<*>): Logger = LoggerFactory.getLogger(forClass) + +fun getClassForLogging(javaClass: Class): Class<*> { + return javaClass.enclosingClass?.takeIf { + it.kotlin.companionObject?.java == javaClass + } ?: javaClass +} \ No newline at end of file