Here ya go. Of course you'll need log4j.

Tom

[EMAIL PROTECTED] wrote:
Hi, I'm intrested on testing your servlet capabilities, can u send it to
me??





For the Open Source Power ...

Ahmed ALAMI
DQAI/SDV
Tel : 05 57 75 60 52


------------------------------------------------------------------------


Post-scriptum La Poste

Ce message est confidentiel. Sous r�serve de tout accord conclu par
�crit entre vous et La Poste, son contenu ne repr�sente en aucun cas un
engagement de la part de La Poste. Toute publication, utilisation ou
diffusion, m�me partielle, doit �tre autoris�e pr�alablement. Si vous
n'�tes pas destinataire de ce message, merci d'en avertir imm�diatement
l'exp�diteur.





------------------------------------------------------------------------

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
/*
 * Copyright: (c) TBEE.ORG
 * Modified:  $Date: 2003/12/18 12:26:40 $
 */


package org.tbee.servlets.log4j;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.util.Properties;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Category;
import org.apache.log4j.PropertyConfigurator;

/**
 * This servlet just initializes Log4j based on a propery file.
 * The file may be specified in the init parameters as "log4j.properties".
 * Per default "/WEB-INF/log4j.properties" and "/WEB-INF/classes/log4j.properties" are 
checked.
 * This servlet will reexamine the properties file every 10 seconds or when the get 
method is called.
 * A complete log4j properties file may be provided as part of the doPost submit.
 * 
 * @version $Revision: 1.5 $
 */
public class InitServlet extends HttpServlet
{
        // Log4J 
        private static Category cLog4J = 
Category.getInstance(InitServlet.class.getName());

        // Frequence for looking for new properties
        static int cLog4jInterval = 10000 ;             // 10 Seconds

        // the worker thread
        WorkerThread iWorkerThread = null;

        // the parameter for the configuration file
        static private String PARAMETER_CONFIGFILE = "configfile";
        
