Ich habe nach einem Problem mit .close()
gesucht, das zu Problemen beim Abschneiden geführt hat. Das Programm läuft auf zwei verschiedenen Servern, hatte aber das gleiche Cutoff-Problem. Es scheint, dass die Protokolldatei nicht ordnungsgemäß gelöscht wird. Also entschied ich mich, in den .close()
Quellcode einzutauchen. Ich sehe kein .flush()
genannt werden. Fehle ich etwas? Sollten wir immer .flush()
anrufen? Nach dieser Antwort, sollte es keine Rolle: Using flush() before close()Der Aufruf von close() auf OutputStream unterbricht die Ausgabe in eine Protokolldatei.
Was ich rufe:
private static void write_to_file(String incoming){
output_stream.write(incoming);
output_stream.write(System.lineSeparator());
}
Später Ich nenne output_stream.close();
Der Quellcode:
/**
* Closes the stream and releases any system resources associated
* with it. Closing a previously closed stream has no effect.
*
* @see #checkError()
*/
public void close() {
try {
synchronized (lock) {
if (out == null)
return;
out.close();
out = null;
}
}
catch (IOException x) {
trouble = true;
}
}
Log Datei:
C:\apps\bot\log\processed\file.0000090.gz C:\apps\bot\log\processed\file.0000091.gz C:\apps\bot\log\process
Die Verwendung von 'close()' sollte alles sein, was Sie brauchen. Wie erstellst du den Stream, an den du schreibst? Sind Sie absolut sicher, dass Ihre Methode 'close()' aufgerufen wird? – Mifeet
Weißt du was, ich hatte das gerade überprüft und gesehen, dass es nur in einem try-catch-Block ausgeführt wurde (bei jeder Ausnahme). Bitte hinterlassen Sie eine Antwort und ich werde korrekt markieren. Vielen Dank – Petro