summaryrefslogtreecommitdiffstats
path: root/jdisc_http_service/src/main/java/com/yahoo/container
diff options
context:
space:
mode:
authorMorten Tokle <mortent@verizonmedia.com>2021-01-21 11:05:06 +0100
committerMorten Tokle <mortent@verizonmedia.com>2021-01-21 15:04:27 +0100
commitc620bf9da0f8b39fa960c8980b243cd77c33a2da (patch)
tree9c42a95349833f2a95ef783720e8cb2b136ec1c3 /jdisc_http_service/src/main/java/com/yahoo/container
parenta40c504053bd636ba7b62eaf819163c799f8b4c8 (diff)
Remove StreamHandler inheritance
Diffstat (limited to 'jdisc_http_service/src/main/java/com/yahoo/container')
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/container/logging/LogFileHandler.java55
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);