[kepler-users] logging actor

Chris Weed chrisweed at gmail.com
Wed Apr 29 13:15:05 PDT 2009


I couldn't get Log4j to work, but the native logging works great.
I will probably make a hybrid of the two where the logging singleton is used
to aggregate log messages in a composite actor without connections, but
the displays are connected so you don't have multiple displays pop-up.
Chris

On Wed, Apr 29, 2009 at 10:56 AM, Ford, Mark <mark.ford at ll.mit.edu> wrote:
> With the java logging approach, each actor would create its own Logger
> instance via Logger.getLogger(“com.example.kepler.actor.MyActor”). The name
> passed to the static getLogger method should uniquely identify the logger.
> Convention dictates that the name matches the package structure but this
> isn’t a requirement. The dot acts as a delimiter and allows you to create
> hierarchical namespaces for log statements. This value is typically defined
> statically within the class but it could be configurable (more on that in a
> bit). The single Java Logging actor I suggested below would interrogate the
> singleton LogManager class and ensure that it injected its Handler(s) into
> the appropriate chains to capture the logging. The LogManager can be
> inspected to find all of the registered Loggers (from previous getLogger)
> calls and it seems conceivable that a user could select which loggers will
> appear in the display or perhaps configure the threshold for logging (trace,
> debug, etc).
>
> In your case, you might want to change the name of Logger based on whether
> the actor is nested within a composite actor. For example, if you might have
> two composite actors C1 and C2 and both contain an instance of actor A.
> Without any modifications, A would use “com.example.kepler.actors.A”.  If
> you want to differentiate the logging output of C1’s A versus C2’s A then
> you could make this logger name (or a prefix) a param of the actor and set
> it accordingly on A.
>
> With respect to propagating logging out of a composite actor with ports, I
> think you’d need to add an output port on the composite actor for logging
> and connect all of nested actors to this logging port. Either the composite
> actors never have a logging display or its configurable. This way you won’t
> end up with multiple displays if your workflow contains multiple composite
> actors with this type of logging setup.
>
> On 4/29/09 10:27 AM, "Chris Weed" <chrisweed at gmail.com> wrote:
>
> It seems like the usual programming pattern for Java with Log4J is to put a
> logging singleton in classes and not have an explicit output of
> logging messages.
> This would seem to naturally map to putting a logging singleton into actors,
> and not have an explicit output port for logging messages. Your point about
> having an output port, and allowing the user to connect to it or not to
> control
> whether it is used is appealing. Alternatively, it seems like an actor could
> always write to the log, but control this with a boolean parameter or
> through
> how log messages are filtered.
>
> I think the most important thing for my use of logging is a hierarchical
> system
> that captures the hierarchical nature of composite actors. I want the
> logging
> to filter up from the internal actors to the outer workflow.
> Chris
>
> On Wed, Apr 29, 2009 at 9:51 AM, Ford, Mark <mark.ford at ll.mit.edu> wrote:
>> There’s a Logging actor which accepts StringToken inputs. This assumes
>> that
>> the actors you connect to it have ports which produce meaningful logging
>> info. With this actor you’d wire whatever actors you wanted to log into
>> the
>> Logging actor and it would record their log statements to a file. The
>> contents of this file could always be displayed in a window as suggested
>> in
>> another post.
>>
>> The drawback here is that the actors that connect to the logger are
>> required
>> to have a port that outputs meaningful logging. I don’t know if this is
>> necessarily the case with existing actors. If you’re creating actors from
>> scratch then you could design them with this additional port in mind.
>>
>> Your suggestion of capturing standard out is possible as well. You could
>> simply place an actor on the canvas which T’d System.out to the existing
>> printstream plus your own display. This has its drawbacks as well since
>> you
>> might end up with lots of junk in the display or inconsistent formats.
>>
>> Another option would be to use the standard Java logging or an equivalent
>> (log4j or commons logging) within the actors. Again, this assumes that
>> you’re writing your own actors. Each actor would produce info, debug,
>> warning, error, or trace log statements using the standard API. The
>> logging
>> API’s allow you to configure the handler chains for logging dynamically so
>> a
>> special logging actor could inject itself into the chain and thereby
>> capture
>> the log records and format them accordingly to its own display.
>>
>> I like the idea of having a logging port on each actor but I’d like the
>> output to be structured so the consumer of the log info would be able to
>> make some decisions about handling it. This would also make the logging
>> very
>> explicit since you’d be able to see the connections in the workflow and
>> know
>> which actors were contributing to the log. This may have its own problems
>> if
>> you have large workflows since you may end up with links all over the
>> place.
>>
>>
>> On 4/28/09 4:26 PM, "Chris Weed" <chrisweed at gmail.com> wrote:
>>
>> Hi,
>> I would like to use an actor that will capture all of the logging from
>> various actors and output these to a display.
>> For example, it could capture everything sent to "standard out", and
>> pipe this to a display.
>> Another option would be that it holds a logging singleton and all of
>> the other actors will write log messages to this singleton.
>>
>> Has anyone done this before.
>> Chris
>> _______________________________________________
>> Kepler-users mailing list
>> Kepler-users at kepler-project.org
>> http://mercury.nceas.ucsb.edu/kepler/mailman/listinfo/kepler-users
>>
>>
>>
>>
>> --
>> Mark Ford
>> MIT Lincoln Laboratory
>> 244 Wood Street
>> Lexington MA 02420
>> (781) 981-1843
>>
>
>
>
>
> --
> Mark Ford
> MIT Lincoln Laboratory
> 244 Wood Street
> Lexington MA 02420
> (781) 981-1843
>



More information about the Kepler-users mailing list