Skip to content

Commit fb81b1c

Browse files
Rob Murdockoshai
authored andcommitted
Refactoring the javascript in order to allow users to inject their own message formatter or change output piping style.
1 parent e892bc8 commit fb81b1c

File tree

6 files changed

+103
-110
lines changed

6 files changed

+103
-110
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package mu
2+
3+
object ConsoleOutputPipes : OutputPipes {
4+
override fun trace(message: Any?) = console.log(message)
5+
override fun debug(message: Any?) = console.log(message)
6+
override fun info(message: Any?) = console.info(message)
7+
override fun warn(message: Any?) = console.warn(message)
8+
override fun error(message: Any?) = console.error(message)
9+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package mu
2+
3+
import mu.internal.toStringSafe
4+
5+
object DefaultMessageFormatter : MessageFormatter {
6+
override fun formatMessage(level: KotlinLoggingLevel, msg: () -> Any?, loggerName: String) =
7+
"${level.name}: [$loggerName] ${msg.toStringSafe()}"
8+
9+
override fun formatMessage(level: KotlinLoggingLevel, msg: () -> Any?, t: Throwable?, loggerName: String) =
10+
"${level.name}: [$loggerName] ${msg.toStringSafe()}${t.throwableToString()}"
11+
12+
override fun formatMessage(level: KotlinLoggingLevel, marker: Marker?, msg: () -> Any?, loggerName: String) =
13+
"${level.name}: [$loggerName] ${marker?.getName()} ${msg.toStringSafe()}"
14+
15+
override fun formatMessage(level: KotlinLoggingLevel, marker: Marker?, msg: () -> Any?, t: Throwable?, loggerName: String) =
16+
"${level.name}: [$loggerName] ${marker?.getName()} ${msg.toStringSafe()}${t.throwableToString()}"
17+
18+
private fun Throwable?.throwableToString(): String {
19+
if (this == null) {
20+
return ""
21+
}
22+
var msg = ""
23+
var current = this
24+
while (current != null && current.cause != current) {
25+
msg += ", Caused by: '${current.message}'"
26+
current = current.cause
27+
}
28+
return msg
29+
}
30+
}

kotlin-logging-js/src/main/kotlin/mu/KotlinLoggingLevel.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,7 @@ enum class KotlinLoggingLevel {
1010
ERROR
1111
}
1212

13-
fun KotlinLoggingLevel.isLoggingEnabled() = this.ordinal >= LOG_LEVEL.ordinal
13+
fun KotlinLoggingLevel.isLoggingEnabled() = this.ordinal >= LOG_LEVEL.ordinal
14+
15+
var outputPipes = ConsoleOutputPipes
16+
var messageFormatter = DefaultMessageFormatter
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package mu
2+
3+
interface MessageFormatter {
4+
fun formatMessage(level: KotlinLoggingLevel, msg: () -> Any?, loggerName: String): String
5+
fun formatMessage(level: KotlinLoggingLevel, msg: () -> Any?, t: Throwable?, loggerName: String): String
6+
fun formatMessage(level: KotlinLoggingLevel, marker: Marker?, msg: () -> Any?, loggerName: String): String
7+
fun formatMessage(level: KotlinLoggingLevel, marker: Marker?, msg: () -> Any?, t: Throwable?, loggerName: String): String
8+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package mu
2+
3+
interface OutputPipes {
4+
fun trace(message: Any?)
5+
fun debug(message: Any?)
6+
fun info(message: Any?)
7+
fun warn(message: Any?)
8+
fun error(message: Any?)
9+
}
Lines changed: 43 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -1,142 +1,76 @@
11
package mu.internal
22

3-
import mu.KLogger
4-
import mu.KotlinLoggingLevel
5-
import mu.Marker
6-
import mu.isLoggingEnabled
3+
import mu.*
4+
import mu.KotlinLoggingLevel.*
75

8-
internal class KLoggerJS(private val loggerName: String) : KLogger {
6+
internal class KLoggerJS(
7+
private val loggerName: String,
8+
private val pipes: OutputPipes = outputPipes,
9+
private val formatter: MessageFormatter = messageFormatter
10+
) : KLogger, MessageFormatter by formatter {
911

10-
override fun trace(msg: () -> Any?) {
11-
if (KotlinLoggingLevel.TRACE.isLoggingEnabled()) {
12-
console.log("TRACE: [$loggerName] ${msg.toStringSafe()}")
13-
}
14-
}
12+
override fun trace(msg: () -> Any?) = TRACE.logIfEnabled(msg, pipes::trace)
1513

16-
override fun debug(msg: () -> Any?) {
17-
if (KotlinLoggingLevel.DEBUG.isLoggingEnabled()) {
18-
console.log("DEBUG: [$loggerName] ${msg.toStringSafe()}")
19-
}
20-
}
14+
override fun debug(msg: () -> Any?) = DEBUG.logIfEnabled(msg, pipes::debug)
2115

22-
override fun info(msg: () -> Any?) {
23-
if (KotlinLoggingLevel.INFO.isLoggingEnabled()) {
24-
console.info("INFO: [$loggerName] ${msg.toStringSafe()}")
25-
}
26-
}
16+
override fun info(msg: () -> Any?) = INFO.logIfEnabled(msg, pipes::info)
2717

28-
override fun warn(msg: () -> Any?) {
29-
if (KotlinLoggingLevel.WARN.isLoggingEnabled()) {
30-
console.warn("WARN: [$loggerName] ${msg.toStringSafe()}")
31-
}
32-
}
18+
override fun warn(msg: () -> Any?) = WARN.logIfEnabled(msg, pipes::warn)
3319

34-
override fun error(msg: () -> Any?) {
35-
if (KotlinLoggingLevel.ERROR.isLoggingEnabled()) {
36-
console.error("ERROR: [$loggerName] ${msg.toStringSafe()}")
37-
}
38-
}
20+
override fun error(msg: () -> Any?) = ERROR.logIfEnabled(msg, pipes::error)
3921

40-
override fun trace(t: Throwable?, msg: () -> Any?) {
41-
if (KotlinLoggingLevel.TRACE.isLoggingEnabled()) {
42-
console.log("TRACE: [$loggerName] ${msg.toStringSafe()}${t.throwableToString()}")
43-
}
44-
}
22+
override fun trace(t: Throwable?, msg: () -> Any?) = TRACE.logIfEnabled(msg, t, pipes::trace)
4523

46-
override fun debug(t: Throwable?, msg: () -> Any?) {
47-
if (KotlinLoggingLevel.DEBUG.isLoggingEnabled()) {
48-
console.log("DEBUG: [$loggerName] ${msg.toStringSafe()}${t.throwableToString()}")
49-
}
50-
}
24+
override fun debug(t: Throwable?, msg: () -> Any?) = DEBUG.logIfEnabled(msg, t, pipes::debug)
5125

52-
override fun info(t: Throwable?, msg: () -> Any?) {
53-
if (KotlinLoggingLevel.INFO.isLoggingEnabled()) {
54-
console.info("INFO: [$loggerName] ${msg.toStringSafe()}${t.throwableToString()}")
55-
}
56-
}
26+
override fun info(t: Throwable?, msg: () -> Any?) = INFO.logIfEnabled(msg, t, pipes::info)
5727

58-
override fun warn(t: Throwable?, msg: () -> Any?) {
59-
if (KotlinLoggingLevel.WARN.isLoggingEnabled()) {
60-
console.warn("WARN: [$loggerName] ${msg.toStringSafe()}${t.throwableToString()}")
61-
}
62-
}
28+
override fun warn(t: Throwable?, msg: () -> Any?) = WARN.logIfEnabled(msg, t, pipes::warn)
6329

64-
override fun error(t: Throwable?, msg: () -> Any?) {
65-
if (KotlinLoggingLevel.ERROR.isLoggingEnabled()) {
66-
console.error("ERROR: [$loggerName] ${msg.toStringSafe()}${t.throwableToString()}")
67-
}
68-
}
30+
override fun error(t: Throwable?, msg: () -> Any?) = ERROR.logIfEnabled(msg, t, pipes::error)
6931

70-
override fun trace(marker: Marker?, msg: () -> Any?) {
71-
if (KotlinLoggingLevel.TRACE.isLoggingEnabled()) {
72-
console.log("TRACE: [$loggerName] ${marker?.getName()} ${msg.toStringSafe()}")
73-
}
74-
}
32+
override fun trace(marker: Marker?, msg: () -> Any?) = TRACE.logIfEnabled(marker, msg, pipes::trace)
7533

76-
override fun debug(marker: Marker?, msg: () -> Any?) {
77-
if (KotlinLoggingLevel.DEBUG.isLoggingEnabled()) {
78-
console.log("DEBUG: [$loggerName] ${marker?.getName()} ${msg.toStringSafe()}")
79-
}
80-
}
34+
override fun debug(marker: Marker?, msg: () -> Any?) = DEBUG.logIfEnabled(marker, msg, pipes::debug)
8135

82-
override fun info(marker: Marker?, msg: () -> Any?) {
83-
if (KotlinLoggingLevel.INFO.isLoggingEnabled()) {
84-
console.info("INFO: [$loggerName] ${marker?.getName()} ${msg.toStringSafe()}")
85-
}
86-
}
36+
override fun info(marker: Marker?, msg: () -> Any?) = INFO.logIfEnabled(marker, msg, pipes::info)
8737

88-
override fun warn(marker: Marker?, msg: () -> Any?) {
89-
if (KotlinLoggingLevel.WARN.isLoggingEnabled()) {
90-
console.warn("WARN: [$loggerName] ${marker?.getName()} ${msg.toStringSafe()}")
91-
}
92-
}
38+
override fun warn(marker: Marker?, msg: () -> Any?) = WARN.logIfEnabled(marker, msg, pipes::warn)
9339

94-
override fun error(marker: Marker?, msg: () -> Any?) {
95-
if (KotlinLoggingLevel.ERROR.isLoggingEnabled()) {
96-
console.error("ERROR: [$loggerName] ${marker?.getName()} ${msg.toStringSafe()}")
97-
}
98-
}
40+
override fun error(marker: Marker?, msg: () -> Any?) = ERROR.logIfEnabled(marker, msg, pipes::error)
9941

100-
override fun trace(marker: Marker?, t: Throwable?, msg: () -> Any?) {
101-
if (KotlinLoggingLevel.TRACE.isLoggingEnabled()) {
102-
console.log("TRACE: [$loggerName] ${marker?.getName()} ${msg.toStringSafe()}${t.throwableToString()}")
103-
}
104-
}
42+
override fun trace(marker: Marker?, t: Throwable?, msg: () -> Any?) = TRACE.logIfEnabled(marker, msg, t, pipes::trace)
10543

106-
override fun debug(marker: Marker?, t: Throwable?, msg: () -> Any?) {
107-
if (KotlinLoggingLevel.DEBUG.isLoggingEnabled()) {
108-
console.log("DEBUG: [$loggerName] ${marker?.getName()} ${msg.toStringSafe()}${t.throwableToString()}")
109-
}
110-
}
44+
override fun debug(marker: Marker?, t: Throwable?, msg: () -> Any?) = DEBUG.logIfEnabled(marker, msg, t, pipes::debug)
45+
46+
override fun info(marker: Marker?, t: Throwable?, msg: () -> Any?) = INFO.logIfEnabled(marker, msg, t, pipes::info)
11147

112-
override fun info(marker: Marker?, t: Throwable?, msg: () -> Any?) {
113-
if (KotlinLoggingLevel.INFO.isLoggingEnabled()) {
114-
console.info("INFO: [$loggerName] ${marker?.getName()} ${msg.toStringSafe()}${t.throwableToString()}")
48+
override fun warn(marker: Marker?, t: Throwable?, msg: () -> Any?) = WARN.logIfEnabled(marker, msg, t, pipes::warn)
49+
50+
override fun error(marker: Marker?, t: Throwable?, msg: () -> Any?) = ERROR.logIfEnabled(marker, msg, t, pipes::error)
51+
52+
private fun KotlinLoggingLevel.logIfEnabled(msg: () -> Any?, logFunction: (Any?) -> Unit) {
53+
if (isLoggingEnabled()) {
54+
logFunction(formatMessage(this, msg, loggerName))
11555
}
11656
}
11757

118-
override fun warn(marker: Marker?, t: Throwable?, msg: () -> Any?) {
119-
if (KotlinLoggingLevel.WARN.isLoggingEnabled()) {
120-
console.warn("WARN: [$loggerName] ${marker?.getName()} ${msg.toStringSafe()}${t.throwableToString()}")
58+
private fun KotlinLoggingLevel.logIfEnabled(msg: () -> Any?, t: Throwable?, logFunction: (Any?) -> Unit) {
59+
if (isLoggingEnabled()) {
60+
logFunction(formatMessage(this, msg, t, loggerName))
12161
}
12262
}
12363

124-
override fun error(marker: Marker?, t: Throwable?, msg: () -> Any?) {
125-
if (KotlinLoggingLevel.ERROR.isLoggingEnabled()) {
126-
console.error("ERROR: [$loggerName] ${marker?.getName()} ${msg.toStringSafe()}${t.throwableToString()}")
64+
private fun KotlinLoggingLevel.logIfEnabled(marker: Marker?, msg: () -> Any?, logFunction: (Any?) -> Unit) {
65+
if (isLoggingEnabled()) {
66+
logFunction(formatMessage(this, marker, msg, loggerName))
12767
}
12868
}
12969

130-
private fun Throwable?.throwableToString(): String {
131-
if (this == null) {
132-
return ""
70+
private fun KotlinLoggingLevel.logIfEnabled(marker: Marker?, msg: () -> Any?, t: Throwable?, logFunction: (Any?) -> Unit) {
71+
if (isLoggingEnabled()) {
72+
logFunction(formatMessage(this, marker, msg, t, loggerName))
13373
}
134-
var msg = ""
135-
var current = this
136-
while (current != null && current.cause != current) {
137-
msg += ", Caused by: '${current.message}'"
138-
current = current.cause
139-
}
140-
return msg
14174
}
75+
14276
}

0 commit comments

Comments
 (0)