Java/Servlets/Log
Содержание
- 1 Another logger servlet
- 2 Hello from LoggerServlet
- 3 Context log
- 4 Messages sent
- 5 Context logger
- 6 Log Filter
- 7 Logger new config
- 8 Hello from a Logger with its own configuration in the log4j.properties file
- 9 Logger Servlet
- 10 Hello from LoggerServlet
- 11 LoggerSkel for Servlet
- 12 Logger without configure file
- 13 Hello from a Logger with no Config file
- 14 Logging Filter
- 15 Log in ServletContext
- 16 Servlet Logging
- 17 Servlet: Root logger
- 18 Hello from a Logger with a log4j.properties file
- 19 Servlets Logging Filter Demo
Another logger servlet
<source lang="java">
//Log4j from Apache is required import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; import javax.servlet.*; import javax.servlet.http.*; public class LoggerServlet2 extends HttpServlet {
private Logger log = null; public void init() { log = Logger.getLogger(LoggerServlet2.class); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { //display a DEBUG level message log.debug("Sending a DEBUG message from logger2"); //display an INFO level message log.info("Sending an INFO message from logger2"); //better display something response.setContentType("text/html"); java.io.PrintWriter out = response.getWriter(); out.println("<html><head><title>Servlet logging</title></head><body>");out.println("
Hello from LoggerServlet
");out.println("Your logger name is: " + log.getName() + "
"); out.println("Your logger parent is: " + log.getParent().getName() + "
"); out.println("</body></html>"); out.close(); } //end doGet public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { doGet(request, response); }
}
</source>
Context log
<source lang="java">
import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ContextLog extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { String yourMessage = request.getParameter("mine"); //Call the two ServletContext.log methods //the javax.servlet.GenericServlet.getServletContext method ServletContext context = getServletContext(); if (yourMessage == null || yourMessage.equals("")) //log version with Throwable parameter context.log("No message received:", new IllegalStateException( "Missing parameter")); else context.log("Here is the visitor"s message: " + yourMessage); response.setContentType("text/html"); java.io.PrintWriter out = response.getWriter(); //logging servlets probably want to display more HTML; this is "lazy // HTML" out.println("<html><head><title>ServletContext logging</title></head><body>");out.println("
Messages sent
");out.println("</body></html>"); } //end doGet
}
</source>
Context logger
<source lang="java">
//Log4j from Apache is required import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; import javax.servlet.*; import javax.servlet.http.*; public class ContextLogger implements ServletContextListener {
private Logger log; public ContextLogger() { } public void contextDestroyed(ServletContextEvent sce) { String name = sce.getServletContext().getServletContextName(); //log request of the INFO level log.info("ServletContext shut down: " + (name == null ? "" : name)); } public void contextInitialized(ServletContextEvent sce) { ServletContext context = sce.getServletContext(); String realPath = context.getRealPath("/"); String fileSep = System.getProperty("file.separator"); if (realPath != null && (!realPath.endsWith(fileSep))) realPath = realPath + fileSep; //Initialize logger here: PropertyConfigurator.configure(realPath + "WEB-INF/classes/" + context.getInitParameter("logger-config")); log = Logger.getLogger(ContextLogger.class); String name = context.getServletContextName(); //log request about servlet context being initialized log.info("ServletContext ready: " + (name == null ? "" : name)); }
}
</source>
Log Filter
<source lang="java">
//Log4j from Apache is required import javax.servlet.*; import javax.servlet.http.*; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; public class LogFilter implements Filter {
private FilterConfig config; private Logger log; /** Creates new RequestFilter */ public LogFilter() { } public void init(FilterConfig filterConfig) throws ServletException { this.config = filterConfig; //load the configuration for this application"s loggers using the // servletLog.properties file PropertyConfigurator.configure(config.getServletContext().getRealPath( "/") + "WEB-INF/classes/servletLog.properties"); log = Logger.getLogger(LogFilter.class); log.info("Logger instantiated in " + getClass().getName()); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException { HttpServletRequest req = null; String id = config.getInitParameter("log-id"); if (id == null) id = "unknown"; if (log != null && (request instanceof HttpServletRequest)) { req = (HttpServletRequest) request; log.info("Log id:" + id + ": Request received from: " + req.getRemoteHost() + " for " + req.getRequestURL()); } chain.doFilter(request, response); }// doFilter public void destroy() { /* * called before the Filter instance is removed from service by the web * container */ log = null; }
}
</source>
Logger new config
<source lang="java">
//Log4j from Apache is required import org.apache.log4j.Logger; import javax.servlet.*; import javax.servlet.http.*; public class LoggerNewConfig extends HttpServlet {
private Logger log = null; public void init() { log = Logger.getLogger(LoggerNewConfig.class); log.info("LoggerNewConfig started."); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { //display a DEBUG level message log.debug("Sending a DEBUG message"); // display an INFO level message log.info("Sending an INFO message"); //better display some HTML response.setContentType("text/html"); java.io.PrintWriter out = response.getWriter(); out.println("<html><head><title>Servlet logging</title></head><body>"); out.println("
Hello from a Logger with its own configuration in the log4j.properties file
");out.println("Your logger name is: " + log.getName() + "
"); out.println("Your logger parent is: " + log.getParent().getName() + "
"); out.println("</body></html>"); out.close(); } //end doGet public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { doGet(request, response); }
}
</source>
Logger Servlet
<source lang="java">
//Log4j from Apache is required import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; import javax.servlet.*; import javax.servlet.http.*; public class LoggerServlet extends HttpServlet {
private Logger log = null; public void init() { String realPath = getServletContext().getRealPath("/"); String fileSep = System.getProperty("file.separator"); if (realPath != null && (!realPath.endsWith(fileSep))) realPath = realPath + fileSep; System.out.println(realPath); //load the configuration for this application"s loggers using the // servletLog.properties file PropertyConfigurator.configure(realPath + "WEB-INF/classes/servletLog.properties"); //create the logger for this servlet class //it will use the configuration for the logger com.jexp.LoggerServlet //or inherit from the logger com.jexp if one exists, and so on log = Logger.getLogger(LoggerServlet.class); log.info("LoggerServlet started."); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { //display a DEBUG level message log.debug("Sending a DEBUG message"); //display an INFO level message log.info("Sending an INFO message"); //better display something response.setContentType("text/html"); java.io.PrintWriter out = response.getWriter(); out.println("<html><head><title>Servlet logging</title></head><body>");out.println("
Hello from LoggerServlet
");out.println("Your logger name is: " + log.getName() + "
"); out.println("Your logger parent is: " + log.getParent().getName() + "
"); out.println("</body></html>"); out.close(); } //end doGet public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { doGet(request, response); }
}
</source>
LoggerSkel for Servlet
<source lang="java">
//Log4j from Apache is required
import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; import javax.servlet.*; import javax.servlet.http.*; public class LoggerSkel extends HttpServlet {
private Logger log; public void init() { PropertyConfigurator.configure(getServletContext().getRealPath("/") + "WEB-INF/classes/servletLog.properties"); log = Logger.getLogger(LoggerSkel.class); log.debug("Instance created of: " + getClass().getName()); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { //do logging here if necessary } //end doGet
}
</source>
Logger without configure file
<source lang="java">
//Log4j from Apache is required import org.apache.log4j.Logger; import org.apache.log4j.BasicConfigurator; import javax.servlet.*; import javax.servlet.http.*; public class LoggerNconfig extends HttpServlet {
private Logger log = null; public void init() { log = Logger.getRootLogger(); BasicConfigurator.configure(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { //display a DEBUG level message log.debug("Sending a DEBUG message"); // display an INFO level message log.info("Sending an INFO message"); //better display some HTML response.setContentType("text/html"); java.io.PrintWriter out = response.getWriter(); out.println("<html><head><title>Servlet logging</title></head><body>");out.println("
Hello from a Logger with no Config file
");out.println("Your logger name is: " + log.getName() + "
"); out.println("Your logger parent is: " + log.getParent().getName() + "
"); out.println("</body></html>"); } //end doGet public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { doGet(request, response); }
}
</source>
Logging Filter
<source lang="java">
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public final class LoggingFilter implements Filter {
private FilterConfig filterConfig = null; public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { long start = System.currentTimeMillis(); String address = request.getRemoteAddr(); String file = ((HttpServletRequest) request).getRequestURI(); chain.doFilter(request, response); filterConfig.getServletContext().log( "User access! " + " User IP: " + address + " Resource: " + file + " Milliseconds used: " + (System.currentTimeMillis() - start) ); } public void destroy() { } public void init(FilterConfig filterConfig) { this.filterConfig = filterConfig; }
}
</source>
Log in ServletContext
<source lang="java">
// web.xml /* <?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.ru/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.ru/xml/ns/j2ee http://java.sun.ru/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <servlet> <servlet-name>LoggingServlet</servlet-name> <servlet-class>LoggingServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoggingServlet</servlet-name> <url-pattern>/loggingServlet</url-pattern> </servlet-mapping>
</web-app>
- /
import java.io.IOException; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoggingServlet extends HttpServlet {
private ServletContext context; public void init(ServletConfig config) throws ServletException { super.init(config); context = getServletContext(); context.log("Init has been invoked"); } public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException { ServletOutputStream out = res.getOutputStream(); context.log("doGet has now been invoked"); res.setContentType("text/html"); out.println("<html><head><title>Logging Servlet</title></head>"); out.println("<body>Visit the <tomcat-home>\\logs and open the xx file to see the log entries"); out.println("</body></html>"); }
}
</source>
Servlet Logging
<source lang="java">
package net.firstpartners.nounit.utility; /**
* Title: NoUnit - Identify Classes that are not being unit Tested * * Copyright (C) 2001 Paul Browne , FirstPartners.net * * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * @author Paul Browne * @version 0.6 */
import java.io.*; import javax.servlet.*;
/**
* stores log of system output and system errors * If Servlet , writes to Servlet Log File. * If non-Servlet , writes to Output Files Specified in parameters.
* Class is mainly static , to allow ease of use (one one log file per system!!) , * but has a non-static constructor (for use by servlets - so reference to servlet * log file can be set. */
public class Logging {
//Class Level Variables static String logFileName; // both package level to enable testing static String errorLogFileName; static FileWriter logWriter; static FileWriter errorWriter; static boolean doLogging=false; //default no logging unless file says otherwise //For use in Servlet Context Logging static ServletContext innerContext;
/** * Constructor for Logging from Servlet * @param inServletContext used to get access to the Servlet log files * @exception IOException if it can"t create log files */ public Logging (ServletContext inServletContext) throws IOException { //Store incoming Context + Set Logging Flag this.innerContext= inServletContext; //Set logging flag doLogging=true; }
/** * do Setup * @exception IOException if it can"t create log files */ private static void setup () { try { //Check if setup required - ie nothing has been setup before if (((logFileName==null)&&(errorLogFileName==null))||(innerContext==null)) { //Set logging flag doLogging=true; //Get logging parameters logFileName= "LogFile.txt"; errorLogFileName = "ErrorLogFile.txt"; //Create the files logWriter = new FileWriter(logFileName,true); //append data errorWriter = new FileWriter(errorLogFileName,true); //append } } catch (java.io.IOException ie) { //do nothing - exists to keep method signature simple //will show up as NullPointerException later } } /** * Print log of system output * @param sysOut */ public static void printOutput(Object sysOut){ //setup (if required) setup(); //skip out asap if logging is turned off if (!doLogging) {return; }
//Check for Servlet Logging if (innerContext!=null) { doServletLog(sysOut); } else { //do file logging try { if (sysOut instanceof Exception) { logWriter.write(((Exception)sysOut).toString()); logWriter.flush(); } else { logWriter.write(sysOut.toString()); logWriter.flush(); } } catch (java.io.IOException ioe) { //do nothing - let app continue } } } /** * Print log of system errors * This method catches java.io.IOExceptions internally , so as to give a * similar method signature to System.out.println. Also should we stop system * if logging (and only logging) fails? * @param sysErr */ public static void printError(Object sysErr){ //setup (if required) setup(); //skip out asap if logging is turned off if (!doLogging) {return; } //Check for Servlet Logging if (innerContext!=null) { doServletLog(sysErr); } else { //do file logging try { if (sysErr instanceof Exception) { logWriter.write(((Exception)sysErr).toString()); logWriter.flush(); } else { logWriter.write(sysErr.toString()); logWriter.flush(); } } catch (java.io.IOException ioe) { //do nothing - let app continue } } } /** * private method for handling logging to Servlets * @param inObject to Log */ private static void doServletLog (Object inObject) { if(inObject instanceof Throwable) { //Log as Exception innerContext.log("",(Throwable)inObject); } else { //Log as Normal String innerContext.log(inObject.toString()); }
}
/** * Prints debug message to system log file. * Catches java.io.IOExceptions internally, so as to give a * similar method signature to System.out.println. * * @param object Object containing information to display */ public static void debug(Object object){ setup(); if (doLogging) { if (innerContext==null) { // log debug message to file try { try { logWriter.write(((Exception)object).toString()); } catch (ClassCastException e) { logWriter.write(object.toString()); } logWriter.flush(); } catch (IOException e) { //do nothing - let app continue } } else { doServletLog(object); } } }
}
</source>
Servlet: Root logger
<source lang="java">
//Log4j from Apache is required import org.apache.log4j.Logger; import javax.servlet.*; import javax.servlet.http.*; public class LoggerWconfig extends HttpServlet {
private Logger log = null; public void init() { log = Logger.getRootLogger(); log.info("LoggerWconfig started."); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { //display a DEBUG level message log.debug("Sending a DEBUG message"); // display an INFO level message log.info("Sending an INFO message"); //better display some HTML response.setContentType("text/html"); java.io.PrintWriter out = response.getWriter(); out.println("<html><head><title>Servlet logging</title></head><body>");out.println("
Hello from a Logger with a log4j.properties file
");out.println("Your logger name is: " + log.getName() + "
"); out.println("</body></html>"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { doGet(request, response); }
}
</source>