Skip to content

Commit 0c3768c

Browse files
authored
V5 (#330)
Impl version 5: - change the api of KLogger that will contain fluent api (KLoggingEventBuilder). - make KLogger api lighter and remove methods such as `fun trace(msg: String?, arg: Any?)`. Basically the idea is to reduce the signature, and make it more "kotlin friendly". As a side effect this will also make the lib implementation a bit simpler, as right now inheritance is a bit complex and has a lot of duplication. Noteable changes: * add base slf4j class * remove NamedKLogging,KLogging,KLoggable * fix compilation * fix tests * remove redundunt inline * add release branch github-release-5.x
1 parent 77cad7c commit 0c3768c

File tree

36 files changed

+1062
-3120
lines changed

36 files changed

+1062
-3120
lines changed

.github/workflows/cd.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ on:
55
branches:
66
- github-release
77
- github-release-4.x
8+
- github-release-5.x
89

910
jobs:
1011
release:

src/androidMain/kotlin/io/github/oshai/kotlinlogging/internal/KLoggerAndroid.kt

Lines changed: 25 additions & 319 deletions
Original file line numberDiff line numberDiff line change
@@ -2,328 +2,34 @@ package io.github.oshai.kotlinlogging.internal
22

33
import android.util.Log
44
import io.github.oshai.kotlinlogging.KLogger
5+
import io.github.oshai.kotlinlogging.KLoggingEventBuilder
6+
import io.github.oshai.kotlinlogging.Level
57
import io.github.oshai.kotlinlogging.Marker
68

7-
@Suppress("TooManyFunctions")
89
internal class KLoggerAndroid(override val name: String) : KLogger {
9-
override val underlyingLogger: Any
10-
get() = TODO("Not implemented")
11-
12-
override fun trace(msg: String?) = trace { msg }
13-
14-
override fun trace(msg: String?, arg: Any?) {
15-
TODO("Not implemented")
16-
}
17-
18-
override fun trace(msg: String?, arg1: Any?, arg2: Any?) {
19-
TODO("Not implemented")
20-
}
21-
22-
override fun trace(msg: String?, vararg arguments: Any?) {
23-
TODO("Not implemented")
24-
}
25-
26-
override fun trace(msg: String?, t: Throwable?) = trace(t) { msg }
27-
28-
override fun trace(marker: Marker?, msg: String?) {
29-
TODO("Not implemented")
30-
}
31-
32-
override fun trace(marker: Marker?, msg: String?, arg: Any?) {
33-
TODO("Not implemented")
34-
}
35-
36-
override fun trace(marker: Marker?, msg: String?, arg1: Any?, arg2: Any?) {
37-
TODO("Not implemented")
38-
}
39-
40-
override fun trace(marker: Marker?, msg: String?, vararg arguments: Any?) {
41-
TODO("Not implemented")
42-
}
43-
44-
override fun trace(marker: Marker?, msg: String?, t: Throwable?) {
45-
TODO("Not implemented")
46-
}
47-
48-
override fun trace(msg: () -> Any?) {
49-
if (isTraceEnabled) {
50-
Log.v(name, msg.toStringSafe())
51-
}
52-
}
53-
54-
override fun debug(msg: () -> Any?) {
55-
if (isDebugEnabled) {
56-
Log.d(name, msg.toStringSafe())
57-
}
58-
}
59-
override fun info(msg: () -> Any?) {
60-
if (isInfoEnabled) {
61-
Log.i(name, msg.toStringSafe())
62-
}
63-
}
64-
override fun warn(msg: () -> Any?) {
65-
if (isWarnEnabled) {
66-
Log.w(name, msg.toStringSafe())
67-
}
68-
}
69-
override fun error(msg: () -> Any?) {
70-
if (isErrorEnabled) {
71-
Log.e(name, msg.toStringSafe())
72-
}
73-
}
74-
override fun trace(t: Throwable?, msg: () -> Any?) {
75-
if (isTraceEnabled) {
76-
Log.v(name, msg.toStringSafe(), t)
77-
}
78-
}
79-
override fun debug(t: Throwable?, msg: () -> Any?) {
80-
if (isDebugEnabled) {
81-
Log.d(name, msg.toStringSafe(), t)
82-
}
83-
}
84-
override fun info(t: Throwable?, msg: () -> Any?) {
85-
if (isInfoEnabled) {
86-
Log.i(name, msg.toStringSafe(), t)
10+
override fun at(level: Level, marker: Marker?, block: KLoggingEventBuilder.() -> Unit) {
11+
if (isLoggingEnabledFor(level, marker)) {
12+
KLoggingEventBuilder().apply(block).run {
13+
when (level) {
14+
Level.TRACE -> Log.v(name, this.message, this.cause)
15+
Level.DEBUG -> Log.d(name, this.message, this.cause)
16+
Level.INFO -> Log.i(name, this.message, this.cause)
17+
Level.WARN -> Log.w(name, this.message, this.cause)
18+
Level.ERROR -> Log.e(name, this.message, this.cause)
19+
Level.OFF -> Unit
20+
}
21+
}
22+
}
23+
}
24+
25+
override fun isLoggingEnabledFor(level: Level, marker: Marker?): Boolean {
26+
return when (level) {
27+
Level.TRACE -> Log.isLoggable(name, Log.VERBOSE)
28+
Level.DEBUG -> Log.isLoggable(name, Log.DEBUG)
29+
Level.INFO -> Log.isLoggable(name, Log.INFO)
30+
Level.WARN -> Log.isLoggable(name, Log.WARN)
31+
Level.ERROR -> Log.isLoggable(name, Log.ERROR)
32+
Level.OFF -> false
8733
}
8834
}
89-
override fun warn(t: Throwable?, msg: () -> Any?) {
90-
if (isWarnEnabled) {
91-
Log.w(name, msg.toStringSafe(), t)
92-
}
93-
}
94-
override fun error(t: Throwable?, msg: () -> Any?) {
95-
if (isErrorEnabled) {
96-
Log.e(name, msg.toStringSafe(), t)
97-
}
98-
}
99-
override fun trace(marker: Marker?, msg: () -> Any?) = trace(msg)
100-
101-
override fun debug(marker: Marker?, msg: () -> Any?) = debug(msg)
102-
103-
override fun info(marker: Marker?, msg: () -> Any?) = info(msg)
104-
105-
override fun warn(marker: Marker?, msg: () -> Any?) = warn(msg)
106-
107-
override fun error(marker: Marker?, msg: () -> Any?) = error(msg)
108-
109-
override fun trace(marker: Marker?, t: Throwable?, msg: () -> Any?) = trace(t, msg)
110-
override fun isTraceEnabled(marker: Marker?): Boolean = isTraceEnabled
111-
112-
override fun debug(msg: String?) = debug { msg }
113-
114-
override fun debug(msg: String?, arg: Any?) {
115-
TODO("Not implemented")
116-
}
117-
118-
override fun debug(msg: String?, arg1: Any?, arg2: Any?) {
119-
TODO("Not implemented")
120-
}
121-
122-
override fun debug(msg: String?, vararg arguments: Any?) {
123-
TODO("Not implemented")
124-
}
125-
126-
override fun debug(msg: String?, t: Throwable?) = debug(t) { msg }
127-
128-
override fun debug(marker: Marker?, msg: String?) {
129-
TODO("Not implemented")
130-
}
131-
132-
override fun debug(marker: Marker?, msg: String?, arg: Any?) {
133-
TODO("Not implemented")
134-
}
135-
136-
override fun debug(marker: Marker?, msg: String?, arg1: Any?, arg2: Any?) {
137-
TODO("Not implemented")
138-
}
139-
140-
override fun debug(marker: Marker?, msg: String?, vararg arguments: Any?) {
141-
TODO("Not implemented")
142-
}
143-
144-
override fun debug(marker: Marker?, msg: String?, t: Throwable?) {
145-
TODO("Not implemented")
146-
}
147-
148-
override fun debug(marker: Marker?, t: Throwable?, msg: () -> Any?) = debug(t, msg)
149-
override fun isDebugEnabled(marker: Marker?): Boolean = isDebugEnabled
150-
151-
override fun info(msg: String?) = info { msg }
152-
153-
override fun info(msg: String?, arg: Any?) {
154-
TODO("Not implemented")
155-
}
156-
157-
override fun info(msg: String?, arg1: Any?, arg2: Any?) {
158-
TODO("Not implemented")
159-
}
160-
161-
override fun info(msg: String?, vararg arguments: Any?) {
162-
TODO("Not implemented")
163-
}
164-
165-
override fun info(msg: String?, t: Throwable?) = info(t) { msg }
166-
167-
override fun info(marker: Marker?, msg: String?) {
168-
TODO("Not implemented")
169-
}
170-
171-
override fun info(marker: Marker?, msg: String?, arg: Any?) {
172-
TODO("Not implemented")
173-
}
174-
175-
override fun info(marker: Marker?, msg: String?, arg1: Any?, arg2: Any?) {
176-
TODO("Not implemented")
177-
}
178-
179-
override fun info(marker: Marker?, msg: String?, vararg arguments: Any?) {
180-
TODO("Not implemented")
181-
}
182-
183-
override fun info(marker: Marker?, msg: String?, t: Throwable?) {
184-
TODO("Not implemented")
185-
}
186-
187-
override fun info(marker: Marker?, t: Throwable?, msg: () -> Any?) = info(t, msg)
188-
override fun isInfoEnabled(marker: Marker?): Boolean = isInfoEnabled
189-
190-
override fun warn(msg: String?) = warn { msg }
191-
192-
override fun warn(msg: String?, arg: Any?) {
193-
TODO("Not implemented")
194-
}
195-
196-
override fun warn(msg: String?, vararg arguments: Any?) {
197-
TODO("Not implemented")
198-
}
199-
200-
override fun warn(msg: String?, arg1: Any?, arg2: Any?) {
201-
TODO("Not implemented")
202-
}
203-
204-
override fun warn(msg: String?, t: Throwable?) = warn(t) { msg }
205-
206-
override fun warn(marker: Marker?, msg: String?) {
207-
TODO("Not implemented")
208-
}
209-
210-
override fun warn(marker: Marker?, msg: String?, arg: Any?) {
211-
TODO("Not implemented")
212-
}
213-
214-
override fun warn(marker: Marker?, msg: String?, arg1: Any?, arg2: Any?) {
215-
TODO("Not implemented")
216-
}
217-
218-
override fun warn(marker: Marker?, msg: String?, vararg arguments: Any?) {
219-
TODO("Not implemented")
220-
}
221-
222-
override fun warn(marker: Marker?, msg: String?, t: Throwable?) {
223-
TODO("Not implemented")
224-
}
225-
226-
override fun warn(marker: Marker?, t: Throwable?, msg: () -> Any?) = warn(t, msg)
227-
override fun isWarnEnabled(marker: Marker?): Boolean = isWarnEnabled
228-
229-
override fun error(msg: String?) = error { msg }
230-
231-
override fun error(msg: String?, arg: Any?) {
232-
TODO("Not implemented")
233-
}
234-
235-
override fun error(msg: String?, arg1: Any?, arg2: Any?) {
236-
TODO("Not implemented")
237-
}
238-
239-
override fun error(msg: String?, vararg arguments: Any?) {
240-
TODO("Not implemented")
241-
}
242-
243-
override fun error(msg: String?, t: Throwable?) = error(t) { msg }
244-
245-
override fun error(marker: Marker?, msg: String?) {
246-
TODO("Not implemented")
247-
}
248-
249-
override fun error(marker: Marker?, msg: String?, arg: Any?) {
250-
TODO("Not implemented")
251-
}
252-
253-
override fun error(marker: Marker?, msg: String?, arg1: Any?, arg2: Any?) {
254-
TODO("Not implemented")
255-
}
256-
257-
override fun error(marker: Marker?, msg: String?, vararg arguments: Any?) {
258-
TODO("Not implemented")
259-
}
260-
261-
override fun error(marker: Marker?, msg: String?, t: Throwable?) {
262-
TODO("Not implemented")
263-
}
264-
265-
override fun error(marker: Marker?, t: Throwable?, msg: () -> Any?) = error(t, msg)
266-
override fun isErrorEnabled(marker: Marker?): Boolean = isErrorEnabled
267-
268-
override fun isLoggingOff(marker: Marker?): Boolean = isLoggingOff
269-
270-
override fun entry(vararg arguments: Any?) = trace { "entry($arguments)" }
271-
272-
override fun exit() = trace { "exit()" }
273-
274-
override fun <T : Any?> exit(result: T): T {
275-
trace { "exit($result)" }
276-
return result
277-
}
278-
279-
override fun <T : Throwable> throwing(throwable: T): T {
280-
error(throwable) { "throwing($throwable)" }
281-
return throwable
282-
}
283-
284-
override fun <T : Throwable> catching(throwable: T) {
285-
error(throwable) { "catching($throwable)" }
286-
}
287-
288-
/**
289-
* Is the logger instance enabled for the TRACE level?
290-
*
291-
* @return True if this Logger is enabled for the TRACE level, false otherwise.
292-
*/
293-
override val isTraceEnabled: Boolean = Log.isLoggable(name, Log.VERBOSE)
294-
295-
/**
296-
* Is the logger instance enabled for the DEBUG level?
297-
*
298-
* @return True if this Logger is enabled for the DEBUG level, false otherwise.
299-
*/
300-
override val isDebugEnabled: Boolean = Log.isLoggable(name, Log.DEBUG)
301-
302-
/**
303-
* Is the logger instance enabled for the INFO level?
304-
*
305-
* @return True if this Logger is enabled for the INFO level, false otherwise.
306-
*/
307-
override val isInfoEnabled: Boolean = Log.isLoggable(name, Log.INFO)
308-
309-
/**
310-
* Is the logger instance enabled for the WARN level?
311-
*
312-
* @return True if this Logger is enabled for the WARN level, false otherwise.
313-
*/
314-
override val isWarnEnabled: Boolean = Log.isLoggable(name, Log.WARN)
315-
316-
/**
317-
* Is the logger instance enabled for the ERROR level?
318-
*
319-
* @return True if this Logger is enabled for the ERROR level, false otherwise.
320-
*/
321-
override val isErrorEnabled: Boolean = Log.isLoggable(name, Log.ERROR)
322-
323-
/**
324-
* Is the logger instance OFF?
325-
*
326-
* @return True if this Logger is set to the OFF level, false otherwise.
327-
*/
328-
override val isLoggingOff: Boolean = !Log.isLoggable(name, Log.ASSERT)
32935
}

src/androidMain/kotlin/io/github/oshai/kotlinlogging/internal/KLoggerFactory.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@ package io.github.oshai.kotlinlogging.internal
33
import io.github.oshai.kotlinlogging.KLogger
44
import io.github.oshai.kotlinlogging.slf4j.internal.Slf4jLoggerFactory
55

6-
@Suppress("NOTHING_TO_INLINE")
76
internal actual object KLoggerFactory {
87

9-
internal actual inline fun logger(name: String): KLogger {
8+
internal actual fun logger(name: String): KLogger {
109
if (System.getProperty("kotlin-logging-to-android-native") != null) {
1110
return KLoggerAndroid(name)
1211
}

0 commit comments

Comments
 (0)