2013-08-22 35 views
5

Tôi đang sử dụng log4j để ghi dữ liệu của mình. Tôi có thể xem các tệp nhật ký thời gian thực cùng với ứng dụng web của tôi trong trình duyệt. Có những công cụ độc lập như Chainsaw khá tốt, nhưng chúng không phục vụ các nhật ký xem purpos theo thời gian thực trong trình duyệt.Có cách nào để xem nhật ký tomcat ứng dụng web của tôi trong trình duyệt thời gian thực không?

Ai có thể giúp tôi với điều này?

+1

Bạn có thể tạo một trang với một số javascript sử dụng thời gian chờ và gọi qua AJAX một servlet (sẽ đọc và trả lại nhật ký) và hiển thị nội dung trong div/textarea. Một servlet phát triển hơn sẽ chỉ trả về nội dung mới từ log – JScoobyCed

+0

bạn có nhận được giải pháp nào không? Plz cho tôi biết tôi cũng muốn như vậy. –

Trả lời

8

Một ví dụ đơn giản sẽ là:

Servlet (thay đổi đường dẫn của tập tin đăng nhập khi cần thiết): Trang

@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> 
+0

Cảm ơn bạn đã trả lời. Trên thực tế tôi cần một tiện ích GUI thay vì những gì bạn đã đề xuất. Một cái gì đó như [logdigger] (http://logdigger.com/logdigger-connector). Tôi không muốn tự mình tạo một html. Tôi cần một tiện ích để làm điều đó cho tôi. – ProgrammingPanda

+0

@ProgrammingPanda xin vui lòng gửi giải pháp bạn cuối cùng đã tích hợp .. tìm kiếm cho cùng một .. – user2572801

0

Bạn có thể sử dụng psi-probe. Nó có chức năng tích hợp để truy cập nhật ký trong thời gian thực, thay đổi mức nhật ký, tải xuống, v.v ...

Các vấn đề liên quan