        /**
         * initialize log4j
         * start the worker thread
         */
        public void init()
        throws ServletException
        {
                // set up LOG4J
                {
                        // determine properties file
                        String lPrefix =  getServletContext().getRealPath("/WEB-INF") 
+ File.separator;
                        String lFilePath = getInitParameter("log4j.properties");
                        if (lFilePath == null) lFilePath = "log4j.properties";
                        if (!(new File(lPrefix + lFilePath)).exists()) lFilePath = 
"log4j.properties";
                        if (!(new File(lPrefix + lFilePath)).exists()) lFilePath = 
"classes/log4j.properties";
                        if (!(new File(lPrefix + lFilePath)).exists()) 
                        {
                                System.err.println("Log4j InitServlet: could not 
determine log4j file, reverting to auto configuration");
                                return;                         
                        }
                        
                        // Set up the configuration
                        PropertyConfigurator.configure(lPrefix + lFilePath);
                        if (cLog4J.isInfoEnabled()) cLog4J.info("Log4J initialized 
using: " + lPrefix + lFilePath);
        
                        // if debugging must be disabled entirely
                        if ("true".equals(getInitParameter("disabled")) || 
"yes".equals(getInitParameter("disabled")))
                        {
                                // disable
                                if (cLog4J.isDebugEnabled()) cLog4J.debug("Log4J: 
further logging disabled!");
                                Category.getDefaultHierarchy().disableAll();
                        }
                        else
                        {
                                // create worker thread
                                if(cLog4J.isDebugEnabled()) cLog4J.debug("Starting 
worker thread");
                                iWorkerThread = new WorkerThread(lPrefix + lFilePath, 
10000); // 10 seconds, TODO: make configurable
                                iWorkerThread.start(); 
                        }
                }
        }
        
        /**
         * Stop the worker thread when the servlet is unloaded
         */
        public void destroy()
        {
                // stop worker thread
                if(cLog4J.isDebugEnabled()) cLog4J.debug("Stopping worker thread");
                iWorkerThread.stopAsSoonAsPossible();
        }

        /**
         * reexamine the log4j file now
         */
        public void doGet(HttpServletRequest pRequest, HttpServletResponse pResponse)
        {
                // interrupt the worker thread so it will loop immediatly
                iWorkerThread.interrupt();
                
                try
                {
                        pResponse.getOutputStream().println("<html>");
                        pResponse.getOutputStream().println("  <body>");
                        
                        // basic feedback
                        pResponse.getOutputStream().println("   Configuration file is 
reexamined<br/>");
                        
                        // upload form
                        pResponse.getOutputStream().println("   <form 
method=\"POST\">");
                        pResponse.getOutputStream().println("     Paste configuration 
file here:");
                        pResponse.getOutputStream().println("     <textarea name=\"" + 
PARAMETER_CONFIGFILE + "\"></textarea>");
                        pResponse.getOutputStream().println("     <input 
type=\"submit\" value=\"configure\"/>");
                        pResponse.getOutputStream().println("   </form>");
                        
                        pResponse.getOutputStream().println("  </body>");
                        pResponse.getOutputStream().println("</html>");
                }
                catch (IOException lException)
                {
                        cLog4J.error(lException);
                }
        }

        /**
         * posting will overload the log4j settings until the configuration file is 
renewed or a new post is made
         */
        public void doPost(HttpServletRequest pRequest, HttpServletResponse pResponse)
        {
                // interrupt the worker thread so it will loop immediatly
                iWorkerThread.interrupt();
                
                try
                {
                        // feedback
                        pResponse.getOutputStream().print("<html><body>");
                        pResponse.getOutputStream().print("configuration file is 
reexamined<br/>");
                        
                        // is the parameter submitted?
                        if (pRequest.getParameter(PARAMETER_CONFIGFILE) != null)
                        {
                                // push file contents into log4j
                                Properties lProperties = new Properties();
                                lProperties.load(new 
ByteArrayInputStream(pRequest.getParameter(PARAMETER_CONFIGFILE).toString().getBytes()));
                                PropertyConfigurator.configure(lProperties);
                                if (cLog4J.isInfoEnabled()) cLog4J.info("Log4J 
reinitialized using submitted text: " + 
pRequest.getParameter(PARAMETER_CONFIGFILE).toString().length() + " bytes");
                                pResponse.getOutputStream().print("Log4J reinitialized 
using submitted text<br/>");
                        }
                        
                        // feedback
                        pResponse.getOutputStream().print("</body></html>");
                }
                catch (IOException lException)
                {
                        cLog4J.error("EXCEPTION: " + lException.getMessage() + " at " 
+ lException.getStackTrace()[0].toString(), lException );
                }
        }

        //      
        // =================================================================
        //
        
        /**
         * This is the actual thread checking the file
         */
        private class WorkerThread extends Thread
        {
                /**
                 * constructor
                 */
                public WorkerThread(String pConfigFilePath, int pSleep)
                {
                        super();
                        iConfigFilePath = pConfigFilePath;
                        iSleep = pSleep;
                }
                
                // the file to keep an eye on
                private String iConfigFilePath = null;
        
                // the timeout period
                private int iSleep = 10000;
                                
                // the stop flag
                private boolean iStop = false;
        
                /**
                 * make this thread stop asap
                 */
                public void stopAsSoonAsPossible()
                {
                        // just set the flag
                        iStop = true;
                        if(cLog4J.isDebugEnabled()) cLog4J.debug("Stop flag set to " + 
iStop);
                        
                        // wake the thread up
                        iWorkerThread.interrupt();
                }

                /**
                 * check the file and optionally reload
                 */
                public void run()
                {
                        // remember last changed data
                        long lLastModified = (new 
File(iConfigFilePath)).lastModified();
                        
                        // endless loop
                        while(true)
                        {
                                // stop check
                                if(cLog4J.isDebugEnabled()) cLog4J.debug("Checking 
stop flag");
                                if (iStop) 
                                {
                                        if(cLog4J.isDebugEnabled()) 
cLog4J.debug("Stopping!");
                                        break;
                                }
                                else
                                {
                                        try
                                        { 
                                                // sleep a while
                                                Thread.sleep(iSleep);
                                        }
                                        catch (InterruptedException lException) {} // 
do nothing, this is an early wake-up call
                                }
                        
                                // was the file changed?
                                long lCurrentModified = (new 
File(iConfigFilePath)).lastModified();
                                if(cLog4J.isDebugEnabled()) cLog4J.debug("Checking " + 
iConfigFilePath + ", current = " + lCurrentModified + ", last = " + lLastModified);
                                if (lLastModified < lCurrentModified)
                                {
                                        // reconfigure log4j
                                        
PropertyConfigurator.configure(iConfigFilePath);
                                        if (cLog4J.isInfoEnabled()) cLog4J.info("Log4J 
reinitialized using: " + iConfigFilePath);
                                        
                                        // remember new datetime
                                        lLastModified = lCurrentModified;
                                }
                        }
                }
        }
}

/*
 * $Log: InitServlet.java,v $
 * Revision 1.5  2003/12/18 12:26:40  cvs
 * cleanup
 *
 * Revision 1.4  2003/12/15 20:19:12  cvs
 * own worker thread
 * doGet and doPost
 *
 * Revision 1.3  2003/12/10 15:28:19  cvs
 * *** empty log message ***
 *
 * Revision 1.2  2002/09/25 08:25:10  tom
 * *** empty log message ***
 *
 */

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

Reply via email to