diff --git a/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/utils/PlatformLog.android.kt b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/utils/PlatformLog.android.kt new file mode 100644 index 0000000000..215191ba0a --- /dev/null +++ b/quartz/src/androidMain/kotlin/com/vitorpamplona/quartz/utils/PlatformLog.android.kt @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2025 Vitor Pamplona + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the + * Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.vitorpamplona.quartz.utils + +actual object PlatformLog { + actual fun w( + tag: String, + message: String, + throwable: Throwable?, + ) { + if (throwable != null) { + android.util.Log.w(tag, message, throwable) + } else { + android.util.Log.w(tag, message) + } + } + + actual fun e( + tag: String, + message: String, + throwable: Throwable?, + ) { + if (throwable != null) { + android.util.Log.e(tag, message, throwable) + } else { + android.util.Log.e(tag, message) + } + } + + actual fun d( + tag: String, + message: String, + ) { + android.util.Log.d(tag, message) + } + + actual fun i( + tag: String, + message: String, + ) { + android.util.Log.i(tag, message) + } +} diff --git a/quartz/src/iosMain/kotlin/com/vitorpamplona/quartz/utils/PlatformLog.ios.kt b/quartz/src/iosMain/kotlin/com/vitorpamplona/quartz/utils/PlatformLog.ios.kt new file mode 100644 index 0000000000..299931efbe --- /dev/null +++ b/quartz/src/iosMain/kotlin/com/vitorpamplona/quartz/utils/PlatformLog.ios.kt @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2025 Vitor Pamplona + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the + * Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.vitorpamplona.quartz.utils + +import platform.Foundation.NSLog + +actual object PlatformLog { + actual fun w( + tag: String, + message: String, + throwable: Throwable?, + ) { + if (throwable != null) { + NSLog("WARN: [$tag] $message. Throwable: $throwable CAUSE ${throwable.cause}") + } else { + NSLog("WARN: [$tag] $message") + } + } + + actual fun e( + tag: String, + message: String, + throwable: Throwable?, + ) { + if (throwable != null) { + NSLog("ERROR: [$tag] $message. Throwable: $throwable CAUSE ${throwable.cause}") + } else { + NSLog("ERROR: [$tag] $message") + } + } + + actual fun d( + tag: String, + message: String, + ) { + NSLog("DEBUG: [$tag] $message") + } + + actual fun i( + tag: String, + message: String, + ) { + NSLog("INFO: [$tag] $message") + } +} diff --git a/quartz/src/jvmMain/kotlin/com/vitorpamplona/quartz/utils/PlatformLog.jvm.kt b/quartz/src/jvmMain/kotlin/com/vitorpamplona/quartz/utils/PlatformLog.jvm.kt new file mode 100644 index 0000000000..65ac883f6a --- /dev/null +++ b/quartz/src/jvmMain/kotlin/com/vitorpamplona/quartz/utils/PlatformLog.jvm.kt @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2025 Vitor Pamplona + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the + * Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.vitorpamplona.quartz.utils + +import java.time.LocalTime +import java.time.format.DateTimeFormatter + +actual object PlatformLog { + // Define a formatter for the desired output format (e.g., HH:mm:ss) + val formatter: DateTimeFormatter? = DateTimeFormatter.ofPattern("HH:mm:ss.SSS") + + fun time() = LocalTime.now().format(formatter) + + actual fun w( + tag: String, + message: String, + throwable: Throwable?, + ) { + if (throwable != null) { + println("${time()} WARN : [$tag] $message. Throwable: ${throwable.message}") + } else { + println("${time()} WARN : [$tag] $message") + } + } + + actual fun e( + tag: String, + message: String, + throwable: Throwable?, + ) { + if (throwable != null) { + println("${time()} ERROR: [$tag] $message. Throwable: ${throwable.message}") + } else { + println("${time()} ERROR: [$tag] $message") + } + } + + actual fun d( + tag: String, + message: String, + ) { + println("${time()} DEBUG: [$tag] $message") + } + + actual fun i( + tag: String, + message: String, + ) { + println("${time()} INFO : [$tag] $message") + } +}