Redirect batch stderr in Datei
Habe ich eine batch-Datei, die ausgeführt wird, eine java-Anwendung. Ich versuche es so zu modifizieren, dass wenn eine exception Auftritt, schreib dir den STDERR in eine Datei.
Es sieht wie folgt aus:
start java something.jar method %1 %2 2>> log.txt
Gibt es eine Möglichkeit, ich kann schreiben, die Argumente %1 und %2 im log.txt auch die Datei? Ich will nicht, es zu schreiben in die log-Datei jedesmal, wenn diese batch-Datei aufgerufen wird, nur wenn eine Ausnahme Auftritt.
Ich versucht, auf der Suche nach einer Möglichkeit zum umleiten von STDERR in eine variable, aber ich konnte nicht es herausfinden. Idealerweise würde ich gerne die log-Datei Aussehen:
Batch file called with parameters:
- "first arg"
- "second arg"
Exception:
java.io.exception etc...
------------------------------------
Batch file called with parameters:
- "first arg"
- "second arg"
Exception:
java.io.exception etc...
InformationsquelleAutor nivlam | 2009-05-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Etwas wie dies funktionieren könnte:
javastart.cmd
Ich bin kein java-Programmierer, ich kann nicht testen dieser Ausgabe/situation, aber:
1: %* bedeutet, dass alle Parameter, von der 1. zur letzten (auch %12 obwohl es nicht direkt verfügbar ist.. ), was die Formatierung. Könnte besser sein, verwenden Sie diese als begrenzen diese. Im bad-Abstand/zu zitieren, hättest du den vollen Parameter zu. Ich habe eine Zeile in die Protokolldatei, um zu zeigen, das vollständige line dann die Parameter. Sie können sehen, wo das problem war, wenn es um eine schlechte Argumente.
2: senden die Standardausgabe auf null (^>nul) wird nur halten Sie die stderr-Ausgabe in %%e
3: ist, Was in den tun Teil wird nur passieren, ist die für test-Anweisung hat eigentlich nichts als eine Ausgabe, d.h., wenn %%e eingestellt ist.
Mit denen gesagt wird, Sie haben das Skript zu testen und sehen, ob die Ausnahme tatsächlich auf stderr geschickt oder, wie einige andere Software auf stdout aus, auch wenn ein Fehler aufgetreten ist.
Ich hoffe, das hilft.
InformationsquelleAutor Jay
Die einzige funktionierende Lösung, die ich sehe, wäre zum umleiten von stderr in eine temporäre Datei
- und danach schaut, ob etwas geschrieben wurde, um die Datei und das schreiben in die log-in diesem Fall.
Wenn die Chargen nicht nacheinander ablaufen, sondern gleichzeitig müssen Sie etwas finden, uniquify die variable temp:
Dadurch wird vermieden, Auseinandersetzungen zwischen mehreren batches ausgeführt. Sie sind jedoch derzeit nicht mit etwas zu sperren, zu schreiben, um Ihre log-Datei und kann die Dinge deplaziert, wenn andere Dinge geschrieben, um es (mit anderen Chargen erhalten Sie möglicherweise interleaving in der
echo
undtype
Befehle oder, wenn Sie die Umleitung der Ausgabe von java auf die Datei, dann kann es verwechselt werden mit der regulären Ausgabe des java-Programms:Können Sie eine andere Datei als semaphor für das schreiben in die log um zu vermeiden, die batch-Ausgänge immer gemischt: erstellen Sie die Datei [
copy nul file
] wenn Sie möchten, schreiben der log, löschen Sie es anschließend, und bevor Sie versuchen, um es zu überprüfen, ob es tatsächlich da ist und warten Sie, bis es verschwindet. Sie können nichts über die stdout log gemischt in der Datei, obwohl, außer Sie verwenden das temp-file-Ansatz für stdout als auch (und einfachtype
den stdout loglog.txt
wenn das Java-Programm beendet, aber wieder mit Hilfe der semaphore.InformationsquelleAutor Joey
Ich nicht genau das bekommen, was Sie Fragen, aber hier einige Infos, die helfen könnten...
Können Sie umleiten stderr getrennt von stdout in eine .cmd oder .bat-Datei. Umleiten von stderr, verwenden Sie so etwas wie dieses:
Dann können Sie überprüfen command.stderr.txt für die Inhalte, und falls vorhanden, verketten Sie Sie zu die command.stdout.txt in deinem log-Datei. Oder Sie könnten concat es in jedem Fall. Wenn Sie möchten, könnte auch der echo-Befehl, den Sie lief, in der letzten log-Datei.
Können Sie auch prüfen, ob der exit-code in eine batch-Datei, mit der %ERRORLEVEL% env var. Exe-Dateien sind voraussichtlich set ERRORLEVEL im Falle eines Fehlers. Ich weiß nicht, ob java.exe diese unterstützt. Es sollte, wenn es ein "guter Bürger" auf Windows. Dies könnte ein alternativer Weg, um herauszufinden, ob die Java-Anwendung beendet sich mit einem Fehler. Aber dies ist keine Garantie, dass stderr bekam nichts. Beispiel: eine Java-app drucken Sie eine Ausnahme und den stack trace, und beenden Sie dann mit dem code 0, die Erfolg angibt. In dem Fall stderr hätte klebrige Masse in ihm, aber den ERRORLEVEL null.
BEARBEITEN: s/ERROR_LEVEL/ERRORLEVEL
Falsch verstanden, deine Antwort ein wenig. Ich Schreibe schon die stderr out in einer log-Datei, aber ich wollen, um zu versuchen und schreiben Sie die Parameter, die übergeben wurden, um die batch-Datei als gut. Ich will nur zu Protokoll diese Parameter, wenn es schreibt stderr in das Protokoll.
Es 's namens" %ERRORLEVEL%, nicht %ERROR_LEVEL%. Desweiteren sollten Sie prüfen, für die es mit "if errorlevel 1 ..." nicht im Vergleich zu den %errorlevel%, die es eigentlich nicht gibt.
InformationsquelleAutor Cheeso
Wie wäre so etwas (ungetestet):
InformationsquelleAutor cdonner
Versuchen Sie es mit ERRORLEVEL
Wenn die java-main-Klasse geschrieben, indem Sie, Sie können wickeln Sie das ganze in einen try - /catch-und Ausfahrt(1) in den catch-block zu setzen-Fehler-Niveau in die Umwelt
InformationsquelleAutor SpliFF
Einer batch-Datei wie dieser tun sollten, die trick.
start_prog.cmd
Hier bin ich vorbei stderr per pipe und übergeben von Argumenten als Parameter. Die Ausgabe wird dann an eine log.txt Datei.
Wegwerfen stdout
Umleiten von stderr zu stdout
Leitung der stderr in ein Skript um die Ausgabe zu formatieren, und Argumente als Argumente.
Anfügen Ausgabe in einer "log.txt".
Auf meinem system muss ich anrufen python.exe ansonsten ist die Leitung funktioniert nicht.
Hier sind die beiden Dateien, die ich verwendet "something.py" und "format_output.py".
something.py
format_output.py
Und endlich, hier ist der Ausgang.
log.txt
Das einzige, was fehlt, ist, dass immer etwas geschrieben "log.txt" Datei.
Ordentlich dies würde ich außerdem verschieben Sie das schreiben der log-Datei in "format_output.py".
Könnten Sie fügen Sie dann eine überprüfung, um zu sehen, wenn die stderr aus Ihrem Programm ist leer.
InformationsquelleAutor William B-R