[ https://issues.apache.org/jira/browse/LOG4J2-585?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13961584#comment-13961584 ]
Ralph Goers commented on LOG4J2-585: ------------------------------------ * It isn't clear to me why define() is a better name than getMarker(). define() isn't going to really define anything if the Marker already exists, so I think getMarker is a better name. * Yes, I should add the getMarker(String name, String... parents). * No, you can't add a Marker twice in the hierarchy and create a cycle. SLF4J doesn't allow it either and it would make the checking even slower and uglier. * You are correct that it should make a copy of the array. I will fix that. * Yes. The performance difference between doing this == marker and this.equals(marker) is dramatic. The only way to insure there is only a single marker with a given name is for them to be attached, so they aren't supported in Log4j. I have no idea what the usefulness of detached markers are other then to confuse the hell out of everyone and create multiple Markers with the same name and different hierarchies. SLF4J doesn't provide a way for a detached Marker to become attached and Log4j doesn't even support the concept. > Markers not as powerful as slf4j > -------------------------------- > > Key: LOG4J2-585 > URL: https://issues.apache.org/jira/browse/LOG4J2-585 > Project: Log4j 2 > Issue Type: Improvement > Components: API > Affects Versions: 2.0-rc1 > Reporter: Bruce Brouwer > Attachments: ConceptMarkerBenchmark.java, > CurrentMarkerBenchmark.java, log4j2-585-concept.patch > > > Log4J's markers are not as flexible as markers in SLF4J. > First, SLF4J's markers are mutable. By allowing markers to be mutable, I can > change the relationship of markers to each other based upon runtime or > business conditions. > Second, and more importantly I think, is that essentially SLF4J markers have > this parent/child relationship, much like Log4J, except that in SLF4J, I can > essentially have a marker with multiple parents. For example, I might want > this structure: > * Animal > ** Bird > *** Duck > ** Mammal > *** Bear > *** Dolphin > * Travels by > ** Water > *** Duck > *** Dolphin > ** Land > *** Duck > *** Bear > ** Air > *** Duck > Of course, this is a contrived example, but I wanted to describe the > relationships. Now, if I wanted to filter based on markers that travel by > Water for some appenders, and another appender wants to filter by Mammals, I > can't simply use the single marker of Dolphin. > Either we need to reverse the marker relationship so that it contains its > children, much like SLF4J, or we allow markers to have multiple parents, > which I prefer because it could make it more succinct to define: > {code} > private static final Marker BY_LAND = MarkerManager.getMarker("BY_LAND"); > private static final Marker BY_WATER = MarkerManager.getMarker("BY_WATER"); > private static final Marker DUCK = MarkerManager.getMarker("DUCK", BY_LAND, > BY_WATER); > {code} > As for the Marker API, we would either need to change getParent to > getParents, or get rid of the getParent method from the API and just rely on > the isInstanceOf method to handle checking multiple parents by looking at > private member variables (my preference) -- This message was sent by Atlassian JIRA (v6.2#6252) --------------------------------------------------------------------- To unsubscribe, e-mail: log4j-dev-unsubscr...@logging.apache.org For additional commands, e-mail: log4j-dev-h...@logging.apache.org