Sounds reasonable to me. Thanks for tackling this, Claude!

On Sun, Aug 30, 2015 at 9:07 AM, Claude Brisson <cla...@renegat.net> wrote:

> Some remarks after a little investigation.
>
> 1) Using the ServletContext logger doesn't seem to be a widespread
> practice among slf4j folks. There is a slf4j-servletcontext implementation
> on github, but it is not referenced on the official slf4j site. Moreover, I
> tested it, and it does not support deserialization (I had some doubts about
> it, because deserialization may happen before ServletContext
> initialization), so it cannot be used as is. Plus, it needs to be declared
> as context's listener in the deployment file.
>
> It's possible to solve those two problems (alas not from our own codebase):
>  - The logger object can be a proxy to a transcient implementation that
> waits for the servlet context to be initialized.
>  - Since J2EE API v3.0, there is no need to declare the listener in the
> deployment descriptor, as it can be done using Java annotations, which
> would fit slf4j 'jar'-only binding strategy far more than the current state
> of the project.
>
> But not using the ServletContext logger is not necessarily a bad idea. Of
> course, "it's here", so why not use it, but:
>  - In practice, container logger and webapp logger serve rather different
> purposes, as container logs won't be active but at initialization or
> destruction.
>  - They're not formatted the same way.
>  - It's not so cumbersome to watch several log files at once (I mean, on a
> real O.S. with a proper command line, of course) when you need to see both
> at the same time.
>  - It's much easier to configure a per-webapp logging (and consequently to
> ease webapp deployment).
>  - Gathering logs is always doable at the container level, which can also
> use slf4j (or one of its many bridges), bypassing ServletContext (which is
> just a proxy).
>
> Anyhow, even it's a little drawback for some people, it can not weight as
> much in the balance as being freed of all logging
>
> 2) We can -and should- keep our logger injection mechanism, since it not
> only helps separating different instances logs, but also permits unifying
> log line prefixes. No more need to define the logger in
> velocity.properties, by default it will be a static logger named
> "Velocity". The only constraint when trying to separate instances logs is
> to explicitly give different names to each logger (since the underlying
> LoggerFactory mechanism remains static). Not a big deal.
>
> Without any other objection, I'll start this drastic simplification very
> soon. We don't even need to keep the o.a.v.runtime.log package. And four
> sub-modules can disappear...
>
>   Claude
>
>
> On 21/08/2015 17:25, Nathan Bubna wrote:
>
>> I like simple. :)
>>
>> On Fri, Aug 21, 2015 at 2:18 AM, Claude Brisson<cla...@renegat.net>
>> wrote:
>>
>> It looks like that with slf4j, we could keep loggers injection even in
>>> session tools, so no need to go static:
>>>
>>> "As of SLF4J version 1.5.3, logger instances survive serialization. Thus,
>>> serialization of the host class no longer requires any special action,
>>> even
>>> when loggers are declared as instance variables. In previous versions,
>>> logger instances needed to be declared as transient in the host class."
>>> (http://www.slf4j.org/faq.html#declared_static  )
>>>
>>>
>>> So it looks like the perfect solution, and will simplify many things.
>>>
>>>    Claude
>>>
>>>
>>>
>>> On 20/08/2015 21:32, Sergiu Dumitriu wrote:
>>>
>>> A recent discussion was proposing to switch to slf4j as the façade.
>>>> On Aug 20, 2015 3:12 PM, "Claude Brisson"<cla...@renegat.net>  wrote:
>>>>
>>>> Thanks for the review.
>>>>
>>>>> Yes, we should be using Velocity logging facade, but I just don't see
>>>>> for
>>>>> now how we should do this while preserving tools serialization.
>>>>>
>>>>> For now I just mimicked a behavior present in some deprecated classes,
>>>>> re-introducing the dependency of velocity-tools-view on
>>>>> commons-logging.
>>>>>
>>>>> I agree that we should try to do better, but if a logger cannot be
>>>>> statically reached from a session tool, and if it cannot be passed at
>>>>> initialization because of serialization, there's a problem...
>>>>>
>>>>> Let say for instance that we use transient weak references on
>>>>> non-serializable Velocity loggers, fed up at initialization time. Then
>>>>> the
>>>>> tool could detect it has lost its logger at deserialization, and ask a
>>>>> new
>>>>> one, but to whom? It's a bad idea either to keep a static reference on
>>>>> the
>>>>> servlet context.
>>>>>
>>>>> I'm open to suggestions...
>>>>>
>>>>>
>>>>>     Claude
>>>>>
>>>>>
>>>>> On 20/08/2015 20:45, Sergiu Dumitriu wrote:
>>>>>
>>>>> Isn't the logging framework supposed to be pluggable, meaning that all
>>>>>
>>>>>> calls go through org.apache.velocity.runtime.log.Log which is then
>>>>>> passed to the actual logging library in use, be it log4j, slf4j, jcl
>>>>>> or
>>>>>> commons-logging?
>>>>>>
>>>>>> On 08/20/2015 01:16 PM,cbris...@apache.org  wrote:
>>>>>>
>>>>>> Author: cbrisson
>>>>>>
>>>>>>> Date: Thu Aug 20 17:16:02 2015
>>>>>>> New Revision: 1696822
>>>>>>>
>>>>>>> URL:http://svn.apache.org/r1696822
>>>>>>> Log:
>>>>>>> J2EE containers session serialization implies static logging from
>>>>>>> session scoped tools
>>>>>>>
>>>>>>> Modified:
>>>>>>>        velocity/tools/trunk/src/site/xdoc/changes.xml
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> velocity/tools/trunk/velocity-tools-struts/src/main/java/org/apache/velocity/tools/struts/TilesTool.java
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/AbstractSearchTool.java
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/BrowserTool.java
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/ImportSupport.java
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/tools/ImportTool.java
>>>>>>>
>>>>>>> Modified: velocity/tools/trunk/src/site/xdoc/changes.xml
>>>>>>> URL:
>>>>>>>
>>>>>>>
>>>>>>> http://svn.apache.org/viewvc/velocity/tools/trunk/src/site/xdoc/changes.xml?rev=1696822&r1=1696821&r2=1696822&view=diff
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> ==============================================================================
>>>>>>> --- velocity/tools/trunk/src/site/xdoc/changes.xml (original)
>>>>>>> +++ velocity/tools/trunk/src/site/xdoc/changes.xml Thu Aug 20
>>>>>>> 17:16:02
>>>>>>> 2015
>>>>>>> @@ -35,6 +35,7 @@
>>>>>>>             <li>Reflect Velocity Engine dependency shading of
>>>>>>> commons-lang
>>>>>>> and commons-collections (cb)</li>
>>>>>>>             <li>Removed deprecated class
>>>>>>> org.apache.velocity.tools.generic.log.LogSystemCommonsLog (cb)</li>
>>>>>>>             <li>MathTool: fixed result type calculations and added
>>>>>>> bitwise
>>>>>>> operations (cb)</li>
>>>>>>> +        <li>have session scoped tools use a static logger to fix
>>>>>>> J2EE
>>>>>>> containers session serialization (cb)</li>
>>>>>>>             </ul>
>>>>>>>         </subsection>
>>>>>>>
>>>>>>> Modified:
>>>>>>>
>>>>>>>
>>>>>>> velocity/tools/trunk/velocity-tools-struts/src/main/java/org/apache/velocity/tools/struts/TilesTool.java
>>>>>>> URL:
>>>>>>>
>>>>>>>
>>>>>>> http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-struts/src/main/java/org/apache/velocity/tools/struts/TilesTool.java?rev=1696822&r1=1696821&r2=1696822&view=diff
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> ==============================================================================
>>>>>>> ---
>>>>>>>
>>>>>>>
>>>>>>> velocity/tools/trunk/velocity-tools-struts/src/main/java/org/apache/velocity/tools/struts/TilesTool.java
>>>>>>> (original)
>>>>>>> +++
>>>>>>>
>>>>>>>
>>>>>>> velocity/tools/trunk/velocity-tools-struts/src/main/java/org/apache/velocity/tools/struts/TilesTool.java
>>>>>>> Thu Aug 20 17:16:02 2015
>>>>>>> @@ -101,7 +101,6 @@ public class TilesTool extends ImportSup
>>>>>>>                 setRequest(ctx.getRequest());
>>>>>>>                 setResponse(ctx.getResponse());
>>>>>>>                 setServletContext(ctx.getServletContext());
>>>>>>> -            setLog(ctx.getVelocityEngine().getLog());
>>>>>>>             }
>>>>>>>         }
>>>>>>>
>>>>>>> Modified:
>>>>>>>
>>>>>>>
>>>>>>> velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/AbstractSearchTool.java
>>>>>>> URL:
>>>>>>>
>>>>>>>
>>>>>>> http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/AbstractSearchTool.java?rev=1696822&r1=1696821&r2=1696822&view=diff
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> ==============================================================================
>>>>>>> ---
>>>>>>>
>>>>>>>
>>>>>>> velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/AbstractSearchTool.java
>>>>>>> (original)
>>>>>>> +++
>>>>>>>
>>>>>>>
>>>>>>> velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/AbstractSearchTool.java
>>>>>>> Thu Aug 20 17:16:02 2015
>>>>>>> @@ -22,7 +22,8 @@ package org.apache.velocity.tools.view;
>>>>>>>     import java.util.Collections;
>>>>>>>     import java.util.List;
>>>>>>>     import javax.servlet.http.HttpServletRequest;
>>>>>>> -import org.apache.velocity.runtime.log.Log;
>>>>>>> +import org.apache.commons.logging.Log;
>>>>>>> +import org.apache.commons.logging.LogFactory;
>>>>>>>     import org.apache.velocity.tools.Scope;
>>>>>>>     import org.apache.velocity.tools.config.DefaultKey;
>>>>>>>     import org.apache.velocity.tools.config.InvalidScope;
>>>>>>> @@ -129,19 +130,11 @@ public abstract class AbstractSearchTool
>>>>>>>         protected static final String STORED_RESULTS_KEY =
>>>>>>>             StoredResults.class.getName();
>>>>>>>     -    protected Log LOG;
>>>>>>> +    protected static final Log LOG =
>>>>>>> LogFactory.getLog(AbstractSearchTool.class);
>>>>>>> +
>>>>>>>         private String criteriaKey = DEFAULT_CRITERIA_KEY;
>>>>>>>         private Object criteria;
>>>>>>>     -    public void setLog(Log log)
>>>>>>> -    {
>>>>>>> -        if (log == null)
>>>>>>> -        {
>>>>>>> -            throw new NullPointerException("log should not be set to
>>>>>>> null");
>>>>>>> -        }
>>>>>>> -        this.LOG = log;
>>>>>>> -    }
>>>>>>> -
>>>>>>>         /**
>>>>>>>          * Sets the criteria *if* it is set in the request
>>>>>>> parameters.
>>>>>>>          */
>>>>>>>
>>>>>>> Modified:
>>>>>>>
>>>>>>>
>>>>>>> velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/BrowserTool.java
>>>>>>> URL:
>>>>>>>
>>>>>>>
>>>>>>> http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/BrowserTool.java?rev=1696822&r1=1696821&r2=1696822&view=diff
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> ==============================================================================
>>>>>>> ---
>>>>>>>
>>>>>>>
>>>>>>> velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/BrowserTool.java
>>>>>>> (original)
>>>>>>> +++
>>>>>>>
>>>>>>>
>>>>>>> velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/BrowserTool.java
>>>>>>> Thu Aug 20 17:16:02 2015
>>>>>>> @@ -24,7 +24,8 @@ import java.util.regex.Pattern;
>>>>>>>     import java.util.regex.PatternSyntaxException;
>>>>>>>     import java.util.*;
>>>>>>>     import javax.servlet.http.HttpServletRequest;
>>>>>>> -import org.apache.velocity.runtime.log.Log;
>>>>>>> +import org.apache.commons.logging.Log;
>>>>>>> +import org.apache.commons.logging.LogFactory;
>>>>>>>     import org.apache.velocity.tools.Scope;
>>>>>>>     import org.apache.velocity.tools.ConversionUtils;
>>>>>>>     import org.apache.velocity.tools.generic.FormatConfig;
>>>>>>> @@ -73,8 +74,8 @@ import org.apache.velocity.tools.config.
>>>>>>>     public class BrowserTool extends FormatConfig implements
>>>>>>> java.io.Serializable
>>>>>>>     {
>>>>>>>         private static final long serialVersionUID =
>>>>>>> 1734529350532353339L;
>>>>>>> -
>>>>>>> -    protected Log LOG;
>>>>>>> +
>>>>>>> +    protected static final Log LOG =
>>>>>>> LogFactory.getLog(BrowserTool.class);
>>>>>>>           /* User-Agent header variables */
>>>>>>>         private String userAgent = null;
>>>>>>> @@ -187,19 +188,6 @@ public class BrowserTool extends FormatC
>>>>>>>         }
>>>>>>>           /**
>>>>>>> -     * Set log.
>>>>>>> -     */
>>>>>>> -    public void setLog(Log log)
>>>>>>> -    {
>>>>>>> -        if (log == null)
>>>>>>> -        {
>>>>>>> -            throw new NullPointerException("log should not be set to
>>>>>>> null");
>>>>>>> -        }
>>>>>>> -        this.LOG = log;
>>>>>>> -    }
>>>>>>> -
>>>>>>> -
>>>>>>> -    /**
>>>>>>>          * Sets the User-Agent string to be parsed for info.  If
>>>>>>> null,
>>>>>>> the
>>>>>>> string
>>>>>>>          * will be empty and everything will return false or null.
>>>>>>> Otherwise,
>>>>>>>          * it will set the whole string to lower case before storing
>>>>>>> to
>>>>>>> simplify
>>>>>>>
>>>>>>> Modified:
>>>>>>>
>>>>>>>
>>>>>>> velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/ImportSupport.java
>>>>>>> URL:
>>>>>>>
>>>>>>>
>>>>>>> http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/ImportSupport.java?rev=1696822&r1=1696821&r2=1696822&view=diff
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> ==============================================================================
>>>>>>> ---
>>>>>>>
>>>>>>>
>>>>>>> velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/ImportSupport.java
>>>>>>> (original)
>>>>>>> +++
>>>>>>>
>>>>>>>
>>>>>>> velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/ImportSupport.java
>>>>>>> Thu Aug 20 17:16:02 2015
>>>>>>> @@ -39,12 +39,17 @@ import javax.servlet.ServletOutputStream
>>>>>>>     import javax.servlet.http.HttpServletRequest;
>>>>>>>     import javax.servlet.http.HttpServletResponse;
>>>>>>>     import javax.servlet.http.HttpServletResponseWrapper;
>>>>>>> -import org.apache.velocity.runtime.log.Log;
>>>>>>> +import org.apache.commons.logging.Log;
>>>>>>> +import org.apache.commons.logging.LogFactory;
>>>>>>> +
>>>>>>>       /**
>>>>>>>      * <p>Provides methods to import arbitrary local or remote
>>>>>>> resources
>>>>>>> as strings.</p>
>>>>>>>      * <p>Based on ImportSupport from the JSTL taglib by Shawn
>>>>>>> Bayern</p>
>>>>>>>      *
>>>>>>> + * <p>If you wish to take profit of your J2EE container session
>>>>>>> serialization,
>>>>>>> + *    inheriting tools should always be in the request scope.</p>
>>>>>>> + *
>>>>>>>      * @author <a href="mailto:mari...@centrum.is";>Marino A.
>>>>>>> Jonsson</a>
>>>>>>>      * @since VelocityTools 2.0
>>>>>>>      * @version $Revision$ $Date$
>>>>>>> @@ -57,7 +62,8 @@ public abstract class ImportSupport
>>>>>>>         /** Default character encoding for response. */
>>>>>>>         protected static final String DEFAULT_ENCODING =
>>>>>>> "ISO-8859-1";
>>>>>>>     -    protected Log LOG;
>>>>>>> +    protected static final Log LOG =
>>>>>>> LogFactory.getLog(ImportSupport.class);
>>>>>>> +
>>>>>>>         protected ServletContext application;
>>>>>>>         protected HttpServletRequest request;
>>>>>>>         protected HttpServletResponse response;
>>>>>>> @@ -65,15 +71,6 @@ public abstract class ImportSupport
>>>>>>>           // --------------------------------------- Setup Methods
>>>>>>> -------------
>>>>>>>     -    public void setLog(Log log)
>>>>>>> -    {
>>>>>>> -        if (log == null)
>>>>>>> -        {
>>>>>>> -            throw new NullPointerException("log should not be set to
>>>>>>> null");
>>>>>>> -        }
>>>>>>> -        this.LOG = log;
>>>>>>> -    }
>>>>>>> -
>>>>>>>         /**
>>>>>>>          * Sets the current {@link HttpServletRequest}. This is
>>>>>>> required
>>>>>>>          * for this tool to operate and will throw a
>>>>>>> NullPointerException
>>>>>>>
>>>>>>> Modified:
>>>>>>>
>>>>>>>
>>>>>>> velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/tools/ImportTool.java
>>>>>>> URL:
>>>>>>>
>>>>>>>
>>>>>>> http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/tools/ImportTool.java?rev=1696822&r1=1696821&r2=1696822&view=diff
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> ==============================================================================
>>>>>>> ---
>>>>>>>
>>>>>>>
>>>>>>> velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/tools/ImportTool.java
>>>>>>> (original)
>>>>>>> +++
>>>>>>>
>>>>>>>
>>>>>>> velocity/tools/trunk/velocity-tools-view/src/main/java/org/apache/velocity/tools/view/tools/ImportTool.java
>>>>>>> Thu Aug 20 17:16:02 2015
>>>>>>> @@ -36,7 +36,6 @@ public class ImportTool extends org.apac
>>>>>>>                 setRequest(ctx.getRequest());
>>>>>>>                 setResponse(ctx.getResponse());
>>>>>>>                 setServletContext(ctx.getServletContext());
>>>>>>> -            setLog(ctx.getVelocityEngine().getLog());
>>>>>>>             }
>>>>>>>         }
>>>>>>>     }
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> ---------------------------------------------------------------------
>>>>>>>
>>>>>> To unsubscribe, e-mail:dev-unsubscr...@velocity.apache.org
>>>>> For additional commands, e-mail:dev-h...@velocity.apache.org
>>>>>
>>>>>
>>>>>
>>>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail:dev-unsubscr...@velocity.apache.org
>>> For additional commands, e-mail:dev-h...@velocity.apache.org
>>>
>>>
>>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@velocity.apache.org
> For additional commands, e-mail: dev-h...@velocity.apache.org
>
>

Reply via email to