--- a/MiniLogger.st Wed Mar 01 10:39:43 2017 +0100
+++ b/MiniLogger.st Wed Mar 01 10:59:59 2017 +0100
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
"
COPYRIGHT (c) 2012-2014 by Jan Vrany & eXept Software AG
All Rights Reserved
@@ -15,9 +17,10 @@
Object subclass:#MiniLogger
instanceVariableNames:''
- classVariableNames:'ALL DEBUG ENTER ERROR FATAL INFO Instance LEAVE NONE Severities
- TRACE TRACE0 TRACE1 TRACE2 TRACE3 Threshold WARN WARNING
- LogOnTranscript LogOnStderr LogFormat TimestampFormat'
+ classVariableNames:'ALL DEBUG ENTER ERROR FATAL INFO Instance LEAVE LogFormat
+ LogOnStderr LogOnTranscript NONE Severities TRACE TRACE0 TRACE1
+ TRACE2 TRACE3 WARN WARNING Threshold ThresholdPerClass
+ ThresholdPerPackage TimestampFormat'
poolDictionaries:''
category:'System-Debugging-Support'
!
@@ -349,36 +352,96 @@
!
loggingThreshold:severity
- "Sets logging threshold. No severity lower than given one will be logged.
- Use `Logger severityNONE` to suppress logging completely or
- `Logger severityALL` to log all messages"
+ "Sets logging threshold.
+ All severities higher or equal to the given one will be logged.
+ Use `Logger severityNONE` to suppress logging completely
+ or `Logger severityALL` to log all messages"
- ((Severities includes:severity)
- or:[ severity == ALL or:[ severity == NONE ] ])
- ifFalse:[
- self error:'Invalid severity. Use of Logger severityXXX'.
- ^ self.
- ].
+ (
+ (Severities includes:severity)
+ or:[ severity == ALL or:[ severity == NONE ] ]
+ ) ifFalse:[
+ self error:'Invalid severity. Use of Logger severityXXX'.
+ ^ self.
+ ].
Threshold := severity
"
Logger loggingThreshold: Logger severityALL.
Logger loggingThreshold: Logger severityINFO.
+ Logger loggingThreshold: Logger severityDEBUG.
+
Logger loggingThreshold: Logger severityNONE.
"
"Created: / 13-08-2014 / 14:34:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 26-08-2014 / 08:23:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified (comment): / 09-10-2014 / 09:35:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified (comment): / 01-03-2017 / 10:42:31 / cg"
+!
+
+loggingThreshold:aLimitOrNil forClass:aClass
+ "allows individual per-class setting of the threshold (useful during debugging).
+ With a nil limit, the default is reinstalled for that class."
+
+ "/ the original scheme asked the class;
+ "/ but that required adding a getter to debugged classes, which
+ "/ is easily forgotten and checked in.
+ "/ Better keep that nfo here, so wemight even provide a GUI for it some time in the future...
+
+ "/ remember the class name - in case it is reloaded/changes identity etc.
+ aLimitOrNil isNil ifTrue:[
+ ThresholdPerClass notNil ifTrue:[
+ ThresholdPerClass removeKey:(aClass theNonMetaclass name) ifAbsent:[].
+ ThresholdPerClass isEmpty ifTrue:[
+ ThresholdPerClass := nil.
+ ].
+ ].
+ ^ self
+ ].
+ ThresholdPerClass isNil ifTrue:[
+ ThresholdPerClass := Dictionary new.
+ ].
+ ThresholdPerClass at:aClass theNonMetaclass name put:aLimitOrNil.
+
+ "Created: / 01-03-2017 / 10:52:25 / cg"
+!
+
+loggingThreshold:aLimitOrNil forPackage:aPackageName
+ "allows individual per-package setting of the threshold (useful during debugging).
+ With a nil limit, the default is reinstalled for that class."
+
+ "/ the original scheme only asked the class;
+ "/ but that required adding many getters to debugged packages,
+ "/ which are easily forgotten and checked in.
+ "/ Better keep that info here, so we might even provide a GUI for it some time in the future...
+
+ "/ remember the class name - in case it is reloaded/changes identity etc.
+ aLimitOrNil isNil ifTrue:[
+ ThresholdPerPackage notNil ifTrue:[
+ ThresholdPerPackage removeKey:(aPackageName) ifAbsent:[].
+ ThresholdPerPackage isEmpty ifTrue:[
+ ThresholdPerPackage := nil.
+ ].
+ ].
+ ^ self
+ ].
+ ThresholdPerPackage isNil ifTrue:[
+ ThresholdPerPackage := Dictionary new.
+ ].
+ ThresholdPerPackage at:aPackageName put:aLimitOrNil.
+
+ "Created: / 01-03-2017 / 10:53:42 / cg"
! !
!MiniLogger class methodsFor:'logging'!
log: message
- self log: message severity: DEBUG originator: thisContext sender receiver.
+ self log:message severity:DEBUG originator:(thisContext sender receiver).
"Created: / 15-09-2011 / 10:27:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 02-12-2014 / 10:52:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified (format): / 01-03-2017 / 10:27:52 / cg"
!
log: message facility: facility
@@ -838,18 +901,19 @@
!MiniLogger class methodsFor:'private'!
facilityOf:originator
- ^ originator class
- perform:#logFacility
- ifNotUnderstood:[
- |pkg|
-
- pkg := originator class package.
- (pkg startsWith:'stx') ifTrue:[
- 'STX'
- ] ifFalse:[
- pkg copyFrom:((pkg lastIndexOf:$:) + 1)
- ]
- ]
+ ^ originator class logFacility
+"/ ^ originator class
+"/ perform:#logFacility
+"/ ifNotUnderstood:[
+"/ |pkg|
+"/
+"/ pkg := originator class package.
+"/ (pkg startsWith:'stx') ifTrue:[
+"/ 'STX'
+"/ ] ifFalse:[
+"/ pkg copyFrom:((pkg lastIndexOf:$:) + 1)
+"/ ]
+"/ ]
"
Logger facilityOf: Object
@@ -857,6 +921,7 @@
"
"Created: / 15-09-2011 / 10:20:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 01-03-2017 / 10:43:23 / cg"
!
log: message severity: severity facility: facilityArg originator: originator attachment: attachment on:aStream
@@ -923,7 +988,7 @@
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: INFO facility: 'TEST'
Logger log:'test message' severity: WARNING facility: 'TEST'
Logger log:'test message' severity: ERROR facility: 'TEST'
'test message' infoPrintCR
@@ -943,18 +1008,37 @@
severityThresholdOf:originator
"allow each class to define an individual threshold for Logging"
- ^ originator class
- perform:#logSeverityThreshold
- ifNotUnderstood:[
- ^ Threshold.
- ]
+ |cls t|
+ cls := originator class.
+ ThresholdPerClass notNil ifTrue:[
+ t := ThresholdPerClass at:(cls theNonMetaclass name) ifAbsent:nil.
+ t notNil ifTrue:[^ t].
+ ].
+ ThresholdPerPackage notNil ifTrue:[
+ t := ThresholdPerPackage at:(cls package) ifAbsent:nil.
+ t notNil ifTrue:[^ t].
+ ].
+
+ "/ disabled; the above scheme is better...
+ "/ ^ cls
+ "/ perform:#logSeverityThreshold
+ "/ ifNotUnderstood:[ ^ Threshold ]
+ ^ Threshold
+
"
Logger severityThresholdOf: Object
Logger severityThresholdOf: Expecco::Browser
+
+ Logger loggingThreshold:(Logger severityDEBUG) forClass:(Expecco::Browser).
+ Logger loggingThreshold:(Logger severityDEBUG) forPackage:'stx:libbasic'.
+
+ Logger loggingThreshold:nil forClass:(Expecco::Browser).
+ Logger loggingThreshold:nil forPackage:'stx:libbasic'.
"
"Created: / 15-09-2011 / 10:20:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified (comment): / 01-03-2017 / 10:59:12 / cg"
! !
!MiniLogger::Severity methodsFor:'accessing'!