• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

using log4j in servlets

 
Greenhorn
Posts: 6
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
hello

I am new to Log4j and i am having a problem with using log4j in servlets.
Below i am giving the code:

_____________________________________________________

SetupServlet.java

import java.io.File;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.log4j.*;

public class SetupServlet extends HttpServlet
{
public void init(ServletConfig config)throws ServletException
{
super.init(config);
String props=config.getInitParameter("props");
if(props==null||props.length()==0||!(new File(props).isFile()))
{
System.err.println("ERROR: cannot read the configuration file"+
"Please check the path of the config init parameterin web.xml");

throw new ServletException();
}

// look up another init parameter that tells whether to watch this
// configuration file for changes.

String watch=config.getInitParameter("watch");

// use the props file to load up configuration parameters for log4j

if(watch!=null && watch.equalsIgnoreCase("true"))
{
PropertyConfigurator.configureAndWatch(props);
}
else
{
PropertyConfigurator.configure(props);
}

}

public void destroy()
{
super.destroy();
}
}

______________________________________________________

log4j.properties



log4j.logger.foo=ERROR, A0
log4j.logger.deleted_log=INFO, A1

log4j.appender.A0=org.apache.log4j.FileAppender
log4j.appender.A0.File=D:\Program Files\Apache Software Foundation\Tomcat 5.0\logs\foo.log


log4j.appender.A1=org.apache.log4j.FileAppender
log4j.appender.A1.File=D:\Program Files\Apache Software Foundation\Tomcat 5.0\logs\deleted_log.log

# Define appenders for your logging. These will show which messages to log.
log4j.appender.A0.layout=org.apache.log4j.SimpleLayout
log4j.appender.A1.layout=org.apache.log4j.SimpleLayout

__________________________________________________________________

web.xml

<servlet>
<servlet-name>setup</servlet-name>
<servlet-class>SetupServlet</servlet-class>

<init-param>
<param-name>props</param-name>
<param-value>D:\Program Files\Apache Software Foundation\Tomcat 5.0\webapps\logforj\WEB-INF\log4j.properties</param-value>
</init-param>

<init-param>
<param-name>watch</param-name>
<param-value>true</param-value>
</init-param>


<load-on-startup/>
</servlet>


<servlet>
<servlet-name>configure</servlet-name>
<servlet-class>LogServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>configure</servlet-name>
<url-pattern>/ls</url-pattern>
</servlet-mapping>

_______________________________________________________________

i have copied my log4j-1.2.8.jar file in
F:\logforj\WEB-INF\lib\log4j-1.2.8.jar

I am using tomcat container.
I am not understanding how to proceed further with the example.....ie i would like to write another servlet which writes the messages to the log files specified in the log4j.properties file.

i have tried writing the servlet as shown below
___________________________________________
LogServlet.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.log4j.*;


public class LogServlet extends HttpServlet
{
public void service(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException
{
Logger foo_log = Logger.getLogger("foo");
foo_log.info("Inside whatever method");

}

}
_____________________________

I am lost........I think the code of LogServlet.java is wrong.please can anyone guide me thru the coding that has to be written in the second servlet ie.LogServlet.java............
 
Marshal
Posts: 28193
95
Eclipse IDE Firefox Browser MySQL Database
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
I put the log4j.properties file in my application's WEB-INF/lib/classes directory instead of in its WEB-INF/lib directory. And you might want to reconsider the idea of using filenames which contain spaces, and you might want to use forward slashes instead of backward slashes in the filenames.

That's all hypothetical, though, you didn't say what your problem was.
 
deepthi Ragunathan
Greenhorn
Posts: 6
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Originally posted by Paul Clapham:
I put the log4j.properties file in my application's WEB-INF/lib/classes directory instead of in its WEB-INF/lib directory. And you might want to reconsider the idea of using filenames which contain spaces, and you might want to use forward slashes instead of backward slashes in the filenames.

That's all hypothetical, though, you didn't say what your problem was.





hi

Thanks paul.....i have made the required changes specified by you......

but my requirement is........i have written a servlet(SetupServlet.java)which initializes log4j at the startup of the web container......Now i would like to write a second servlet from which i can start writting the log messages into the log files....but i have no clue as how to start writing the code for this second servlet........don't know how to proceed further.....

any help will be appreciated

and thanks in advance
 
Sheriff
Posts: 13411
Firefox Browser VI Editor Redhat
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Assuming that log4j is configured, logging with it is very easy.
 
deepthi Ragunathan
Greenhorn
Posts: 6
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
thanks for that piece of code ben......it has worked fine......but with a slight modification

protected static Logger log = Logger.getLogger("foo");

instead of

protected static Logger log = Logger.getLogger(Hello.class.getName());

thanks once again
 
Greenhorn
Posts: 26
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
yeah i think it will requre foo as you put
log4j.logger.foo

it all depends on the properties file.
i think you mind find this age useful sure helped me.
http://www.vipan.com/htdocs/log4jhelp.html
 
Ben Souther
Sheriff
Posts: 13411
Firefox Browser VI Editor Redhat
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator

Originally posted by deepthi Ragunathan:
thanks for that piece of code ben......it has worked fine......but with a slight modification

protected static Logger log = Logger.getLogger("foo");

instead of

protected static Logger log = Logger.getLogger(Hello.class.getName());

thanks once again



The recommended practice is to use the same hierarchy in your logger names that you're using for your class/package structure. If you follow it, you'll be very glad you did later, Using {this class's name}.class.getName() will get you the fully qualified name, package and all. If you refactor by changing the package structure later, you won't need to update the logging name. If you change the name of the class later, the compiler will remind you if you forget to update the logger's name.

Maybe it didn't work because you put "Hello" instead of you class's name?
 
Greenhorn
Posts: 5
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
hello Ben,

If you don't mind could you please elaborate a bit more on the explanation you have given.I couldn't fully undersatand it.In the code line shown below can you please explain the "Hello.class.getName()" part of it.What exactly does it do.

protected static Logger log = Logger.getLogger(Hello.class.getName());

thanks in advance
 
Ben Souther
Sheriff
Posts: 13411
Firefox Browser VI Editor Redhat
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
The javadocs for the Class object explain it better than I could (with exmples).
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Class.html#getName()

You may also want to go through some of the articles listed in the documentation page at log4j for an explanation of how their naming hierarchy for loggers works.
http://logging.apache.org/log4j/docs/documentation.html
 
reply
    Bookmark Topic Watch Topic
  • New Topic