21xrx.com
2024-12-22 22:06:58 Sunday
登录
文章检索 我的文章 写文章
如何在servlet中使用java代码打log
2023-06-11 01:39:23 深夜i     --     --
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的不同方法,我们可以打印不同级别的日志,并配置日志记录的位置、存储方式等信息,便于快速排查问题和调试代码。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复