<html><head></head><body>
    <p>Hello,</p>
    <blockquote>
      <p>I would take this opportunity to point out the TraceMonitor [1]
        package in Cryptography.</p>
    </blockquote>
    <blockquote>
      <p>Installer ss project: "Cryptography'; install: 'TraceMonitor'.</p>
    </blockquote>
    <p>The use is very straightforward as shown in the test case. <code><br/>
      </code></p>
    <blockquote>
      <p><code>TraceMonitorTestCase>>#testTraceMonitor<br/>
        </code></p>
    </blockquote>
    <blockquote>
      <blockquote>
        <p><code>| monitor |<br/>
            monitor := TraceMonitor newNick: 'TestingMonitor'.
            <br/>
            monitor monitor: self.
            <br/>
            self etrace: #info msg: '1'.
            <br/>
            self etrace: #warn msg: '1'.
            <br/>
            self etrace: #debug msg: '1'. <br/>
            self etrace: #error msg: '1'.<br/>
          </code></p>
      </blockquote>
    </blockquote>
    <p><code></code>There is additional API, such as
      TraceMonitor>>#traceToTranscript. The default enabled
      domains are set in <br/>
    </p>
    <blockquote>
      <p>TraceMonitor>>#initializeDefaultMonitors</p>
      <p>
      </p>
    </blockquote>
    <blockquote>
      <blockquote>
        <p> self enableDomain: #info.<br/>
          self enableDomain: #warning.<br/>
          self enableDomain: #error.<br/>
          self enableDomain: #debug.</p>
      </blockquote>
    </blockquote>
    <p>You can always add new domains, such as #over_the_wire or #engine
      or #obj_references or what ever you need for your project. Then
      you can throw an event for that new domain with:</p>
    <blockquote>
      <blockquote>
        <p><code>self etrace: #</code><code>over_the_wire msg: 'msg
            received'.<br/>
          </code><code>self etrace: #engine</code><code> msg: 'Engine
            state changed'.</code><code><br/>
            self etrace: #</code><tt>obj_references</tt><code> msg: 'new
            object registered'. </code>
        </p>
      </blockquote>
    </blockquote>
    <p>Another aspect is that the monitoring of internal objects can be
      granted by an previously registered object. So let us say you are
      monitoring the engine and it wants to extend monitoring to the
      object tables. First, you would #monitor: the engine:</p>
    <blockquote>
      <p><tt>| engine </tt><code>monitor |<br/>
          monitor := TraceMonitor newNick: 'TestingMonitor'. <br/>
        </code><tt>engine := SampleEngine new.</tt><tt><br/>
        </tt><tt>monitor monitor: engine.</tt><tt><br/>
        </tt><tt>engine init.</tt></p>
    </blockquote>
    <p>Then in SampleEngine>>#init we register the Object Tables,
      called the Scope.</p>
    <blockquote>
      <p><code>SampleEngine>>#init<br/>
              objectTables</code><code> := Scope new.<br/>
              self monitor: objectTables.</code></p>
    </blockquote>
    <blockquote>
      <blockquote>
      </blockquote>
    </blockquote>
    <p>Thus, when inside a Scope method, calls #etrace:msg: the
      TraceMonitor will post it.</p>
    <blockquote>
      <p><tt>self etrace: #obj_references msg: 'new object registered'.</tt></p>
    </blockquote>
    <p>I hope this helps you to understand its uses. I hope you find it
      useful!<br/>
      <code></code></p>
    <blockquote>
      <blockquote>
      </blockquote>
      <p><code></code></p>
    </blockquote>
    <p><code></code>Kindly,<br/>
      rabbit<br/>
    </p>
    <p>[1] TraceMonitor -
      <a class="moz-txt-link-freetext" href="http://www.squeaksource.com/@fLap-whI8O1pUZtu/eNY6xSnW">http://www.squeaksource.com/@fLap-whI8O1pUZtu/eNY6xSnW</a> (this link
      may soon expire)</p>
    <div class="moz-cite-prefix">On 7/10/20 3:08 PM, Jakob Reschke
      wrote:<br/>
    </div>
    <blockquote type="cite" cite="mid:CA+ovNC55osnigsZR_0SDviFLDiLt-8qUhrS+yFXzxGkHv5BJ-Q@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
      <div dir="auto">VA Smalltalk has log4s as a Smalltalk port of
        log4j. But I guess it is proprietary because you buy it with VA
        Smalltalk.
        <div dir="auto"><br/>
        </div>
      </div>
      <br/>
      <div class="gmail_quote">
        <div dir="ltr" class="gmail_attr">Davide Grandi <<a href="mailto:davide.grandi@email.it" moz-do-not-send="true">davide.grandi@email.it</a>>
          schrieb am Fr., 10. Juli 2020, 12:57:<br/>
        </div>
        <blockquote class="gmail_quote" style="margin:0 0 0
          .8ex;border-left:1px #ccc solid;padding-left:1ex">slicing a
          small slice of log4* ?<br/>
          *doc => all classes : not too many classes.<br/>
          <br/>
          "they" stole sUnit ... so we can slice log4*.<br/>
          <br/>
          <a href="https://logging.apache.org/log4j/2.x/log4j-api/apidocs/index.html" rel="noreferrer noreferrer" target="_blank" moz-do-not-send="true">https://logging.apache.org/log4j/2.x/log4j-api/apidocs/index.html</a><br/>
          <br/>
          (sorry, just my 0,02€)<br/>
          <br/>
          Cheers,<br/>
          <br/>
               Davide<br/>
          <br/>
          On 10/07/2020 02:13, tim Rowledge wrote:<br/>
          > I'm looking for some good message logging stuff -
          something a little more flexible that `Transcript show:` level
          - and so far the best I can see is a rather old package on
          squeaksource named 'Logging' originally by Keith Hodges but
          with quite a few updates by Mat Fulmer.<br/>
          ><br/>
          > I wonder if anyone is using it in a current image? It
          seems to rely on some process specific variable code that
          *looks* like has been incorporated into the trunk. I don't
          want to spend too much time peering at it is somebody else
          already knows whether it is unusable now or better yet still
          'load and go'<br/>
          ><br/>
          > Or indeed, it somebody has a pointer to sometihng
          newer/better/shinier?<br/>
          ><br/>
          > tim<br/>
          > --<br/>
          > tim Rowledge; <a href="mailto:tim@rowledge.org" target="_blank" rel="noreferrer" moz-do-not-send="true">tim@rowledge.org</a>;
          <a href="http://www.rowledge.org/tim" rel="noreferrer
            noreferrer" target="_blank" moz-do-not-send="true">http://www.rowledge.org/tim</a><br/>
          > Ubi dubium ibi libertas<br/>
          <br/>
          -- <br/>
          Ing. Davide Grandi<br/>
          email    : <a href="mailto:davide.grandi@email.it" target="_blank" rel="noreferrer" moz-do-not-send="true">davide.grandi@email.it</a><br/>
          mobile   : +39 339 7468 778<br/>
          linkedin : <a href="http://linkedin.com/in/davidegrandi" rel="noreferrer noreferrer" target="_blank" moz-do-not-send="true">http://linkedin.com/in/davidegrandi</a><br/>
          <br/>
          <br/>
        </blockquote>
      </div>
    </blockquote>
  

</body></html>