On May 13, 2009, at 5:43 PM, Sergiu Dumitriu wrote:

> Vincent Massol wrote:
>> On May 13, 2009, at 5:30 PM, Sergiu Dumitriu wrote:
>>
>>> Vincent Massol wrote:
>>>> Hi,
>>>>
>>>> I wanted to see if we could move our LogEnabled lifecycle phase  
>>>> to a
>>>> Logging component. I think it's not going to work since this means
>>>> injecting a LoggingFactory/LoggingManager component and you need to
>>>> call getLogger(this.getClass()) to get access to the Logger which  
>>>> is
>>>> awkward.
>>>>
>>>> What I propose:
>>>>
>>>> 1) Use SLF4J (drop the slf4j-log4j jar in our WEB-INF/lib so that
>>>> SLF4J uses log4j by default)
>>>> 2) Drop the JCL/JUL/LOG4j SLF4J legacy jars in our WEB-INF/lib too
>>>> and exclude the JCL/JUL/LOG4J jars from our poms so that all third
>>>> party logs go to our logging system
>>>> 3) Non component code should use a SLF4J's LoggerFactory directly
>>>>
>>>> 4a) Keep LogEnabled and AbstractLogEnabled for our components
>>>> or
>>>> 4b) Automatically inject a Logger and a ComponentManager when there
>>>> are fields with these types in a component class.
>>>>
>>>> I like 4b) for its simplicity but I'm worried by the "magical"  
>>>> aspect
>>>> of it.
>>> But... Why do we need 4 at all?
>>
>> You mean use a static and don't do IOC?
>>
>> I don't like it it has all the problems of static.
>>
>
> Why not just have a plain field, like:
>
> final Logger logger = LoggerFactory.getLogger(Wombat.class);
>
> Is the logger a component? It's just plain logging, we don't need to  
> go
> that deep. IOC is fine where it's useful, but here it's just  
> overhead IMO.

Funny you say this when I find this in your code:

         // TODO It would be better to use a custom logger class, how  
to do that?
         StringOutputStream log = new StringOutputStream();
         PrintStream out = System.out;
         System.setOut(new PrintStream(log));
         engine.evaluate(context, writer, "mytemplate",
             new StringReader("#set($foo = $date.getYear())$foo  
$date.month"));
         System.setOut(out);

:)

Your example makes it hard to unit test. I'd personally see it as a  
regression to what we currently have.

Thanks
-Vincent

_______________________________________________
devs mailing list
devs@xwiki.org
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to