#REFACTORING by stefan
authorStefan Vogel <sv@exept.de>
Wed, 09 Nov 2016 15:17:23 +0100
changeset 20951 c6026bc64d24
parent 20950 a57d9d14dfd0
child 20952 7c5123a5f7a8
#REFACTORING by stefan class: MiniLogger added: #severities #severityThresholdOf: comment/format in: #logFormat changed:53 methods
MiniLogger.st
--- a/MiniLogger.st	Wed Nov 09 12:35:12 2016 +0100
+++ b/MiniLogger.st	Wed Nov 09 15:17:23 2016 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 2012-2014 by Jan Vrany & eXept Software AG
               All Rights Reserved
@@ -22,7 +24,7 @@
 	category:'System-Debugging-Support'
 !
 
-Object subclass:#Severity
+Magnitude subclass:#Severity
 	instanceVariableNames:'name value'
 	classVariableNames:''
 	poolDictionaries:''
@@ -123,6 +125,9 @@
 !MiniLogger class methodsFor:'initialization'!
 
 initialize
+    LogOnStderr := true.
+    LogOnTranscript := true.
+
     ALL := Severity new initializeWithName:#all value:0.
     ENTER := Severity new initializeWithName:#enter value:10.
     LEAVE := Severity new initializeWithName:#leave value:10.
@@ -139,21 +144,7 @@
     FATAL := Severity new initializeWithName:#fatal value:100.
     NONE := Severity new initializeWithName:#none value:65535.
 
