有没有一种方法可以实时在浏览器中查看我的Web应用程序Tomcat日志?

6
我正在使用log4j记录我的数据。我希望能够在浏览器中实时查看日志文件,以便与我的Web应用程序一起使用。有一些独立的工具,例如Chainsaw,非常不错,但它们无法实现在浏览器中实时查看日志文件的目的。
有人可以帮我吗?

1
您可以使用一些 JavaScript 创建一个页面,并在其中设置一个超时时间,通过 AJAX 调用一个 servlet(该 servlet 会读取和返回日志),并将内容显示在 div/textarea 中。更进一步的 servlet 将只返回日志中的新内容。 - JScoobyCed
你有找到解决方案吗?请告诉我,我也想要一样的。 - Ankit Gupta
2个回答

9
一个简单的例子是:
Servlet(根据需要更改日志文件路径):
@WebServlet(name = "Log", urlPatterns = { "/log" }) 
public class LogServlet extends HttpServlet { 
  private static final long serialVersionUID = 7503953988166684851L; 

  public LogServlet() { 
    super(); 
  } 

  @Override 
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
      throws ServletException, IOException { 
    Path path = FileSystems.getDefault()
          .getPath("/path/to/tomcat/logs", "catalina.out"); 
    StringBuilder logContent = new StringBuilder(); 
    logContent.append("<pre>"); 
    try (BufferedReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8);) { 
        String line = null; 
        while ((line = reader.readLine()) != null) { 
            logContent.append(line).append("<br/>"); 
        } 
    } catch (IOException x) { 
        // Take care of that 
    } 
    logContent.append("</pre>"); 
    resp.getWriter().print(logContent.toString()); 
  } 

  @Override 
  public void init(ServletConfig servletConfig) throws ServletException { 
    super.init(servletConfig); 
  } 
}

HTML页面:

<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8">
  <title>Log viewer</title>
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
  <script>window.jQuery || document.write(unescape('%3Cscript src="http://jquery.com/jquery-wp-content/themes/jquery/js/jquery-1.10.2.min.js"%3E%3C/script%3E'))
  </script>
  <script type="text/javascript">
   var logging = false;
   function refreshLog() {
    if (logging) {
     $.get('/log', function(data) {
      $('#log').html(data);
     });
    }
    if (logging) {
      setTimeout(function() {
       refreshLog()
      }, 5000);
    }
   }

   function toggleLogs() {
    if (logging) {
     logging = false;
     $("#tog").val("Start");
    } else {
     logging = true;
     $("#tog").val("Stop");
     refreshLog();
    }
   }
  </script>
 </head>
 <body style="width: 100%; padding: 0; margin: 0">
  <input type="button" id="tog" onclick="toggleLogs()" value="Start" />
  <div id="log" style="width: 100%; padding: 0; margin: 0"></div>
 </body>
</html>

谢谢您的回复。实际上,我需要一个GUI工具,而不是您提出的东西。类似于logdigger这样的工具。我不想自己创建HTML。我需要一个工具来帮我完成。 - ProgrammingPanda
@ProgrammingPanda请发布你最终集成的解决方案..我也在寻找同样的方案.. - user2572801

0

您可以使用psi-probe。它具有实时访问日志、更改日志级别、下载等内置功能...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接