diff options
author | Morten Tokle <mortent@verizonmedia.com> | 2021-01-21 11:05:06 +0100 |
---|---|---|
committer | Morten Tokle <mortent@verizonmedia.com> | 2021-01-21 15:04:27 +0100 |
commit | c620bf9da0f8b39fa960c8980b243cd77c33a2da (patch) | |
tree | 9c42a95349833f2a95ef783720e8cb2b136ec1c3 /jdisc_http_service/src/main/java/com | |
parent | a40c504053bd636ba7b62eaf819163c799f8b4c8 (diff) |
Remove StreamHandler inheritance
Diffstat (limited to 'jdisc_http_service/src/main/java/com')
-rw-r--r-- | jdisc_http_service/src/main/java/com/yahoo/container/logging/LogFileHandler.java | 55 |
1 files changed, 46 insertions, 9 deletions
diff --git a/jdisc_http_service/src/main/java/com/yahoo/container/logging/LogFileHandler.java b/jdisc_http_service/src/main/java/com/yahoo/container/logging/LogFileHandler.java index 5b30ffbe363..04cbb2217fe 100644 --- a/jdisc_http_service/src/main/java/com/yahoo/container/logging/LogFileHandler.java +++ b/jdisc_http_service/src/main/java/com/yahoo/container/logging/LogFileHandler.java @@ -13,6 +13,11 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.UnsupportedEncodingException; +import java.io.Writer; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -22,6 +27,7 @@ import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; +import java.util.logging.ErrorManager; import java.util.logging.Formatter; import java.util.logging.Level; import java.util.logging.LogRecord; @@ -35,7 +41,7 @@ import java.util.zip.GZIPOutputStream; * @author Bob Travis * @author bjorncs */ -class LogFileHandler extends StreamHandler { +class LogFileHandler { enum Compression { NONE, GZIP, ZSTD } @@ -56,6 +62,8 @@ class LogFileHandler extends StreamHandler { private volatile String fileName; private volatile long lastDropPosition = 0; + private volatile Writer writer; + static private class LogThread extends Thread { LogFileHandler logFileHandler; long lastFlush = 0; @@ -112,8 +120,6 @@ class LogFileHandler extends StreamHandler { long[] rotationTimes, String symlinkName, Formatter formatter) { - super(); - super.setFormatter(formatter); this.compression = compression; this.filePattern = filePattern; this.rotationTimes = rotationTimes; @@ -127,7 +133,6 @@ class LogFileHandler extends StreamHandler { * * @param r logrecord to publish */ - @Override public void publish(LogRecord r) { try { logQueue.put(r); @@ -135,9 +140,14 @@ class LogFileHandler extends StreamHandler { } } - @Override public synchronized void flush() { - super.flush(); + if(writer != null) { + try { + writer.flush(); + } catch (IOException e) { + logger.warning("Failed flushing file writer: " + Exceptions.toMessageString(e)); + } + } try { if (currentOutputStream != null && compression == Compression.GZIP) { long newPos = currentOutputStream.getChannel().position(); @@ -151,6 +161,29 @@ class LogFileHandler extends StreamHandler { } } + private synchronized void setOutputStream(OutputStream out) { + if (out == null) { + throw new NullPointerException(); + } + flushAndClose(); + writer = new OutputStreamWriter(out, StandardCharsets.UTF_8); + } + private synchronized void flushAndClose() throws SecurityException { + if (writer != null) { + try { + writer.flush(); + writer.close(); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Failed to close writer", ex); + } + writer = null; + } + } + + public void close() { + flushAndClose(); + } + private void internalPublish(LogRecord r) { // first check to see if new file needed. // if so, use this.internalRotateNow() to do it @@ -162,7 +195,11 @@ class LogFileHandler extends StreamHandler { if (now > nextRotationTime || currentOutputStream == null) { internalRotateNow(); } - super.publish(r); + try { + writer.write(r.getMessage()); + } catch (IOException e) { + logger.warning("Failed writing log record: " + Exceptions.toMessageString(e)); + } } /** @@ -228,12 +265,12 @@ class LogFileHandler extends StreamHandler { long now = System.currentTimeMillis(); fileName = LogFormatter.insertDate(filePattern, now); flush(); - super.close(); + flushAndClose(); try { checkAndCreateDir(fileName); FileOutputStream os = new FileOutputStream(fileName, true); // append mode, for safety - super.setOutputStream(os); + setOutputStream(os); currentOutputStream = os; lastDropPosition = 0; LogFileDb.nowLoggingTo(fileName); |