-    Severities := Array new:13.
-    Severities at:1 put:ENTER.
-    Severities at:2 put:LEAVE.
-    Severities at:3 put:TRACE3.
-    Severities at:4 put:TRACE2.
-    Severities at:5 put:TRACE1.
-    Severities at:6 put:TRACE0.
-    Severities at:7 put:TRACE.
-    Severities at:8 put:DEBUG.
-    Severities at:9 put:INFO.
-    Severities at:10 put:WARN.
-    Severities at:11 put:WARNING.
-    Severities at:12 put:ERROR.
-    Severities at:13 put:FATAL.
-
+    Severities := {ENTER. LEAVE. TRACE3. TRACE2. TRACE1. TRACE0. TRACE. DEBUG. INFO. WARN. WARNING. ERROR. FATAL.}.
     Threshold := InfoPrinting ifTrue:[INFO] ifFalse:[WARN].
 
     (Smalltalk at:#Logger) isNil ifTrue:[
@@ -210,7 +201,7 @@
 !
 
 logOnStderr 
-    ^ LogOnStderr ? true
+    ^ LogOnStderr
 !
 
 logOnStderr:aBoolean
@@ -228,7 +219,7 @@
 !
 
 logOnTranscript
-    ^ LogOnTranscript ? true
+    ^ LogOnTranscript 
 !
 
 logOnTranscript:aBoolean
@@ -259,6 +250,10 @@
 
 !MiniLogger class methodsFor:'accessing-severities'!
 
+severities
+    ^ Severities.
+!
+
 severityDEBUG
     ^ DEBUG
 
@@ -432,9 +427,7 @@
     | severityXlated messageXlated logOnStderr logOnTranscript prevLogOnTranscript |
 
     logOnStderr := self logOnStderr.
-    logOnTranscript := self logOnTranscript 
-                        and:[ Transcript notNil
-                        and:[ Transcript isView ]].
+    logOnTranscript := self logOnTranscript and:[Transcript isView].
                         
     (logOnStderr or:[logOnTranscript]) ifFalse:[^ self].
 
@@ -442,30 +435,16 @@
 
     "/ Be backward compatible, allow for symbolic severities
     "/ but when encountered, issue a warning...
-    severity isSymbol ifTrue:[ 
-        | nseverities i |
-
-        i := 1.
-        nseverities := Severities size.
-        [ i <= nseverities ] whileTrue:[
-            | s | 
+    severity isSymbol ifTrue:[
+        severityXlated := Severities detect:[:each| each name == severity] ifNone:[].
 
-            (s := Severities at: i) name = severity ifTrue:[ 
-                | caller |    
-                severityXlated := s.
-                i := nseverities + 1. "/ exit the loop
-
-                "/ This will be enabled later, so far it generates
-                "/ way to much warnings. at least stx:libjava & exept:jdi has to be rewritten
-                
-                "/ self log: 'using symbols as severity is deprecated, use Logger severityXXX to get severity object' severity: WARN facility: 'STX' originator: self.
-                "/ caller := thisContext sender.
-                "/ [ caller notNil and: [ caller receiver ~~ originator ] ] whileTrue:[ caller := caller sender ].
-                "/ self log: 'caller is ', caller printString severity: INFO facility: 'STX' originator: self.
-
-            ].
-            i := i + 1.
-        ].
+        "/ This will be enabled later, so far it generates
+        "/ way to much warnings. at least stx:libjava & exept:jdi has to be rewritten
+        
+        "/ self log: 'using symbols as severity is deprecated, use Logger severityXXX to get severity object' severity: WARN facility: 'STX' originator: self.
+        "/ caller := thisContext sender.
+        "/ [ caller notNil and: [ caller receiver ~~ originator ] ] whileTrue:[ caller := caller sender ].
+        "/ self log: 'caller is ', caller printString severity: INFO facility: 'STX' originator: self.
     ].
 
     "/ Now check whether the severity is one of the predefined ones,
@@ -473,18 +452,16 @@
     (Severities includesIdentical: severityXlated) ifFalse:[ 
         | caller |
 
-        self log: ('no such severity (%1), use one from predefined severities. Original message will be logged as INFO' bindWith: severityXlated) 
+        caller := thisContext sender.
+        [caller notNil and:[caller receiver ~~ originator]] whileTrue:[ 
+            caller := caller sender
+        ].
+        self log:('no such severity (%1, called from %2), use one from predefined severities. Original message will be logged as INFO' bindWith:severityXlated with:caller) 
              severity: ERROR facility: 'STX' originator: self.
-             
-        caller := thisContext sender.
-        [ 
-            caller notNil and: [ caller receiver ~~ originator ] 
-        ] whileTrue:[ caller := caller sender ].
-        self log: 'caller is ', caller printString severity: INFO facility: 'STX' originator: self.
         severityXlated := INFO.
     ].
 
-    severityXlated value < Threshold value ifTrue:[ ^ self ].
+    severityXlated < Threshold ifTrue:[ ^ self ].
     messageXlated := message value asString.
 
     "/ to avoid recursion, turn off logOnTranscript while logging
@@ -506,7 +483,10 @@
     ].
     
     "
-     Logger log:'test message' severity: #debug facility: 'TEST'
+     Logger log:'test message' severity:self severityINFO facility: 'TEST'
+     Logger log:'test message' severity:#info facility: 'TEST'
+     Logger log:'test message' severity:#bla facility: 'TEST'
+     Logger log:'test message' severity:123 facility: 'TEST'
     "
 
     "Created: / 14-09-2011 / 21:18:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -523,336 +503,336 @@
 !MiniLogger class methodsFor:'logging - utils'!
 
 debug: message
-    DEBUG value < Threshold value ifTrue:[ ^ self ].
+    DEBUG < Threshold ifTrue:[ ^ self ].
     self log: message severity: DEBUG originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:54:19 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 debug: format with: arg1
-    DEBUG value < Threshold value ifTrue:[ ^ self ].
+    DEBUG < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1) severity: DEBUG originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:54:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 debug: format with: arg1 with: arg2
-    DEBUG value < Threshold value ifTrue:[ ^ self ].
+    DEBUG < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1 with: arg2) severity: DEBUG originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:54:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 debug: format with: arg1 with: arg2 with:arg3
-    DEBUG value < Threshold value ifTrue:[ ^ self ].
+    DEBUG < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1 with: arg2 with:arg3) severity: DEBUG originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:54:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 enter: message
-    ENTER value < Threshold value ifTrue:[ ^ self ].
+    ENTER < Threshold ifTrue:[ ^ self ].
     self log: message severity: ENTER originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:54:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 enter: format with: arg1
