diff --git a/core/java/src/net/i2p/util/FileLogWriter.java b/core/java/src/net/i2p/util/FileLogWriter.java
index 3b3df88c174952a1463c3fef1f3efeca7fe9a166..5ec7512b0d2c83f34357da1e1c283e9788d50e9d 100644
--- a/core/java/src/net/i2p/util/FileLogWriter.java
+++ b/core/java/src/net/i2p/util/FileLogWriter.java
@@ -71,7 +71,7 @@ class FileLogWriter extends LogWriter {
                 System.err.println("Error writing log, disk full? " + t);
             //t.printStackTrace();
         }
-        if (_numBytesInCurrentFile >= _manager.getFileSize()) {
+        if (_numBytesInCurrentFile >= _manager.getFileSize() - 1024) {
             rotateFile();
         }
     }
diff --git a/core/java/src/net/i2p/util/LogManager.java b/core/java/src/net/i2p/util/LogManager.java
index 1f453995e4882eec0057309b89e0f00209d3c602..b98f1c528545fd65120170ba7e18503c7d95295a 100644
--- a/core/java/src/net/i2p/util/LogManager.java
+++ b/core/java/src/net/i2p/util/LogManager.java
@@ -78,6 +78,7 @@ public class LogManager implements Flushable {
     public final static String DEFAULT_ROTATIONLIMIT = "2";
     public final static String DEFAULT_DEFAULTLEVEL = Log.STR_ERROR;
     public final static String DEFAULT_ONSCREENLEVEL = Log.STR_CRIT;
+    private static final int MIN_FILESIZE_LIMIT = 16*1024;
 
     private final I2PAppContext _context;
     private final Log _log;
@@ -410,7 +411,7 @@ public class LogManager implements Flushable {
         else
             setBaseLogfilename(filename);
 
-        _fileSize = getFileSize(config.getProperty(PROP_FILESIZE, DEFAULT_FILESIZE));
+        _fileSize = Math.max(MIN_FILESIZE_LIMIT, getFileSize(config.getProperty(PROP_FILESIZE, DEFAULT_FILESIZE)));
 
         _rotationLimit = -1;
         try {
@@ -536,7 +537,7 @@ public class LogManager implements Flushable {
      */
     public void setFileSize(int numBytes) {
         if (numBytes > 0)
-            _fileSize = numBytes;
+            _fileSize = Math.max(MIN_FILESIZE_LIMIT, numBytes);
     }
     
     public String getDefaultLimit() { return Log.toLevelString(_defaultLimit); }
@@ -563,7 +564,7 @@ public class LogManager implements Flushable {
      * Size may be k, m, or g; a trailing b is ignored. Upper-case is allowed.
      * Spaces between the number and letter is are allowed.
      * The number may be in floating point.
-     * 4096 min, 2 GB max (returns int)
+     * 16K min, 2 GB max (returns int)
      */
     public static int getFileSize(String size) {
         try {
@@ -592,7 +593,7 @@ public class LogManager implements Flushable {
                     // blah, noop
                     break;
             }
-            if (val < 4096 || val > Integer.MAX_VALUE)
+            if (val < MIN_FILESIZE_LIMIT || val > Integer.MAX_VALUE)
                 return -1;
             return (int) val;
         } catch (Throwable t) {