[Glass] Can I plug a custom transcript proxy for one closure execution?

Mariano Martinez Peck via Glass glass at lists.gemtalksystems.com
Thu Aug 6 13:30:30 PDT 2015


Hi guys,

This is the situation... I have some kind of background jobs that are fired
from seaside and they fork their own gem. From this background jobs I can
easily watch the log of the gem etc. One example of this is for example,
"Code Update". Problem is that a simple Code Update via Metacello brings
hundreds of entries in the ObjectLog (each Transcript show: ). Same for my
own background jobs. And it's redundant for me to have them in both places,
the gem log AND the object log.

So..the code is:

TranscriptProxy class: show: anObject

| proxy |
*(ObjectLogEntry transcript: anObject printString object: anObject)
addToLog.*
(proxy := self proxyTranscript) ~~ nil
ifTrue: [ proxy show: anObject ]
*ifFalse: [ GsFile gciLogServer: '--transcript--', anObject printString ].*

The second line is how the thing gets written in the ObjectLog and fifth
line is how in the gem log file.

So... is there a way I can hook and say... for this closure execution, bind
"Transcript" to this MarianoProxyTranscript (this class would only write to
gem log for example).  I could do:

*Smalltalk at: #Transcript put: MarianoProxyTranscript.*
*[*
*self executeCode*
*] ensure: [Smalltalk at: #Transcript put: TranscriptProxy.]*

But that will affect other users right? (assuming the execureCode would do
a commit at some point).

Once James said: "Here is one alternative to consider: When a method is
compiled you provide a SymbolList that identifies the globals visible to
the code being compiled."
Could I compile the closure with the binding specified for Transcript?

Thanks in advance,


-- 
Mariano
http://marianopeck.wordpress.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gemtalksystems.com/mailman/private/glass/attachments/20150806/50764b4f/attachment.html>


More information about the Glass mailing list