-    ENTER value < Threshold value ifTrue:[ ^ self ].
+    ENTER < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1) severity: ENTER originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:54:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 enter: format with: arg1 with: arg2
-    ENTER value < Threshold value ifTrue:[ ^ self ].
+    ENTER < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1 with: arg2) severity: ENTER originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:54:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 enter: format with: arg1 with: arg2 with:arg3
-    ENTER value < Threshold value ifTrue:[ ^ self ].
+    ENTER < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1 with: arg2 with:arg3) severity: ENTER originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:54:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 error: message
-    ERROR value < Threshold value ifTrue:[ ^ self ].
+    ERROR < Threshold ifTrue:[ ^ self ].
     self log: message severity: ERROR originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:54:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 error: format with: arg1
-    ERROR value < Threshold value ifTrue:[ ^ self ].
+    ERROR < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1) severity: ERROR originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:54:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 error: format with: arg1 with: arg2
-    ERROR value < Threshold value ifTrue:[ ^ self ].
+    ERROR < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1 with: arg2) severity: ERROR originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:54:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 error: format with: arg1 with: arg2 with:arg3
-    ERROR value < Threshold value ifTrue:[ ^ self ].
+    ERROR < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1 with: arg2 with:arg3) severity: ERROR originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:54:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 fatal: message
-    FATAL value < Threshold value ifTrue:[ ^ self ].
+    FATAL < Threshold ifTrue:[ ^ self ].
     self log: message severity: FATAL originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:54:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 fatal: format with: arg1
-    FATAL value < Threshold value ifTrue:[ ^ self ].
+    FATAL < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1) severity: FATAL originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:54:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 fatal: format with: arg1 with: arg2
-    FATAL value < Threshold value ifTrue:[ ^ self ].
+    FATAL < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1 with: arg2) severity: FATAL originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:54:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 fatal: format with: arg1 with: arg2 with:arg3
-    FATAL value < Threshold value ifTrue:[ ^ self ].
+    FATAL < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1 with: arg2 with:arg3) severity: FATAL originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:54:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 info: message
-    INFO value < Threshold value ifTrue:[ ^ self ].
+    INFO < Threshold ifTrue:[ ^ self ].
     self log: message severity: INFO originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:55:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 info: format with: arg1
-    INFO value < Threshold value ifTrue:[ ^ self ].
+    INFO < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1) severity: INFO originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:55:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 info: format with: arg1 with: arg2
-    INFO value < Threshold value ifTrue:[ ^ self ].
+    INFO < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1 with: arg2) severity: INFO originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:55:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 info: format with: arg1 with: arg2 with:arg3
-    INFO value < Threshold value ifTrue:[ ^ self ].
+    INFO < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1 with: arg2 with:arg3) severity: INFO originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:55:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 leave: message
-    LEAVE value < Threshold value ifTrue:[ ^ self ].
+    LEAVE < Threshold ifTrue:[ ^ self ].
     self log: message severity: LEAVE originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:55:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 leave: format with: arg1
-    LEAVE value < Threshold value ifTrue:[ ^ self ].
+    LEAVE < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1) severity: LEAVE originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:55:17 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 leave: format with: arg1 with: arg2
-    LEAVE value < Threshold value ifTrue:[ ^ self ].
+    LEAVE < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1 with: arg2) severity: LEAVE originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:55:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 leave: format with: arg1 with: arg2 with:arg3
-    LEAVE value < Threshold value ifTrue:[ ^ self ].
+    LEAVE < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1 with: arg2 with:arg3) severity: LEAVE originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:55:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 trace0: message
-    TRACE0 value < Threshold value ifTrue:[ ^ self ].
+    TRACE0 < Threshold ifTrue:[ ^ self ].
     self log: message severity: TRACE0 originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:55:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 trace0: format with: arg1
