21xrx.com
2025-04-18 10:39:46 Friday
文章检索 我的文章 写文章
如何在servlet中使用java代码打log
2023-06-11 01:39:23 深夜i     14     0
servlet java代码 打log

在Java Web开发中,servlet是一个非常重要的组件,它可以处理来自客户端的HTTP请求,并向客户端发送HTTP响应。而在开发过程中,我们经常需要打log来记录代码的执行情况,便于调试和排错。接下来,让我们来了解如何在servlet中使用java代码打log。

在servlet中,我们可以使用Java自带的log打印工具——java.util.logging.Logger。通过Logger,我们可以控制日志记录的级别、存储位置等信息。下面是一个使用Logger打印不同日志级别的例子:

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "LogServlet", urlPatterns = {"/log"})
public class LogServlet extends HttpServlet {
 private static final Logger logger = Logger.getLogger(LogServlet.class.getName());
 @Override
 protected void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  logger.info("This is info message.");
  logger.warning("This is warning message.");
  logger.log(Level.SEVERE, "This is severe message.", new Exception("Severe Exception"));
 }
}

在上面的代码中,我们首先通过Logger.getLogger()方法获取一个Logger对象,该对象的名称为当前类的全限定名。然后,我们在doGet()方法中打印了三条日志,分别为info级别、warning级别和severe级别的日志。其中,severe级别的日志打印了一个异常对象的堆栈信息。

当我们运行上述代码时,会在控制台中看到类似如下的日志信息:

七月 19, 2021 10:04:21 下午 LogServlet doGet
信息: This is info message.
七月 19, 2021 10:04:21 下午 LogServlet doGet
警告: This is warning message.
七月 19, 2021 10:04:21 下午 LogServlet doGet
SEVERE: This is severe message.
java.lang.Exception: Severe Exception
at LogServlet.doGet(LogServlet.java:21)

我们可以发现,不同级别的日志通过不同的方法打印出来。info级别的日志使用的是Logger.info()方法,warning级别的日志使用的是Logger.warning()方法,而severe级别的日志使用的是Logger.log()方法,并传入了一个Level为SEVERE的参数。此外,在打印severe级别的日志时,我们还传入了一个Exception对象,Logger会自动打印该对象的堆栈信息。

另外,我们也可以通过Logger来控制日志的存储位置。通常,我们会将日志记录到磁盘文件中,以便后期分析和排查问题。下面是一个将日志保存到文件中的例子:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "LogServlet", urlPatterns = {"/log"})
public class LogServlet extends HttpServlet {
 private static final Logger logger = Logger.getLogger(LogServlet.class.getName());
 @Override
 public void init() {
  try {
   Files.createDirectories(Paths.get("./logs"));
   FileHandler fileHandler = new FileHandler("./logs/log.%u.%g.log", 1024 * 1024, 10, true);
   fileHandler.setLevel(Level.ALL);
   logger.addHandler(fileHandler);
  } catch (Exception e) {
   logger.log(Level.SEVERE, e.getMessage(), e);
  }
 }
 @Override
 protected void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  logger.info("This is info message.");
  logger.warning("This is warning message.");
  logger.log(Level.SEVERE, "This is severe message.", new Exception("Severe Exception"));
 }
}

在上面的代码中,我们使用了java.util.logging.FileHandler类来将日志写入到文件中。我们首先在init()方法中创建了一个./logs目录,并初始化了一个FileHandler对象。其中,"./logs/log.%u.%g.log"表示文件名的格式,%u表示一个随机生成的数字,%g表示一个递增的数字。1024 * 1024表示一个文件最大的大小,10表示日志文件的个数,true表示如果文件达到最大大小时,自动在新文件中继续记录。最后,我们将FileHandler对象添加到logger中。

当我们运行上述代码时,会在./logs目录下生成多个日志文件。每个日志文件的大小不超过1MB,在达到最大大小时会自动切换到新的文件中记录。

总结来说,在servlet中使用java代码打log非常简单,只需要导入java.util.logging.Logger类,并创建一个Logger对象就可以了。通过调用Logger的不同方法,我们可以打印不同级别的日志,并配置日志记录的位置、存储方式等信息,便于快速排查问题和调试代码。

  
  

评论区

请求出错了