"{ Package: 'stx:libbasic2' }"
Stream subclass:#LoggingStream
instanceVariableNames:'loggedStream logger'
classVariableNames:''
poolDictionaries:''
category:'Streams-Misc'
!
!LoggingStream class methodsFor:'documentation'!
documentation
"
Useful for debugging - stream operations are logged in human readable form
on a separate logger stream, while stream operations are forwarded to the underlying
loggedStream.
Unfinished - may need more protocol to be intercepted.
sample use, logging operations on a socket stream:
sock := ... Socket connectTo: ...
s := LoggingStream new loggedStream: sock.
...
use s instead of sock
...
[author:]
cg
[instance variables:]
[class variables:]
[see also:]
"
! !
!LoggingStream class methodsFor:'instance creation'!
on:aStream logger:aLogger
"Create & return a new instance for arg."
^ self basicNew initializeOn:aStream logger:aLogger
! !
!LoggingStream methodsFor:'accessing'!
loggedStream
^ loggedStream
!
loggedStream:something
loggedStream := something.
!
logger
^ logger
!
logger:something
logger := something.
! !
!LoggingStream methodsFor:'initialization'!
initializeOn:aStream logger:aLogger
loggedStream := aStream.
logger := aLogger.
! !
!LoggingStream methodsFor:'stream protocol'!
next
|el|
el := loggedStream next.
logger nextPutAll:'<<< '; nextPutLine:el storeString.
^ el
!
next:n
|els|
els := loggedStream next:n.
logger nextPutAll:'<<< '; nextPutLine:els storeString.
^ els
!
nextPut:something
logger nextPutAll:'>>> '; nextPutLine:something storeString.
loggedStream nextPut:something.
!
nextPutAll:aCollection
logger nextPutAll:'>>> '; nextPutLine:aCollection storeString.
loggedStream nextPutAll:aCollection.
!
upToEnd
|els|
els := loggedStream upToEnd.
logger nextPutAll:'<<< '; nextPutLine:els storeString.
^ els
! !
!LoggingStream class methodsFor:'documentation'!
version
^ '$Header: /cvs/stx/stx/libbasic2/LoggingStream.st,v 1.4 2013-03-19 19:57:19 cg Exp $'
!
version_CVS
^ '$Header: /cvs/stx/stx/libbasic2/LoggingStream.st,v 1.4 2013-03-19 19:57:19 cg Exp $'
! !