-    TRACE0 value < Threshold value ifTrue:[ ^ self ].
+    TRACE0 < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1) severity: TRACE0 originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:55:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 trace0: format with: arg1 with: arg2
-    TRACE0 value < Threshold value ifTrue:[ ^ self ].
+    TRACE0 < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1 with: arg2) severity: TRACE0 originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:55:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 trace0: format with: arg1 with: arg2 with:arg3
-    TRACE0 value < Threshold value ifTrue:[ ^ self ].
+    TRACE0 < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1 with: arg2 with:arg3) severity: TRACE0 originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:55:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 trace1: message
-    TRACE1 value < Threshold value ifTrue:[ ^ self ].
+    TRACE1 < Threshold ifTrue:[ ^ self ].
     self log: message severity: TRACE1 originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:55:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 trace1: format with: arg1
-    TRACE1 value < Threshold value ifTrue:[ ^ self ].
+    TRACE1 < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1) severity: TRACE1 originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:55:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 trace1: format with: arg1 with: arg2
-    TRACE1 value < Threshold value ifTrue:[ ^ self ].
+    TRACE1 < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1 with: arg2) severity: TRACE1 originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:55:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 trace1: format with: arg1 with: arg2 with:arg3
-    TRACE1 value < Threshold value ifTrue:[ ^ self ].
+    TRACE1 < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1 with: arg2 with:arg3) severity: TRACE1 originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:55:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 trace2: message
-    TRACE2 value < Threshold value ifTrue:[ ^ self ].
+    TRACE2 < Threshold ifTrue:[ ^ self ].
     self log: message severity: TRACE2 originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:55:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 trace2: format with: arg1
-    TRACE2 value < Threshold value ifTrue:[ ^ self ].
+    TRACE2 < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1) severity: TRACE2 originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:55:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 trace2: format with: arg1 with: arg2
-    TRACE2 value < Threshold value ifTrue:[ ^ self ].
+    TRACE2 < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1 with: arg2) severity: TRACE2 originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:55:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 trace2: format with: arg1 with: arg2 with:arg3
-    TRACE2 value < Threshold value ifTrue:[ ^ self ].
+    TRACE2 < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1 with: arg2 with:arg3) severity: TRACE2 originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:55:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 trace3: message
-    TRACE3 value < Threshold value ifTrue:[ ^ self ].
+    TRACE3 < Threshold ifTrue:[ ^ self ].
     self log: message severity: TRACE3 originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:55:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 trace3: format with: arg1
-    TRACE3 value < Threshold value ifTrue:[ ^ self ].
+    TRACE3 < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1) severity: TRACE3 originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:55:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 trace3: format with: arg1 with: arg2
-    TRACE3 value < Threshold value ifTrue:[ ^ self ].
+    TRACE3 < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1 with: arg2) severity: TRACE3 originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:56:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 trace3: format with: arg1 with: arg2 with:arg3
-    TRACE3 value < Threshold value ifTrue:[ ^ self ].
+    TRACE3 < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1 with: arg2 with:arg3) severity: TRACE3 originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:56:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 trace: message
-    TRACE value < Threshold value ifTrue:[ ^ self ].
+    TRACE < Threshold ifTrue:[ ^ self ].
     self log: message severity: TRACE originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:56:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 trace: format with: arg1
-    TRACE value < Threshold value ifTrue:[ ^ self ].
+    TRACE < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1) severity: TRACE originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:56:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 trace: format with: arg1 with: arg2
-    TRACE value < Threshold value ifTrue:[ ^ self ].
+    TRACE < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1 with: arg2) severity: TRACE originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:56:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 trace: format with: arg1 with: arg2 with:arg3
-    TRACE value < Threshold value ifTrue:[ ^ self ].
+    TRACE < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1 with: arg2 with:arg3) severity: TRACE originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:56:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 warning: message
-    WARN value < Threshold value ifTrue:[ ^ self ].
+    WARN < Threshold ifTrue:[ ^ self ].
     self log: message severity: WARN originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:56:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 warning: format with: arg1
