2009-10-29 13 views
7

Aus Sicherheitsgründen (ich bin ein Entwickler) Ich habe keinen Befehlszeilenzugriff auf unsere Produktionsserver, wo Protokolldateien geschrieben werden. I kann, jedoch Zugriff auf diese Protokolldateien über HTTP. Gibt es ein Dienstprogramm in der Art von "tail -f", das einer einfachen Textdatei nur HTTP folgen kann?nach einer Protokolldatei über http

Antwort

6

Sie können dies tun, wenn der HTTP-Server Anfragen zur Rückgabe von Teilen einer Ressource annimmt. Wenn beispielsweise eine HTTP-Anforderung den Header enthält:

Bereich: Bytes = -500

die Antwort werden die letzten 500 Bytes der Ressource enthalten. Sie können das holen und dann in Zeilen usw. parsen. Ich kenne keine vorgefertigten Clients, die das für Sie tun würden - ich würde ein Skript schreiben, um die Aufgabe zu erledigen.

Sie können Hurl verwenden, um mit Kopfzeilen zu experimentieren (aus öffentlich verfügbaren Ressourcen).

+0

+1 Dies ist sehr hilfreich. Ich dachte daran, eine HEAD-Methode zu verwenden, um hoffentlich die Größe der Ressource zu ermitteln, um festzustellen, ob etwas Neues hinzugefügt wurde. Gekoppelt mit einem GET auf eine bestimmte Reichweite könnte ich auf etwas sein. Vielen Dank! – kurosch

0

Sie können PsExec verwenden, um den Befehl auf dem Remote-Computer auszuführen. Der Tail-Befehl für Windows finden Sie unter http://tailforwin32.sourceforge.net/

Wenn es HTTP sein muss, können Sie einen leichten Webservice schreiben, um das leicht zu erreichen. z. B. Text innerhalb einer angegebenen Datei von Zeile 0 bis Zeile 200 lesen.

+0

Ich wäre nicht in der Lage, etwas aus der Ferne auszuführen, das würde die Sicherheitsleute apoplektisch machen. Ich hatte gehofft, dass etwas schon existierte, bevor ich versuchte, mein eigenes zu rollen. – kurosch

1

Sie können kleine Java-Dienstprogramm verwenden, um Protokolldatei über HTTP mit Apche HTTP-Bibliothek zu lesen.

HttpClient client = HttpClientBuilder.create().build(); 
    HttpGet request = new HttpGet(uri); 
    HttpResponse response = client.execute(request); 
    BufferedReader rd = new BufferedReader(new InputStreamReader(
      response.getEntity().getContent())); 
    String s = ""; 
    while ((s = rd.readLine()) != null) { 
     //Process the line 
    }