Skip to content

Commit 2ab88ac

Browse files
committed
Add CRT logger implementation
1 parent 7c3c73f commit 2ab88ac

File tree

10 files changed

+147
-5
lines changed

10 files changed

+147
-5
lines changed

runtime/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ subprojects {
6161
}
6262
}
6363

64-
named("jvmTest") {
64+
findByName("jvmTest")?.run {
6565
dependencies {
6666
implementation(libraries.kotlinx.coroutines.debug)
6767
implementation(libraries.kotest.assertions.core.jvm)
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/*
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
description = "Logging provider based on CRT"
6+
extra["displayName"] = "Smithy :: Kotlin :: Observability :: CRT"
7+
extra["moduleName"] = "aws.smithy.kotlin.runtime.telemetry.logging.crt"
8+
9+
kotlin {
10+
sourceSets {
11+
commonMain {
12+
dependencies {
13+
api(project(":runtime:observability:telemetry-api"))
14+
}
15+
}
16+
17+
nativeMain {
18+
dependencies {
19+
api(libs.crt.kotlin)
20+
}
21+
}
22+
23+
all {
24+
languageSettings.optIn("aws.smithy.kotlin.runtime.InternalApi")
25+
}
26+
}
27+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package aws.smithy.kotlin.runtime.telemetry.logging.crt
7+
8+
import aws.smithy.kotlin.runtime.telemetry.logging.LogLevel
9+
import aws.smithy.kotlin.runtime.telemetry.logging.LogRecordBuilder
10+
import aws.smithy.kotlin.runtime.telemetry.logging.MessageSupplier
11+
12+
public class CrtLogRecordBuilder(
13+
private val delegate: CrtLogger,
14+
private val level: LogLevel
15+
) : LogRecordBuilder {
16+
private var cause: Throwable? = null
17+
private var msg: (() -> String)? = null
18+
private val kvp by lazy { mutableMapOf<String, Any>() }
19+
20+
override fun setCause(ex: Throwable) {
21+
cause = ex
22+
}
23+
24+
override fun setMessage(message: String) {
25+
msg = { message }
26+
}
27+
28+
override fun setMessage(message: MessageSupplier) {
29+
msg = message
30+
}
31+
32+
override fun setKeyValuePair(key: String, value: Any) {
33+
kvp[key] = value
34+
}
35+
36+
override fun emit() {
37+
val message = requireNotNull(msg) { "no message provided to LogRecordBuilder" }
38+
39+
val logMethod = when(level) {
40+
LogLevel.Trace -> delegate::trace
41+
LogLevel.Debug -> delegate::debug
42+
LogLevel.Info -> delegate::info
43+
LogLevel.Warning -> delegate::warn
44+
LogLevel.Error -> delegate::error
45+
}
46+
47+
logMethod(cause, message)
48+
}
49+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package aws.smithy.kotlin.runtime.telemetry.logging.crt
7+
8+
import aws.sdk.kotlin.crt.WithCrt
9+
import aws.sdk.kotlin.crt.log
10+
import aws.smithy.kotlin.runtime.telemetry.logging.LogLevel
11+
import aws.smithy.kotlin.runtime.telemetry.logging.LogRecordBuilder
12+
import aws.smithy.kotlin.runtime.telemetry.logging.Logger
13+
import aws.smithy.kotlin.runtime.telemetry.logging.MessageSupplier
14+
import aws.sdk.kotlin.crt.Config as CrtConfig
15+
import aws.sdk.kotlin.crt.LogLevel as CrtLogLevel
16+
17+
public class CrtLogger(public val name: String, public val config: CrtConfig) : Logger, WithCrt() {
18+
override fun trace(t: Throwable?, msg: MessageSupplier) {
19+
log(CrtLogLevel.Trace, msg())
20+
}
21+
22+
override fun debug(t: Throwable?, msg: MessageSupplier) {
23+
log(CrtLogLevel.Debug, msg())
24+
}
25+
26+
override fun info(t: Throwable?, msg: MessageSupplier) {
27+
log(CrtLogLevel.Info, msg())
28+
}
29+
30+
override fun warn(t: Throwable?, msg: MessageSupplier) {
31+
log(CrtLogLevel.Warn, msg())
32+
}
33+
34+
override fun error(t: Throwable?, msg: MessageSupplier) {
35+
log(CrtLogLevel.Error, msg())
36+
}
37+
38+
override fun isEnabledFor(level: LogLevel): Boolean = config.logLevel.ordinal >= level.ordinal
39+
40+
override fun atLevel(level: LogLevel): LogRecordBuilder = CrtLogRecordBuilder(this, level)
41+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/*
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package aws.smithy.kotlin.runtime.telemetry.logging.crt
7+
8+
import aws.sdk.kotlin.crt.Config as CrtConfig
9+
import aws.smithy.kotlin.runtime.telemetry.logging.*
10+
11+
public class CrtLoggerProvider : LoggerProvider {
12+
override fun getOrCreateLogger(name: String): Logger = CrtLogger(name, CrtConfig())
13+
public fun getOrCreateLogger(name: String, config: CrtConfig): Logger = CrtLogger(name, config)
14+
}
15+

runtime/observability/logging-slf4j2/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*/
55
description = "Logging provider based on SLF4J"
66
extra["displayName"] = "Smithy :: Kotlin :: Observability :: SLF4J binding"
7-
extra["moduleName"] = "aws.smithy.kotlin.runtime.telemetry"
7+
extra["moduleName"] = "aws.smithy.kotlin.runtime.telemetry.slf4j"
88

99
kotlin {
1010
sourceSets {

runtime/observability/telemetry-defaults/build.gradle.kts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ kotlin {
2424
}
2525
}
2626

27+
nativeMain {
28+
dependencies {
29+
implementation(project(":runtime:observability:logging-crt"))
30+
}
31+
}
32+
2733
all {
2834
languageSettings.optIn("aws.smithy.kotlin.runtime.InternalApi")
2935
}

runtime/observability/telemetry-defaults/native/src/aws/smithy/kotlin/runtime/telemetry/logging/DefaultLoggerProviderNative.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,6 @@
55

66
package aws.smithy.kotlin.runtime.telemetry.logging
77

8-
internal actual val DefaultLoggerProvider: LoggerProvider = TODO("Not yet implemented")
8+
import aws.smithy.kotlin.runtime.telemetry.logging.crt.CrtLoggerProvider
9+
10+
internal actual val DefaultLoggerProvider: LoggerProvider = CrtLoggerProvider()

runtime/protocol/http-client-engines/http-client-engine-default/native/src/aws/smithy/kotlin/runtime/http/engine/DefaultHttpEngineNative.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@
55

66
package aws.smithy.kotlin.runtime.http.engine
77

8-
internal actual fun newDefaultHttpEngine(block: (HttpClientEngineConfig.Builder.() -> Unit)?): CloseableHttpClientEngine =
9-
TODO("Not yet implemented")
8+
import aws.smithy.kotlin.runtime.http.engine.crt.CrtHttpEngine
9+
10+
internal actual fun newDefaultHttpEngine(block: (HttpClientEngineConfig.Builder.() -> Unit)?): CloseableHttpClientEngine = CrtHttpEngine()

settings.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ include(":runtime:auth:http-auth-api")
7575
include(":runtime:auth:http-auth-aws")
7676
include(":runtime:auth:identity-api")
7777
include(":runtime:crt-util")
78+
include(":runtime:observability:logging-crt")
7879
include(":runtime:observability:logging-slf4j2")
7980
include(":runtime:observability:telemetry-api")
8081
include(":runtime:observability:telemetry-defaults")

0 commit comments

Comments
 (0)