-    WARN value < Threshold value ifTrue:[ ^ self ].
+    WARN < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1) severity: WARN originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:56:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 warning:format with:arg1 with:arg2
-    WARN value < Threshold value ifTrue:[ ^ self ].
+    WARN < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith: arg1 with: arg2) severity: WARN originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:56:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 warning:format with:arg1 with:arg2 with:arg3
-    WARN value < Threshold value ifTrue:[ ^ self ].
+    WARN < Threshold ifTrue:[ ^ self ].
     self log: (format bindWith:arg1 with:arg2 with:arg3) severity: WARN originator: thisContext sender receiver
 
     "Modified: / 02-12-2014 / 10:56:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -883,66 +863,67 @@
 !
 
 log: message severity: severity facility: facilityArg originator: originator attachment: attachment on:aStream
-    "Pricipal logging method. This mimics VM __stxLog__()"
+    "Principal logging method. This mimics VM __stxLog__()"
 
-    |facility severityName messageProperlyEncoded words messageAsSent|
+    |facility severityName words messageAsSent secondWord|
 
     facility := facilityArg.
-    messageProperlyEncoded := message.
+    messageAsSent := message.
     severityName := severity name.
 
-    "/ If the message is Unicode 16/32 string and stream is external,
-    "/ we have to recode the message using locale-specific encoding
-    (message isWideString and:[ aStream isExternalStream ]) ifTrue:[
-        OperatingSystem isMSWINDOWSlike ifTrue:[
-            messageProperlyEncoded := message utf8Encoded.
-        ] ifFalse:[
-            messageProperlyEncoded := OperatingSystem encodePath: message.
-        ]
-    ].
-    "/ messageProperlyEncoded := messageProperlyEncoded withoutSeparators.
-
     "/ hack to allow calls from infoPrint/errorPrint.
     "/ if this is an oldStyle infoPrint or errorPrint, do not append another facility and severity
-    words := message asCollectionOfWords.
+    words := messageAsSent asCollectionOfWords.
     (words size >= 2
-    and:[ words first isAlphaNumeric
-    and:[(words second startsWith:$[ )
-    and:[(words second endsWith:$] ) or:[(words second endsWith:']:' )]]]]) ifTrue:[
+     and:[words first isAlphaNumeric
+     and:[((secondWord := words second) startsWith:$[ )
+     and:[(secondWord endsWith:$]) or:[(secondWord endsWith:']:')]]]]) ifTrue:[
         facility := words first.
-        severityName := words second copyButFirst.
+        severityName := secondWord copyButFirst.
         severityName := severityName copyTo:(severityName indexOf:$])-1.
-        messageProperlyEncoded := messageProperlyEncoded copyFrom:(messageProperlyEncoded indexOf:$])+1.
-        "/ messageProperlyEncoded := messageProperlyEncoded withoutSeparators.
-        (messageProperlyEncoded startsWith:$:) ifTrue:[
-            messageProperlyEncoded := (messageProperlyEncoded copyFrom:2).
-            "/ messageProperlyEncoded := messageProperlyEncoded withoutSeparators.
-            (messageProperlyEncoded startsWith:Character space) ifTrue:[
-                messageProperlyEncoded := (messageProperlyEncoded copyFrom:2).
+        messageAsSent := messageAsSent copyFrom:(messageAsSent indexOf:$])+1.
+        "/ messageAsSent := messageAsSent withoutSeparators.
+        (messageAsSent startsWith:$:) ifTrue:[
+            messageAsSent := messageAsSent copyFrom:2.
+            "/ messageAsSent := messageAsSent withoutSeparators.
+            (messageAsSent startsWith:Character space) ifTrue:[
+                messageAsSent := messageAsSent copyFrom:2.
             ].
         ].
     ].
