From f9b745a67140892982ec79b2aff666cd77b42f25 Mon Sep 17 00:00:00 2001 From: zzz Date: Fri, 18 Dec 2009 00:04:16 +0000 Subject: [PATCH] * Log: - Close old file on rotate - Buffer writes - Write in UTF-8 --- core/java/src/net/i2p/util/LogManager.java | 1 + core/java/src/net/i2p/util/LogWriter.java | 28 +++++++++++++++------- history.txt | 4 ++++ 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/core/java/src/net/i2p/util/LogManager.java b/core/java/src/net/i2p/util/LogManager.java index ae6fbfc23..c776a6583 100644 --- a/core/java/src/net/i2p/util/LogManager.java +++ b/core/java/src/net/i2p/util/LogManager.java @@ -641,6 +641,7 @@ public class LogManager { public void shutdown() { _log.log(Log.WARN, "Shutting down logger"); _writer.flushRecords(false); + _writer.stopWriting(); } private static int __id = 0; diff --git a/core/java/src/net/i2p/util/LogWriter.java b/core/java/src/net/i2p/util/LogWriter.java index 829b91d7b..eeb22d56c 100644 --- a/core/java/src/net/i2p/util/LogWriter.java +++ b/core/java/src/net/i2p/util/LogWriter.java @@ -9,10 +9,13 @@ package net.i2p.util; * */ +import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.Writer; import java.util.List; import net.i2p.I2PAppContext; @@ -28,7 +31,7 @@ class LogWriter implements Runnable { private final static long CONFIG_READ_ITERVAL = 10 * 1000; private long _lastReadConfig = 0; private long _numBytesInCurrentFile = 0; - private OutputStream _currentOut; // = System.out + private Writer _currentOut; private int _rotationNum = -1; private String _logFilenamePattern; private File _currentFile; @@ -56,11 +59,12 @@ class LogWriter implements Runnable { flushRecords(); rereadConfig(); } - System.err.println("Done writing"); + //System.err.println("Done writing"); } catch (Exception e) { System.err.println("Error writing the logs: " + e.getMessage()); e.printStackTrace(); } + closeFile(); } public void flushRecords() { flushRecords(true); } @@ -124,12 +128,10 @@ class LogWriter implements Runnable { if (val == null) return; if (_currentOut == null) rotateFile(); - byte b[] = new byte[val.length()]; - for (int i = 0; i < b.length; i++) - b[i] = (byte)val.charAt(i); try { - _currentOut.write(b); - _numBytesInCurrentFile += b.length; + _currentOut.write(val); + // may be a little off if a lot of multi-byte chars, but unlikely + _numBytesInCurrentFile += val.length(); } catch (Throwable t) { System.err.println("Error writing record, disk full?"); t.printStackTrace(); @@ -162,14 +164,24 @@ class LogWriter implements Runnable { //System.exit(0); } } + closeFile(); try { - _currentOut = new FileOutputStream(f); + _currentOut = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f), "UTF-8")); } catch (IOException ioe) { System.err.println("Error rotating into [" + f.getAbsolutePath() + "]"); ioe.printStackTrace(); } } + private void closeFile() { + Writer out = _currentOut; + if (out != null) { + try { + out.close(); + } catch (IOException ioe) {} + } + } + /** * Get the next file in the rotation * diff --git a/history.txt b/history.txt index 53b2645b1..077782a95 100644 --- a/history.txt +++ b/history.txt @@ -5,6 +5,10 @@ - Reenable InternalSockets * i2ptunnel: Fix bundle script * InNetMessagePool: Cleanup + * Log: + - Close old file on rotate + - Buffer writes + - Write in UTF-8 * SusiDNS: - Remove untranslatable button images (-15KB) - Tag buttons and messages