directory-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Piotr Kubowicz (JIRA)" <j...@apache.org>
Subject [jira] [Comment Edited] (DIRSERVER-1804) [patch] Fix ApacheDS code to allow control and reduce number of outputted logs
Date Fri, 15 Feb 2013 13:11:12 GMT

    [ https://issues.apache.org/jira/browse/DIRSERVER-1804?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13579155#comment-13579155
] 

Piotr Kubowicz edited comment on DIRSERVER-1804 at 2/15/13 1:09 PM:
--------------------------------------------------------------------

Maybe it would also be good if you move 'dedicated' loggers to a namespace, for example rename
'ATTRIBUTE_TYPE' to 'org.apache.directory.server.ATTRIBUTE_TYPE' (or something more nested,
like .server.dedicated.ATTRIBUTE_TYPE). This way those loggers would fit nicely into logger
hierarchy, i.e. you would be able to see enable debug logs everywhere or restrict visible
messages only to ERROR with a single command like:
log4j.logger.org.apache.directory.server=DEBUG

Your code would benefit from making all loggers being part of some hierarchy, for example
ldap-client-test/src/test/resources/log4j.properties might become something as simple as
log4j.logger.net=FATAL
log4j.logger.org.apache.directory=FATAL

Note that currently you need to modify all your log4j.properties when you introduce a new
'dedicated' logger. If those were all part of a hierarchy, adding a new dedicated logger wouldn't
require any changes in log4j.properties, because you would be able to cover all with a parent
logger rule.
                
      was (Author: pkubowicz):
    Maybe it would also be good if you move 'dedicated' loggers to a namespace, for example
rename 'ATTRIBUTE_TYPE' to 'org.apache.directory.server.ATTRIBUTE_TYPE' (or something more
nested, like .server.dedicated.ATTRIBUTE_TYPE). This way those loggers would fit nicely into
logger hierarchy, i.e. you would be able to see enable debug logs everywhere or restrict visible
messages only to ERROR with a single command like:
log4j.logger.org.apache.directory.server=DEBUG

Your code would benefit from making all loggers being part of some hierarchy, for example
ldap-client-test/src/test/resources/log4j.properties might become something as simple as
log4j.logger.net=FATAL
log4j.logger.org.apache.directory=FATAL
                  
> [patch] Fix ApacheDS code to allow control and reduce number of outputted logs
> ------------------------------------------------------------------------------
>
>                 Key: DIRSERVER-1804
>                 URL: https://issues.apache.org/jira/browse/DIRSERVER-1804
>             Project: Directory ApacheDS
>          Issue Type: Bug
>    Affects Versions: 2.0.0-M10
>            Reporter: Piotr Kubowicz
>              Labels: log4j, log4j-over-slf4j
>             Fix For: 2.0.0-M11
>
>         Attachments: slf4j-logging.patch
>
>
> I am using Maven artifact apacheds-all version 2.0.0-M10 (http://mvnrepository.com/artifact/org.apache.directory.server/apacheds-all/2.0.0-M10).
> I want to start and stop the server from my Java code (in a way similar to the one described
in the official 'embedded sample': http://svn.apache.org/repos/asf/directory/documentation/samples/trunk/embedded-sample/src/main/java/org/apache/directory/seserver/EmbeddedADSVer157.java).
> The problem is: ApacheDS start takes 7 minutes and recuces to 3 seconds when standard
output is redirected to /dev/null. Reason: you make lots of debug-level logging which take
99.9% of the startup time.
> I would like to restrict logging from ApacheDS to ERROR level. However, it is not possible
because of the flawed ApacheDS code.
> You use SLF4J loggers this way:
> private static final Logger LOG = LoggerFactory.getLogger( JdbmIndex.class.getSimpleName()
);
> This is absolutely *unacceptable*. The result of this code that the logger would be created
for name 'JdbmIndex' and there is no way to use logger inheritance to control all logging
from ApacheDS code, without affecting my own code. I don't want to look through ApacheDS code,
find classes that fail to use logging correctly and silence each of these classes one by one
in my own logging configuration.
> The correct way for using logging in Java is to use:
> private static final Logger LOG = LoggerFactory.getLogger( JdbmIndex.class );
> Then the logger would be created for name 'org.apache.directory.server.core.partition.impl.btree.jdbm.JdbmIndex'
and I would be able to silence the whole 'org.apache.directory' or just 'org.apache.directory.server.core.partition'
- or any part I like.
> ----
> I created a patch based on the today version of trunk. It introduces a single correct
way of creating loggers across all ApacheDS code. I have also updated your logging configuration
in log4j.properties to make sure the application behaviour won't change after my fixes.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message