diff --git a/LogManager.st b/LogManager.st index d4ee3bb..6ef8eb7 100644 --- a/LogManager.st +++ b/LogManager.st @@ -1,12 +1,6 @@ "Copyright placeholder" Object extend [ - logConfig [ - - "I provide access to the global LogConfig" - ^ LogConfig default - ] - logManager [ ^ LogManager default @@ -15,25 +9,25 @@ Object extend [ logDebug: aMessage area: anArea [ (self logManager) - log: LogEntry withMsg: aMessage level: LogLevel debug area: anArea context: self + log: (LogEntry withMsg: aMessage level: LogLevel debug area: anArea context: self) ] logInfo: aMessage area: anArea [ (self logManager) - log: LogEntry withMsg: aMessage level: LogLevel info area: anArea context: self + log: (LogEntry withMsg: aMessage level: LogLevel info area: anArea context: self) ] logNotice: aMessage area: anArea [ (self logManager) - log: LogEntry withMsg: aMessage level: LogLevel notice area: anArea context: self + log: (LogEntry withMsg: aMessage level: LogLevel notice area: anArea context: self) ] logError: aMessage area: anArea [ (self logManager) - log: LogEntry withMsg: aMessage level: LogLevel error area: anArea context: self + log: (LogEntry withMsg: aMessage level: LogLevel error area: anArea context: self) ] ] @@ -65,7 +59,7 @@ Object subclass: LogEntry [ ] level: anLevel [ - level := anLevel; + level := anLevel ] area [ @@ -77,11 +71,11 @@ Object subclass: LogEntry [ ] context [ - ^ context + ^ ctx ] context: aContext [ - context := aContext. + ctx := aContext. ] ] @@ -111,29 +105,29 @@ Object subclass: LogArea [ - Areas := Dictionary new. - - LogArea class >> findArea: aSymbol [ + LogArea class >> defaultForArea: aSymbol [ "Find an Area and place the default into our dictionary" + LogArea allSubclassesDo: [ :each | + (each areaName) = aSymbol + ifTrue: [ + ^ each default. + ]. + ]. - ^ Areas at: aSymbol ifAbsent: [ - LogArea allSubclassesDo: [ :each | - each name = aSymbol - ifTrue: [ - | area | - area := each default. - Areas at: aSymbol put: area. - ^ area - ]. - ]. - ] + ^ nil ] LogArea class >> default [ + ^ self subclassResponsibility ] - name [ + LogArea class >> areaName [ + + ^ self subclassResponsibility + ] + + LogArea class >> areaDescription [ ^ self subclassResponsibility ] @@ -159,41 +153,88 @@ Object subclass: LogArea [ ] ] -Object subclass: LogConfig [ +Object subclass: LogTarget [ + | areas | - + - Config := LogConfig new. - - LogConfig class >> default [ + areas [ + areas ifNil: [ + areas := Dictionary new. + ]. - ^ Config + ^ areas + ] + + findArea: anArea [ + + "Find anArea, or ask for a default" + ^ (self areas) at: anArea ifAbsent: [ + | area | + area := LogArea defaultForArea: anArea. + area ifNotNil: [ + (self areas) at: anArea put: area. + ]. + + area. + ]. + ] + + handle: anEntry ifTrue: aBlock [ + + + | area | + area := self findArea: anEntry area. + + (area enabled and: [anEntry level >= area minLevel]) ifTrue: aBlock + ] + + log: anEntry [ + + self handle: anEntry ifTrue: [ + self print: anEntry. + ] + ] + + print: anEntry [ + + self subclassResponsibility. + ] +] + +LogTarget subclass: LogTranscriptTarget [ + + + + print: anEntry [ + + Transcript show: anEntry msg; nl. ] ] Object subclass: LogManager [ + | target | - Log := LogManager new. + Log := nil. LogManager class >> default [ + Log ifNil: [ + Log := LogManager new. + Log target: LogTranscriptTarget new. + ]. + ^ Log ] - log: message source: anObject area: anArea level: anLevel [ - - | area | + log: anEntry [ + target log: anEntry. + ] - area := LogArea findArea: anArea. - (area enabled and: [anLevel >= area minLevel]) - ifTrue: [ - Transcript show: message; nl. - ]. + target: aTarget [ + target := aTarget. ] ] - -Eval [ -]