2013-08-22 5 views
5

Ich verwende log4j, um meine Daten zu protokollieren. Ich möchte die Log-Dateien in Echtzeit neben meiner Web-App in einem Browser ansehen können. Es gibt eigenständige Tools wie Chainsaw, die ziemlich gut sind, aber sie dienen nicht dem Zweck, Protokolle in Echtzeit in einem Browser anzuzeigen.Gibt es eine Möglichkeit, meine Web-Apps Tomcat Logs in einem Browser in Echtzeit zu sehen?

Kann mir jemand dabei helfen?

+1

Sie könnten eine Seite mit einigen Javascript erstellen, die ein Timeout verwendet und über AJAX ein Servlet aufrufen (das würde lesen und gibt das Protokoll zurück und zeigt den Inhalt in einem div/textarea an. Ein weiter entwickeltes Servlet würde nur den neuen Inhalt aus dem Protokoll zurückgeben. – JScoobyCed

+0

Haben Sie irgendeine Lösung? Plz sagen Sie mir, ich möchte auch das gleiche. –

Antwort

8

wäre ein einfaches Beispiel sein:

Servlets (ändern Pfad der Protokolldatei nach Bedarf):

@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-Seite:

<!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

Vielen Dank für Ihre Antwort. Eigentlich brauche ich ein GUI-Dienstprogramm anstelle dessen, was Sie vorgeschlagen haben. So etwas wie [Logdigger] (http://logdigger.com/logdigger-connector). Ich möchte kein HTML selbst erstellen. Ich brauche ein Dienstprogramm, um das für mich zu tun. – ProgrammingPanda

+0

@ProgrammingPanda bitte posten Sie die Lösung, die Sie schließlich integriert .., die für das selbe .. – user2572801

0

Sie psi-probe verwenden können. Es verfügt über eine integrierte Funktionalität für den Zugriff auf Protokolle in Echtzeit, Änderungsprotokoll, Download, etc.

Verwandte Themen