You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by Kev Jackson <ke...@it.fts-vn.com> on 2005/01/20 04:32:18 UTC
AspectJ logging was [Re: Purpose of FileUtils.close(...)]
>Another thought: We could create an AntThread class
>to tie a Thread to a Project. Most places that
>currently use Thread constructors would use the same
>AntThread constructor. The top-level AntThread could
>be constructed with an explicit Project; others could
>inherit the Project from the AntThread along whose
>path of execution the child AntThreads were created.
>Have I missed something earth-shattering, or does this
>sound like something that could help us with our
>logging on classes, such as those in the util package,
>that do not extend ProjectComponent?
>
>
I've been thinking about the logging within Ant for a while now, and
whilst people are suggesting solutions, here's my take.
- Log4j works perfectly well for logging, so long as the developer puts
the call in at the appropriate place.
- FileUtils.close() seems to swallow problems that occur when closing files
- For a certain class of problems (out of disk space), it's very
difficult to track down with the current behaviour
- adding logging statements to the code makes the code larger and less clear
I propose using AspectJ as a solution to manually adding in the logging
statements.
I've been implementing this in the project I'm working on here and it's
very elegant. One aspect for logging and place the call to Log4j inside
the aspect, remove all the logging calls from the code (reducing code
size) and dependency on Log4j in *many* classes.
Use before advice and whenever the advice matches, AspectJ will
introduce the logging statement at runtime.
something like this...
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public aspect Logger {
final Log logger = LogFactory.getLog(getClass());
pointcut exceptions() : execution(*
org.apache.tools.ant.*Exception(..));
before() : exceptions() {
logger.info("[ "+ thisJoinPointStaticPart.getSignature()+" ]");
}
}
Problems:
- dependency on yet another third-party jar (compile and run-time,
although the runtime jar is only 41kb)
- large number of packages, have to create a complicated pointcut
hiearchy to capture them all
- licensing? AspectJ is CPL, not ASF code
- could break bc in unforseen ways given the amount of classes that
would be affected
- performance hit (although AspectJ has a very low hit (in the order of
nano-seconds))
I still think that it's the best solution AspectJ+Log4j work like a
dream together. If not for the current version of Ant, perhaps for
future use.
Thoughts/ideas/rebuttals and out-right criticism welcome!
Kev
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org
Re: AspectJ logging was [Re: Purpose of FileUtils.close(...)]
Posted by Steve Loughran <st...@apache.org>.
Kev Jackson wrote:
>
>> Another thought: We could create an AntThread class
>> to tie a Thread to a Project. Most places that
>> currently use Thread constructors would use the same
>> AntThread constructor. The top-level AntThread could
>> be constructed with an explicit Project; others could
>> inherit the Project from the AntThread along whose
>> path of execution the child AntThreads were created. Have I missed
>> something earth-shattering, or does this
>> sound like something that could help us with our
>> logging on classes, such as those in the util package,
>> that do not extend ProjectComponent?
>>
>>
> I've been thinking about the logging within Ant for a while now, and
> whilst people are suggesting solutions, here's my take.
>
> - Log4j works perfectly well for logging, so long as the developer puts
> the call in at the appropriate place.
> - FileUtils.close() seems to swallow problems that occur when closing files
> - For a certain class of problems (out of disk space), it's very
> difficult to track down with the current behaviour
> - adding logging statements to the code makes the code larger and less
> clear
>
> I propose using AspectJ as a solution to manually adding in the logging
> statements.
>
> I've been implementing this in the project I'm working on here and it's
> very elegant. One aspect for logging and place the call to Log4j inside
> the aspect, remove all the logging calls from the code (reducing code
> size) and dependency on Log4j in *many* classes.
>
> Use before advice and whenever the advice matches, AspectJ will
> introduce the logging statement at runtime.
>
> something like this...
>
> import org.apache.commons.logging.Log;
> import org.apache.commons.logging.LogFactory;
>
> public aspect Logger {
> final Log logger = LogFactory.getLog(getClass());
> pointcut exceptions() : execution(*
> org.apache.tools.ant.*Exception(..));
> before() : exceptions() {
> logger.info("[ "+ thisJoinPointStaticPart.getSignature()+" ]");
> }
> }
>
> Problems:
> - dependency on yet another third-party jar (compile and run-time,
> although the runtime jar is only 41kb)
> - large number of packages, have to create a complicated pointcut
> hiearchy to capture them all
> - licensing? AspectJ is CPL, not ASF code
> - could break bc in unforseen ways given the amount of classes that
> would be affected
> - performance hit (although AspectJ has a very low hit (in the order of
> nano-seconds))
>
> I still think that it's the best solution AspectJ+Log4j work like a
> dream together. If not for the current version of Ant, perhaps for
> future use.
>
I havent used aspectJ, so cannot comment there.
I am reluctant to make a new JAR mandatory, plus there is the bootstrap
problem: ant likes to be at the bottom of the food chain with nothing
but an XML parser and the rest of the JDK as dependencies.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org