How do I log from a servlet using ServletContext.log()?

In Java servlets, you can use the ServletContext.log() method to log messages, exceptions, or context-specific information. The ServletContext object is available in your servlet and allows you to log messages to the server’s log file.

Here are the common ways you can log using ServletContext.log():

1. Logging a simple message:

You can log plain text messages with ServletContext.log(String message).

package org.kodejava.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.ServletContext;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

@WebServlet("/logMessage")
public class MyLogServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        ServletContext context = getServletContext();
        context.log("This is a simple log message.");
        response.getWriter().println("Message logged.");
    }
}

2. Logging a message with an exception:

If you want to log an exception with additional context, you can use ServletContext.log(String message, Throwable throwable).

package org.kodejava.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.ServletContext;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

@WebServlet("/logException")
public class MyLogServlet2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        ServletContext context = getServletContext();
        try {
            // Simulate an exception
            int result = 10 / 0;
        } catch (Exception e) {
            context.log("An exception occurred: ", e);
        }
        response.getWriter().println("Exception logged.");
    }
}

3. Including dynamic information:

You can include dynamic content in the log messages to make your logs more informative.

package org.kodejava.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.ServletContext;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

@WebServlet("/logAccess")
public class MyLogServlet3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        ServletContext context = getServletContext();
        String userIP = request.getRemoteAddr();
        context.log("Access from IP: " + userIP);
        response.getWriter().println("Access logged.");
    }
}

Points to Remember

  1. Where the logs are written: The ServletContext.log() messages are typically written to the application server’s log file (e.g., catalina.out for Tomcat). This location depends on the server configuration.
  2. Severity levels: The ServletContext.log() does not natively support different log levels like INFO, WARN, or ERROR. If you need more advanced logging capabilities, consider using a logging framework such as SLF4J, Log4j, or java.util.logging.
  3. Thread Safety: The logging methods of ServletContext are thread-safe.

This is how you can log using ServletContext.log() in your servlet-based application.

Maven dependencies

<dependency>
    <groupId>jakarta.servlet</groupId>
    <artifactId>jakarta.servlet-api</artifactId>
    <version>6.1.0</version>
    <scope>provided</scope>
</dependency>

Maven Central

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.