-    messageAsSent := (self logFormat
+
+    messageAsSent := 
+            self logFormat
                 bindWith:(facility ? 'STX')
                 with:severityName
                 with:(Timestamp now printStringFormat:(self timestampFormat))
-                with:originator printString
-                with:messageProperlyEncoded).
-    aStream isView ifFalse:[
-        messageAsSent := messageAsSent string utf8Encoded
+                with:originator
+                with:messageAsSent.
+
+    "/ If the message is Unicode 16/32 string and stream is external,
+    "/ we have to recode the message using locale-specific encoding
+    aStream isExternalStream ifTrue:[
+        messageAsSent := messageAsSent string.  "take care of Texts"
+        messageAsSent containsNon7BitAscii ifTrue:[
+            OperatingSystem isMSWINDOWSlike ifTrue:[
+                messageAsSent := messageAsSent utf8Encoded.
+            ] ifFalse:[
+                messageAsSent := OperatingSystem encodePath:messageAsSent.
+            ].
+        ].
     ].
 
-    "/ Timestamp now printOn:aStream format:'%(year)-%(mon)-%(day) %h:%m:%s.%i'.
-    "/ aStream space.
     aStream nextPutLine: messageAsSent
 
     "
      'hello' infoPrintCR.
 
-     Logger log:'test message' severity: #debug facility: 'TEST'
-     Logger log:'test message' severity: #info facility: 'TEST'
-     Logger log:'test message' severity: #warning facility: 'TEST'
-     Logger log:'test message' severity: #error facility: 'TEST'
+     Logger log:'test message' severity: DEBUG facility: 'TEST'
+     Logger log:'test message' severity: INFO facility: 'TEST'
+     Logger log:'test message' asUnicode16String severity: INFO facility: 'TEST'
+     Logger log:'test message äöüß' severity: INFO facility: 'TEST'
+     Logger log:'test message' severity: WARNING facility: 'TEST'
+     Logger log:'test message' severity: ERROR facility: 'TEST'
      'test message' infoPrintCR
      'test message' errorPrintCR
     "
@@ -955,6 +936,23 @@
 
     "Created: / 14-09-2011 / 21:18:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
     "Modified: / 02-12-2014 / 10:50:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+severityThresholdOf:originator
+    "allow each class to define an individual threshold for Logging"
+
+    ^ originator class 
+        perform:#logSeverityThreshold
+        ifNotUnderstood:[
+            ^ Threshold.
+        ]
+
+    "
+     Logger severityThresholdOf: Object
+     Logger severityThresholdOf: Expecco::Browser
+    "
+
+    "Created: / 15-09-2011 / 10:20:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 ! !
 
 !MiniLogger::Severity methodsFor:'accessing'!
@@ -967,6 +965,41 @@
     ^ value
 ! !
 
+!MiniLogger::Severity methodsFor:'arithmethic'!
+
++ aNumber
+    |next|
+
+    next := value + aNumber.
+    aNumber negative ifTrue:[
+        ^ MiniLogger severities detectLast:[:each| each = next or:[each < next]] ifNone:[self class new initializeWithName:#nil value:next]
+    ].
+
+    ^ MiniLogger severities detect:[:each| each >= next] ifNone:[self class new initializeWithName:#nil value:next]
+
+    "
+        MiniLogger severityINFO + 1
+        MiniLogger severityTRACE to:MiniLogger severityFATAL do:[:each| Transcript showCR:each].
+        MiniLogger severityFATAL downTo:MiniLogger severityTRACE do:[:each| Transcript showCR:each].
+    "
+! !
+
+!MiniLogger::Severity methodsFor:'comparing'!
+
+< aSeverity
+    ^ value < aSeverity value
+!
+
+= aSeverity
+    ^ self == aSeverity or:[value = aSeverity value]
+!
+
+hash
+    "instances, for which #= answers true must answer the same hash"
+
+    ^ value hash
+! !
+
 !MiniLogger::Severity methodsFor:'initialization'!
 
 initializeWithName: aString value: anInteger