From 6ef92315a5abedffaa6b26f24f38f8b9dd69fb09 Mon Sep 17 00:00:00 2001
From: boli <boli@localhost>
Date: Fri, 21 Sep 2007 22:23:25 +0000
Subject: [PATCH] Fix for issue where the size of log files might exceed the max file size set in the size limit rotation policy. It now checks to see if the new message will exceed the limit before writing instead of after.

---
 opends/src/server/org/opends/server/loggers/MultifileTextWriter.java |   32 +++++++++++++++++++++++++++-----
 1 files changed, 27 insertions(+), 5 deletions(-)

diff --git a/opends/src/server/org/opends/server/loggers/MultifileTextWriter.java b/opends/src/server/org/opends/server/loggers/MultifileTextWriter.java
index 4b44b77..313ce6b 100644
--- a/opends/src/server/org/opends/server/loggers/MultifileTextWriter.java
+++ b/opends/src/server/org/opends/server/loggers/MultifileTextWriter.java
@@ -524,8 +524,35 @@
    */
   public void writeRecord(String record)
   {
+    // Assume each character is 1 byte ASCII
+    int length = record.length();
+    int size = length;
+    char c;
+    for (int i=0; i < length; i++)
+    {
+      c = record.charAt(i);
+      if (c != (byte) (c & 0x0000007F))
+      {
+        try
+        {
+          // String contains a non ASCII character. Fall back to getBytes.
+          size = record.getBytes("UTF-8").length;
+        }
+        catch(Exception e)
+        {
+          size = length * 2;
+        }
+        break;
+      }
+    }
+
     synchronized(this)
     {
+      if(sizeLimit > 0 && outputStream.written + size + 1 >= sizeLimit)
+      {
+        rotate();
+      }
+
       try
       {
         writer.write(record);
@@ -541,11 +568,6 @@
         flush();
       }
     }
-
-    if(sizeLimit > 0 && outputStream.written >= sizeLimit)
-    {
-      rotate();
-    }
   }
 
   /**

--
Gitblit v1.10.0