From e9c405d36e0b27751d6099226e24970bbc8c965c Mon Sep 17 00:00:00 2001 From: q3769 Date: Tue, 16 May 2023 01:32:21 -0500 Subject: [PATCH] + no longer closing stdout/err fds --- pom.xml | 2 +- .../writer/BufferedStandardOutput.java | 65 +++++++------------ 2 files changed, 23 insertions(+), 44 deletions(-) diff --git a/pom.xml b/pom.xml index 3f637bb..8c8d0fc 100644 --- a/pom.xml +++ b/pom.xml @@ -31,7 +31,7 @@ io.github.elf4j elf4j-engine - 10.0.1 + 10.0.2 jar elf4j-engine A stand-alone Java log engine implementing the ELF4J (Easy Logging Facade for Java) API diff --git a/src/main/java/elf4j/engine/service/writer/BufferedStandardOutput.java b/src/main/java/elf4j/engine/service/writer/BufferedStandardOutput.java index afb92e2..01495de 100644 --- a/src/main/java/elf4j/engine/service/writer/BufferedStandardOutput.java +++ b/src/main/java/elf4j/engine/service/writer/BufferedStandardOutput.java @@ -25,8 +25,6 @@ package elf4j.engine.service.writer; -import elf4j.engine.service.LogServiceManager; -import elf4j.engine.service.Stoppable; import elf4j.engine.service.configuration.LogServiceConfiguration; import lombok.NonNull; import lombok.ToString; @@ -38,11 +36,10 @@ * */ @ToString -public class BufferedStandardOutput implements StandardOutput, Stoppable { +public class BufferedStandardOutput implements StandardOutput { private static final OutStreamType DEFAULT_OUT_STREAM_TYPE = OutStreamType.STDOUT; @NonNull private final OutStreamType outStreamType; - private final BufferedOutStream bufferedOutStream = new BufferedOutStream(); - private boolean closed; + private final BufferedStandardOutStreams bufferedStandardOutStreams = new BufferedStandardOutStreams(); /** * @param outStreamType @@ -50,7 +47,6 @@ public class BufferedStandardOutput implements StandardOutput, Stoppable { */ private BufferedStandardOutput(@NonNull OutStreamType outStreamType) { this.outStreamType = outStreamType; - LogServiceManager.INSTANCE.registerStop(this); } /** @@ -68,60 +64,43 @@ private BufferedStandardOutput(@NonNull OutStreamType outStreamType) { @Override public void write(byte[] bytes) { if (this.outStreamType == OutStreamType.STDERR) { - bufferedOutStream.err(bytes); + bufferedStandardOutStreams.err(bytes); } else { - bufferedOutStream.out(bytes); + bufferedStandardOutStreams.out(bytes); } } - @Override - public void stop() { - this.closed = true; - this.bufferedOutStream.close(); - } - - @Override - public boolean isStopped() { - return this.closed; - } - enum OutStreamType { STDOUT, STDERR } - static class BufferedOutStream implements Closeable { + static class BufferedStandardOutStreams { final OutputStream bufferedStdOut = new BufferedOutputStream(new FileOutputStream(FileDescriptor.out), 2048); final OutputStream bufferedStdErr = new BufferedOutputStream(new FileOutputStream(FileDescriptor.err), 2048); - BufferedOutStream() { - } - - @Override - public void close() { - try (OutputStream out = bufferedStdOut; OutputStream err = bufferedStdErr) { - out.flush(); - err.flush(); - } catch (IOException e) { - throw new UncheckedIOException(e); - } + BufferedStandardOutStreams() { } - synchronized void err(byte[] bytes) { - try { - bufferedStdErr.write(bytes); - bufferedStdErr.flush(); - } catch (IOException e) { - throw new UncheckedIOException(e); + void err(byte[] bytes) { + synchronized (System.err) { + try { + bufferedStdErr.write(bytes); + bufferedStdErr.flush(); + } catch (IOException e) { + throw new UncheckedIOException(e); + } } } - synchronized void out(byte[] bytes) { - try { - bufferedStdOut.write(bytes); - bufferedStdOut.flush(); - } catch (IOException e) { - throw new UncheckedIOException(e); + void out(byte[] bytes) { + synchronized (System.out) { + try { + bufferedStdOut.write(bytes); + bufferedStdOut.flush(); + } catch (IOException e) { + throw new UncheckedIOException(e); + } } } }