1
+ /*
2
+ * Licensed under the Apache License, Version 2.0 (the "License");
3
+ * you may not use this file except in compliance with the License.
4
+ * You may obtain a copy of the License at
5
+ *
6
+ * http://www.apache.org/licenses/LICENSE-2.0
7
+ *
8
+ * Unless required by applicable law or agreed to in writing, software
9
+ * distributed under the License is distributed on an "AS IS" BASIS,
10
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ * See the License for the specific language governing permissions and
12
+ * limitations under the License.
13
+ */
1
14
package java .util .logging
2
15
3
-
4
- abstract class Handler extends AutoCloseable :
16
+ abstract class Handler extends AutoCloseable {
5
17
def publish (record : LogRecord ): Unit
18
+
6
19
def flush (): Unit
20
+ }
7
21
8
22
/**
9
- * Implements java.util.logging.Logger interface, which is not avaialble
10
- * in Scala Native
11
- * @param name
12
- */
23
+ * Implements java.util.logging.Logger interface, which is not avaialble in Scala Native
24
+ * @param name
25
+ */
13
26
class Logger (parent : Option [Logger ], name : String ) {
14
- private var handlers = List .empty[Handler ]
15
- private var useParentHandlers = true
27
+ private var handlers = List .empty[Handler ]
28
+ private var useParentHandlers = true
16
29
private var level : Option [Level ] = None
17
30
18
31
def getName (): String = name
19
32
20
- def log (level : Level , msg : String ): Unit = {
33
+ def log (level : Level , msg : String ): Unit =
21
34
log(LogRecord (level, msg))
22
- }
23
35
24
36
def log (record : LogRecord ): Unit = {
25
- if (isLoggable(record.getLevel())) {
26
- if (record.getLoggerName() == null ) {
27
- record.setLoggerName(name)
28
- }
29
- if (parent.nonEmpty && useParentHandlers) then
37
+ if (isLoggable(record.getLevel())) {
38
+ if (record.getLoggerName() == null ) record.setLoggerName(name)
39
+ if (parent.nonEmpty && useParentHandlers) {
30
40
getParent().log(record)
31
- else
41
+ } else {
32
42
handlers.foreach { h => h.publish(record) }
43
+ }
33
44
}
34
45
}
35
46
36
47
def isLoggable (level : Level ): Boolean = {
37
48
val l = getLevel()
38
- if ( level.intValue() < l.intValue()) then false else true
49
+ level.intValue() >= l.intValue()
39
50
}
40
51
41
- def getParent (): Logger = {
52
+ def getParent (): Logger =
42
53
parent.getOrElse(null )
43
- }
44
54
45
- def getLevel (): Level = {
55
+ def getLevel (): Level =
46
56
level.orElse(parent.map(_.getLevel())).getOrElse(Level .INFO )
47
- }
48
57
49
- def setLevel (newLevel : Level ): Unit = {
50
- level = Some (newLevel)
51
- }
58
+ def setLevel (newLevel : Level ): Unit =
59
+ level = Option (newLevel)
52
60
53
- def resetLogLevel (): Unit = {
61
+ def resetLogLevel (): Unit =
54
62
level = None
55
- }
56
63
57
- def setUseParentHandlers (useParentHandlers : Boolean ): Unit = {
64
+ def setUseParentHandlers (useParentHandlers : Boolean ): Unit =
58
65
this .useParentHandlers = useParentHandlers
59
- }
60
66
61
- def addHandler (h : Handler ): Unit = {
67
+ def addHandler (h : Handler ): Unit =
62
68
handlers = h :: handlers
63
- }
64
69
65
- def removeHandler (h : Handler ): Unit = {
70
+ def removeHandler (h : Handler ): Unit =
66
71
handlers = handlers.filter(_ != h)
67
- }
68
72
69
73
def getHandlers : Array [Handler ] = handlers.toArray
70
74
}
71
75
72
- object Logger :
76
+ object Logger {
77
+
73
78
import scala .jdk .CollectionConverters .*
79
+
74
80
private val loggerTable = new java.util.concurrent.ConcurrentHashMap [String , Logger ]().asScala
75
- private val rootLogger = Logger (None , " " )
81
+ private val rootLogger = Logger (None , " " )
76
82
77
83
def getLogger (name : String ): Logger = {
78
84
loggerTable.get(name) match {
@@ -90,31 +96,35 @@ object Logger:
90
96
name match {
91
97
case null | " " => rootLogger
92
98
case other =>
93
- val parentName = name.substring(0 , name.lastIndexOf('.' ).max(0 ))
99
+ val parentName = name.substring(0 , name.lastIndexOf('.' ).max(0 ))
94
100
val parentLogger = getLogger(parentName)
95
101
Logger (Some (parentLogger), name)
96
102
}
97
103
}
104
+ }
98
105
99
-
100
- abstract class Formatter :
106
+ abstract class Formatter {
101
107
def format (record : LogRecord ): String
108
+ }
102
109
103
-
104
- class LogRecord (_level : Level , msg : String ) extends Serializable :
105
- private val millis = System .currentTimeMillis()
106
- private var loggerName = " "
110
+ class LogRecord (_level : Level , msg : String ) extends Serializable {
111
+ private val millis = System .currentTimeMillis()
112
+ private var loggerName = " "
107
113
private var thrown : Throwable = null
108
114
109
115
def getMessage (): String = msg
116
+
110
117
def getMillis (): Long = millis
118
+
111
119
def getLoggerName (): String = loggerName
120
+
112
121
def getLevel (): Level = _level
122
+
113
123
def getThrown (): Throwable = thrown
114
124
115
- def setLoggerName (name : String ): Unit = {
125
+ def setLoggerName (name : String ): Unit =
116
126
this .loggerName = name
117
- }
118
- def setThrown (e : Throwable ): Unit = {
127
+
128
+ def setThrown (e : Throwable ): Unit =
119
129
thrown = e
120
- }
130
+ }
0 commit comments