On Fri, 15 Nov 2002, Thomas Nagel wrote:

> Hi,
>
> I guess more people than I had the problem to use log4j inside a
> "non log4j enviroment" e.g. Caucho Resin.

I'm not sure I understand why you need this plugin (apart from the
reloading aspect). If you have log4j.jar in WEB-INF/lib and
log4j.properties in WEB-INF/classes, it should just work.

--
Martin Cooper


>
> I wrote a small Struts log4j PlugIn which might be useful to those
> who do not want to reinvent the wheel ;-)
>
> The Plug-In is also able to reload configuration after a given sleep time,
> because restarting the server on every property file change anoyed me.
>
> Use:
> ----
> 1) put your log4j.properties in your /WEB-INF/ directory.
>
> 2) Add the following to your struts-config.xml
>
> <plug-in className="Log4jPlugIn" >
>     <!--
>          sleep time, default to 2 minutes
>          sleep time of 0 means no background thread
>       -->
>     <set-property property="sleepTime"     value="1200000" />
>
>     <!-- where to find the log4j.properties file -->
>     <set-property property="logProperties"
>                   value="/WEB-INF/log4j.properties" />
>   </plug-in>
>
>
> 3) Compile the following and add to your /WEB-INF/classes
>
> - code ---------------------------------------------------------
>
> import java.io.File;
> import javax.servlet.ServletException;
>
> import org.apache.log4j.PropertyConfigurator;
> import org.apache.log4j.Logger;
>
> import org.apache.struts.action.PlugIn;
> import org.apache.struts.config.ApplicationConfig;
> import org.apache.struts.action.ActionServlet;
>
> /**
>  * Initializes the <a href="http://jakarta.apache.org/log4j";>log4j</a>
>  * system with a given log4j.properties file for non - Log4j enviroments,
>  * e.g. Caucho Resin.
>  * <p>
>  * This class also starts a background thread which checks the modification
>  * time of the property file periodically (sleepTime) and updates the
>  * system if necessary.
>  * <p>
>  * Default sleep time is 2 minutes, a sleep time of 0 simply means
>  * NO background thread.
>  *
>  * @author  <a href="mailto:[EMAIL PROTECTED]";>Thomas Nagel</a>
>  * @version $Revision: 1.1 $ $Date: 2002/11/12 09:23:27 $
>  */
> public final class Log4jPlugIn implements PlugIn {
>
>     // ------------------------------------------------------- members
>
>     /** Logger instance to use with this Plugin. */
>     private Logger log;
>
>     /** Path to find the log properties. */
>     private String _logConfiguration;
>
>     /** Which configuration file to use. */
>     private File _logProperties;
>
>     /** When was last time the logging properties where modified. */
>     private long _lastChange;
>
>
>     /**
>      * The background thread which updates the log4j if the configuration
>      * file has changed.
>      */
>     private ModificationWatcher _modificationWatcher;
>
>     /**
>      * How long should the modification thread sleep until
>      * it reloads the configuration? Default to 2 minutes
>      * (120000 milliseconds).
>      */
>      private long _sleepTime = 120000;
>
>
>
>     // ------------------------------------------------------- constructor
>
>     /** Creates a new instance of DatabasePlugIn */
>     public Log4jPlugIn() {}
>
>
>     // ------------------------------------------------------- methods
>
>     /**
>      * Initializes the Log4jPlugIn by configuring the log4j system
>      * with the given property file.
>      *
>      * @throws ServletException if initialization failes.
>      */
>     public void init(ActionServlet servlet,
>                     ApplicationConfig applicationConfig) throws
> ServletException {
>         try{
>             _logProperties =
>                  new
> File(servlet.getServletContext().getRealPath(getLogProperties()));
>             configureLog4j();
>             log = Logger.getLogger(getClass().getName());
>
>             if(_sleepTime > 0 ){
>                 _modificationWatcher = new
> Log4jPlugIn.ModificationWatcher();
>                 _modificationWatcher.start();
>             }
>         }catch(Exception e){
>             throw new ServletException("Could not initialize log4j
> subsystem", e);
>         }
>         log.info("Log4j successfully initialized.");
>     }
>
>
>     /**
>      * Not used but required by interface.
>      */
>     public void destroy() {
>         log.info("Shutting down log4j system.");
>         _modificationWatcher.shutdown();
>     }
>
>
>     /**
>      * Configures the log4j system.
>      */
>     private void configureLog4j() throws Exception {
>         PropertyConfigurator.configure(_logProperties.toURL());
>         _lastChange  = _logProperties.lastModified();
>     }
>
>
>     // ------------------------------------------------------------
> properties
>
>     public String getLogProperties() {
>         return _logConfiguration;
>     }
>
>     public void setLogProperties(String logProperties) {
>         _logConfiguration = logProperties;
>     }
>
>     public void setSleepTime(String sleepTime) {
>         _sleepTime = Long.parseLong(sleepTime);
>     }
>
>
>     // ---------------------------------------------------------- inner
> classes
>
>     /**
>      * Background check if the log4j configuration file
>      * has changed.
>      */
>     private final class ModificationWatcher extends Thread {
>
>             protected boolean _done = false;
>
>             public void run(){
>                 while(!_done){
>                     if(_logProperties.lastModified() != _lastChange){
>                         try{
>                             configureLog4j();
>                         }catch(Exception e){
>                             log.error("Problems configuring log4j system",
> e);
>                         }
>                         log.info("Configuring log4j system");
>                     }
>
>                     try{
>                         sleep(_sleepTime);
>                     }catch(InterruptedException ex){}
>                 }
>             }
>
>             public void shutdown(){
>                 _done = true;
>             }
>     }
> }
>
> - code ---------------------------------------------------------
>
> Bye
>
> Thomas
>
> --
> To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
>
>


--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to