Hi everyone.

I've added a tracing aspect to the Lilith modules.

<dependency>
    <groupId>de.huxhorn.lilith</groupId>
    <artifactId>de.huxhorn.lilith.tracing</artifactId>
</dependency>

You can find a bit of info at 
http://sourceforge.net/apps/trac/lilith/wiki/TracingAspect

The code is located at
http://github.com/huxi/lilith/blob/master/tracing/src/main/java/de/huxhorn/lilith/tracing/TracingAspect.java
with usage examples in
http://github.com/huxi/lilith/blob/master/tracing/src/test/java/de/huxhorn/lilith/tracing/TracingAspectTest.java
and
http://github.com/huxi/lilith/tree/master/tracing/src/test/resources/

Please let me know what you think about it.

Cheers,
Joern.

On 02.05.2010, at 06:38, Joern Huxhorn wrote:

> 
> On 01.05.2010, at 19:01, Ralph Goers wrote:
> 
>> 
>> On May 1, 2010, at 3:37 AM, Joern Huxhorn wrote:
>> 
>>> 
>>> How about only adding
>>> 
>>> logger.debug(Message)
>>> logger.debug(Message, Throwable)
>>> 
>>> leaving out the Marker?
>>> 
>>> That way the Message implementation might opt-in to add Marker-support as 
>>> seen fit.
>>> 
>>> I'd like to point out, though, that I haven't thought this through, yet.
>>> 
>>> I think it would likely create rather big problems, including TurboFilters 
>>> that won't properly match on Markers anymore... which would create a large 
>>> amount of confusion for the user.
>>> 
>>> The main-point of Markers, for me, is the ability to use them for efficient 
>>> filtering in Logback (and Lilith).
>>> 
>>> I never liked the hierarchy-aspect of them, especially since they are 
>>> supposed to be global.
>> 
>> I don't mind the hierarchy. I've just found them to be awkward because you 
>> have to call add. It would have been much more natural to have one marker 
>> class extend another if you want that kind of relationship.
> 
> I definitely like hierarchical markers, I simply don't think that this 
> hierarchy should be placed in the code.
> It's about marker-hierarchy at compile-time vs. marker-hierarchy at runtime.
> 
>> 
>>> 
>>> In my opinion, the marker-hierarchy shouldn't be created in the software 
>>> but in the configuration instead. Under no circumstance should other 
>>> modules be able to change my marker-hierarchy.  I once reported a bug about 
>>> recursive marker-hierarchies that you fixed by preventing recursion at all. 
>>> This has the effect that the module that creates the Marker first will be 
>>> able to decide on the hierarchy while a module loaded later-on in the 
>>> application will be stuck on the previously created hierarchy - even if 
>>> it's logging is expecting an entirely different one. This is a catastrophe 
>>> waiting to happen - which is why I'm not using them in that way in my code.
>> 
>> I'm not sure how you create a marker in the configuration when it is used in 
>> the code.  What would debug(MY_MARKER, msg) do if MY_MARKER wasn't defined?
>> 
> 
> No, you misunderstood me. I don't want to put the markers into the logback 
> config file, merely the marker-hierarchy.
> I'll explain below...
> 
>>> 
>>> I'm also not sure about possible classloader-woes concerning MarkerFactory. 
>>> [1][2]
>>> I haven't checked this but I suspect there could be problems with Markers 
>>> comparable to those of custom java.util.logging.Level.
>>> 
>>> Beside that, I think the Markers ENTERING, EXITING and THROWING should be 
>>> used without being put into a TRACING marker. The grouping of those three 
>>> markers into a TRACING group should be done in the Logback config and 
>>> filters could then filter on that group.
>> 
>> I disagree with this. First off, ENTERING and EXITING use a FLOW marker, not 
>> TRACING. THROWING and CATCHING extend EXCEPTION. This makes sense because it 
>> lets you filter on FLOW events as a whole or just entry events if you want.
> 
> I didn't actually refer to XLogger, I was just making an example. Sorry for 
> the confusion, I entirely forgot that this is actually implemented in XLogger 
> already.
> 
> I'll take the XLogger-Markers as an example, then:
> 
> The hierarchy looks like this:
> 
> FLOW_MARKER
>    ENTRY_MARKER
>    EXIT_MARKER
> 
> EXCEPTION_MARKER
>    THROWING_MARKER
>    CATCHING_MARKER
> 
> I deliberately wrote it like that, i.e. FLOW contains ENTRY and EXIT instead 
> of the other way around.
> Your code will only ever use ENTRY, EXIT, THROWING, CATCHING, never FLOW or 
> EXCEPTION.
> FLOW and EXCEPTION are only used for the hierarchy so it's possible to 
> enable/disable both contained markers.
> 
> I'd put *that* hierarchy into the logback/logging -config.
> 
> I'd like to be able to define such a grouping at configuration/runtime
> For example, I, personally, would put ENTRY, EXIT, THROWING and CATCHING into 
> a single group or a might only be interested in ENTRY, EXIT and THROWING and 
> put those into another arbitrarily named group.
> 
> If this was (or is?) supported then the marker hierarchy based on 
> Marker.add() would be needless.
> 
> Another problem is that different modules might use markers of the same name 
> entirely differently. This isn't likely in the above case but there are other.
> 
> This is the reason why markers should NOT be statically defined across 
> different modules/packages, IMHO.
> 
> With configuration of the hierarchy in the configuration one could work 
> around such issues, I think.
> 
> Personally, I'd deprecate MarkerFactory.getMarker() (pointing to 
> getDetachedMarker() instead) and maybe even Marker.add(Marker), 
> Marker.remove(Marker) etc., (documenting why using this feature is probably 
> bad).
> 
>> 
>>> But this after-the-fact discussion isn't helping anymore.
>>> One way to fix it, though, would be not caching Markers in MarkerFactory at 
>>> all.
>>> 
>>> The use-case described by Gunnar could (and IMHO: should) be handled using 
>>> the MDC, not Markers. He could call MDC.put("CONFIDENTIAL","true") and 
>>> perform special handling that way.
>> 
>> I would only recommend the MDC be used for data that could possibly span log 
>> events. Having to set it and remove it after each logging call would be a 
>> pain. Markers work better for this.
> 
> I wouldn't be a friend of this either. :p
> 
>> 
>>> 
>>> Both ways assume that the Logging system is evaluating either Marker or MDC 
>>> which isn't the wisest thing to do.
>>> Confidential info should NEVER be logged, IMHO, regardless of the logging 
>>> configuration.
>> 
>> Sometimes it has to be. Trying to diagnose problems often requires this kind 
>> of information. Also, audit logs will often contain confidential or 
>> sensitive information. We have different levels of classification of data. A 
>> user's bank account number might appear in a log. A user's PIN or password 
>> will never appear.
>> 
> 
> I think it would be a good idea to use entirely separate markers in those 
> cases, i.e.
> FOO_MARKER and CONFIDENTIAL_FOO_MARKER
> 
> If the grouping/hierarchy-configuration would allow wildcards then it would 
> be possible to group "*FOO_MARKER" and it would also be possible to group 
> "CONFIDENTIAL_*" to catch all confidential calls.
> The used markers are essentially scoped for modules.
> 
> I'd expect defining and documenting markers in an interface, e.g.
> public interface Slf4jExtMarkers {
>  final Marker ENTRY=LoggerFactory.getDetachedMarker("ENTRY");
>  final Marker EXIT=LoggerFactory.getDetachedMarker("EXIT");
>  final Marker THROWING=LoggerFactory.getDetachedMarker("THROWING");
>  final Marker CATCHING=LoggerFactory.getDetachedMarker("CATCHING");
> }
> 
> Problem:
> Markers aren't immutable - so it would be possible the change those static 
> instances :p
> We could, however, implement an ImmutableMarker instead for use-cases like 
> that, which would throw an UnsupportedOperationException in case of add() and 
> remove().
> 
> Cheers,
> Joern.
> _______________________________________________
> slf4j-dev mailing list
> [email protected]
> http://qos.ch/mailman/listinfo/slf4j-dev

_______________________________________________
slf4j-dev mailing list
[email protected]
http://qos.ch/mailman/listinfo/slf4j-dev

Reply via email to