From 753d9aeb7050b49c993e8883fae7bdbcbe5dc927 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.

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

diff --git a/opendj-sdk/opends/src/server/org/opends/server/loggers/MultifileTextWriter.java b/opendj-sdk/opends/src/server/org/opends/server/loggers/MultifileTextWriter.java
index 4b44b77..313ce6b 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/loggers/MultifileTextWriter.java
+++ b/opendj-sdk/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