You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by rg...@apache.org on 2011/05/14 06:52:09 UTC

svn commit: r1102953 - in /logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src: main/java/org/apache/logging/log4j/core/appender/ main/java/org/apache/logging/log4j/core/appender/rolling/ main/java/org/apache/logging/log4j/core/append...

Author: rgoers
Date: Sat May 14 04:52:08 2011
New Revision: 1102953

URL: http://svn.apache.org/viewvc?rev=1102953&view=rev
Log:
got basic rolling to work

Added:
    logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/
    logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeTest.java
    logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/resources/log4j-rolling1.xml
Modified:
    logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/RollingFileAppender.java
    logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/FixedWindowRolloverStrategy.java
    logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java
    logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/SizeBasedTriggeringPolicy.java
    logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/helper/FileRenameAction.java
    logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/helper/GZCompressAction.java

Modified: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/RollingFileAppender.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/RollingFileAppender.java?rev=1102953&r1=1102952&r2=1102953&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/RollingFileAppender.java (original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/RollingFileAppender.java Sat May 14 04:52:08 2011
@@ -40,7 +40,6 @@ public class RollingFileAppender extends
     public final String filePattern;
     private final TriggeringPolicy policy;
     private final RolloverStrategy strategy;
-    private final Lock lock = new ReentrantLock();
     private final boolean bufferedIO;
 
     public RollingFileAppender(String name, Layout layout, TriggeringPolicy policy, RolloverStrategy strategy,
@@ -71,7 +70,6 @@ public class RollingFileAppender extends
                                               @PluginAttr("filePattern") String filePattern,
                                               @PluginAttr("append") String append,
                                               @PluginAttr("name") String name,
-                                              @PluginAttr("compress") String compress,
                                               @PluginAttr("bufferedIO") String bufferedIO,
                                               @PluginAttr("immediateFlush") String immediateFlush,
                                               @PluginElement("policy") TriggeringPolicy policy,
@@ -85,8 +83,6 @@ public class RollingFileAppender extends
         boolean isBuffered = bufferedIO == null ? true : Boolean.valueOf(bufferedIO);;
         boolean isFlush = immediateFlush == null ? true : Boolean.valueOf(immediateFlush);;
 
-        CompressionType type = CompressionType.NONE;
-
         if (name == null) {
             logger.error("No name provided for FileAppender");
             return null;
@@ -112,15 +108,7 @@ public class RollingFileAppender extends
             return null;
         }
 
-        if (compress != null) {
-            CompressionType t = CompressionType.valueOf(compress.toUpperCase());
-            if (t != null) {
-                type = t;
-            }
-        }
-
-        RollingFileManager manager = RollingFileManager.getFileManager(fileName, filePattern, isAppend, isBuffered,
-            type);
+        RollingFileManager manager = RollingFileManager.getFileManager(fileName, filePattern, isAppend, isBuffered);
         if (manager == null) {
             return null;
         }

Modified: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/FixedWindowRolloverStrategy.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/FixedWindowRolloverStrategy.java?rev=1102953&r1=1102952&r2=1102953&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/FixedWindowRolloverStrategy.java (original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/FixedWindowRolloverStrategy.java Sat May 14 04:52:08 2011
@@ -17,7 +17,6 @@
 package org.apache.logging.log4j.core.appender.rolling;
 
 import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.core.appender.CompressionType;
 import org.apache.logging.log4j.core.appender.rolling.helper.Action;
 import org.apache.logging.log4j.core.appender.rolling.helper.FileRenameAction;
 import org.apache.logging.log4j.core.appender.rolling.helper.GZCompressAction;
@@ -107,17 +106,12 @@ public class FixedWindowRolloverStrategy
             String compressedName = renameTo;
             Action compressAction = null;
 
-            switch (manager.getCompressionType()) {
-                case GZIP: {
-                    renameTo = renameTo.substring(0, renameTo.length() - 3);
-                    compressAction = new GZCompressAction(new File(renameTo), new File(compressedName), true);
-                    break;
-                }
-                case ZIP: {
-                    renameTo = renameTo.substring(0, renameTo.length() - 4);
-                    compressAction = new ZipCompressAction(new File(renameTo), new File(compressedName), true);
-                    break;
-                }
+            if (renameTo.endsWith(".gz")) {
+                renameTo = renameTo.substring(0, renameTo.length() - 3);
+                compressAction = new GZCompressAction(new File(renameTo), new File(compressedName), true);
+            } else if (renameTo.endsWith(".zip")) {
+                renameTo = renameTo.substring(0, renameTo.length() - 4);
+                compressAction = new ZipCompressAction(new File(renameTo), new File(compressedName), true);
             }
 
             FileRenameAction renameAction =

Modified: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java?rev=1102953&r1=1102952&r2=1102953&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java (original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/RollingFileManager.java Sat May 14 04:52:08 2011
@@ -18,16 +18,22 @@ package org.apache.logging.log4j.core.ap
 
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LogEvent;
-import org.apache.logging.log4j.core.appender.CompressionType;
 import org.apache.logging.log4j.core.appender.FileManager;
 import org.apache.logging.log4j.core.appender.ManagerFactory;
+import org.apache.logging.log4j.core.appender.rolling.helper.Action;
+import org.apache.logging.log4j.core.appender.rolling.helper.ActionBase;
 import org.apache.logging.log4j.internal.StatusLogger;
 
 import java.io.BufferedOutputStream;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
+import java.io.IOException;
 import java.io.OutputStream;
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
 
 /**
  *
@@ -39,49 +45,35 @@ public class RollingFileManager extends 
      */
     protected static final Logger logger = StatusLogger.getLogger();
 
-    private CompressionType type = null;
     private long size;
     private long initialTime;
     private PatternProcessor processor;
+    private ArrayBlockingQueue<RollingFileManager> queue = new ArrayBlockingQueue<RollingFileManager>(1);
+    private static int count = 0;
 
     private static ManagerFactory factory = new RollingFileManagerFactory();
 
-    public static RollingFileManager getFileManager(String fileName, String pattern, boolean append, boolean bufferedIO,
-                                                    CompressionType type) {
+    public static RollingFileManager getFileManager(String fileName, String pattern, boolean append,
+                                                    boolean bufferedIO) {
 
-        return (RollingFileManager) getManager(fileName, factory, new FactoryData(fileName, pattern, append, bufferedIO,
-                                               type));
+        return (RollingFileManager) getManager(fileName, factory, new FactoryData(fileName, pattern, append,
+            bufferedIO));
     }
 
-    public RollingFileManager(String fileName, String pattern, OutputStream os, boolean append, long size,
-                              CompressionType type, long time) {
+    public RollingFileManager(String fileName, String pattern, OutputStream os, boolean append, long size, long time) {
         super(fileName, os, append, false);
         this.size = size;
-        this.type = type;
         this.initialTime = time;
         processor = new PatternProcessor(pattern);
+        queue.add(this);
     }
 
-    @Override
-    public void release() {
-        super.release();
-        if (!isOpen() && type != null) {
-            doCompress();
-        }
-    }
 
-    protected synchronized void write(byte[] bytes, int offset, int length)  {
+    protected synchronized void write(byte[] bytes, int offset, int length) {
         size += length;
         super.write(bytes, offset, length);
     }
 
-    public CompressionType getCompressionType() {
-        return this.type;
-    }
-
-    private void doCompress() {
-
-    }
     public long getFileSize() {
         return size;
     }
@@ -92,15 +84,15 @@ public class RollingFileManager extends 
 
     public synchronized void checkRollover(LogEvent event, TriggeringPolicy policy, RolloverStrategy strategy) {
         if (policy.isTriggeringEvent(event)) {
-            close();
-            strategy.rollover(this);
-            try {
-                size = 0;
-                initialTime = System.currentTimeMillis();
-                OutputStream os = new FileOutputStream(getFileName(), isAppend());
-                setOutputStream(os);
-            } catch (FileNotFoundException ex) {
-                logger.error("FileManager (" + getFileName() + ") " + ex);
+            if (rollover(strategy)) {
+                try {
+                    size = 0;
+                    initialTime = System.currentTimeMillis();
+                    OutputStream os = new FileOutputStream(getFileName(), isAppend());
+                    setOutputStream(os);
+                } catch (FileNotFoundException ex) {
+                    logger.error("FileManager (" + getFileName() + ") " + ex);
+                }
             }
         }
     }
@@ -109,19 +101,110 @@ public class RollingFileManager extends 
         return processor;
     }
 
+    private boolean rollover(RolloverStrategy strategy) {
+
+        boolean success = false;
+
+        try {
+            /* Block until the asynchronous operation is completed. If it takes too long then
+               don't roll over.
+             */
+            if (queue.poll(50, TimeUnit.MILLISECONDS) == null) {
+                logger.error("Unable to acquire lock for rollover");
+                return success;
+            }
+        } catch (InterruptedException ie) {
+            logger.error("Thread interrupted while attempting to check rollover", ie);
+            return success;
+        }
+
+        RolloverDescription descriptor = strategy.rollover(this);
+
+        if (descriptor != null) {
+
+            close();
+
+            try {
+
+                if (descriptor.getSynchronous() != null) {
+
+                    try {
+                        success = descriptor.getSynchronous().execute();
+                    } catch (Exception ex) {
+                        logger.error("Error in synchronous task", ex);
+                    }
+                }
+
+                if (success) {
+                    Action async = new AsyncAction(descriptor.getAsynchronous(), this);
+                    if (async != null) {
+                        new Thread(async).start();
+                    }
+                }
+            } finally {
+                if (!success && queue.size() == 0) {
+                    queue.add(this);
+                }
+            }
+            return success;
+        }
+        return false;
+    }
+
+    private static class AsyncAction extends ActionBase {
+
+        private final Action action;
+        private final RollingFileManager manager;
+
+        public AsyncAction(Action act, RollingFileManager manager) {
+            this.action = act;
+            this.manager = manager;
+        }
+
+        /**
+         * Perform an action.
+         *
+         * @return true if action was successful.  A return value of false will cause
+         *         the rollover to be aborted if possible.
+         * @throws java.io.IOException if IO error, a thrown exception will cause the rollover
+         *                             to be aborted if possible.
+         */
+        public boolean execute() throws IOException {
+            try {
+                return action.execute();
+            } finally {
+                this.manager.queue.add(manager);
+            }
+        }
+
+        /**
+         * Cancels the action if not already initialized or waits till completion.
+         */
+        public void close() {
+            action.close();
+        }
+
+        /**
+         * Determines if action has been completed.
+         *
+         * @return true if action is complete.
+         */
+        public boolean isComplete() {
+            return action.isComplete();
+        }
+    }
+
     private static class FactoryData {
         String fileName;
         String pattern;
         boolean append;
         boolean bufferedIO;
-        CompressionType type;
 
-        public FactoryData(String fileName, String pattern, boolean append, boolean bufferedIO, CompressionType type) {
+        public FactoryData(String fileName, String pattern, boolean append, boolean bufferedIO) {
             this.fileName = fileName;
             this.pattern = pattern;
             this.append = append;
             this.bufferedIO = bufferedIO;
-            this.type = type;
         }
     }
 
@@ -142,7 +225,7 @@ public class RollingFileManager extends 
                 if (data.bufferedIO) {
                     os = new BufferedOutputStream(os);
                 }
-                return new RollingFileManager(data.fileName, data.pattern, os, data.append, size, data.type, time);
+                return new RollingFileManager(data.fileName, data.pattern, os, data.append, size, time);
             } catch (FileNotFoundException ex) {
                 logger.error("FileManager (" + data.fileName + ") " + ex);
             }

Modified: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/SizeBasedTriggeringPolicy.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/SizeBasedTriggeringPolicy.java?rev=1102953&r1=1102952&r2=1102953&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/SizeBasedTriggeringPolicy.java (original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/SizeBasedTriggeringPolicy.java Sat May 14 04:52:08 2011
@@ -16,24 +16,43 @@
  */
 package org.apache.logging.log4j.core.appender.rolling;
 
+import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LogEvent;
-import org.apache.logging.log4j.core.appender.FileManager;
 import org.apache.logging.log4j.core.config.plugins.Plugin;
 import org.apache.logging.log4j.core.config.plugins.PluginAttr;
-import org.apache.logging.log4j.core.config.plugins.PluginElement;
 import org.apache.logging.log4j.core.config.plugins.PluginFactory;
+import org.apache.logging.log4j.internal.StatusLogger;
+
+import java.text.NumberFormat;
+import java.text.ParseException;
+import java.util.Locale;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  *
  */
-@Plugin(name = "Size", type = "Core", printObject = true)
+@Plugin(name = "SizeBasedTriggeringPolicy", type = "Core", printObject = true)
 public class SizeBasedTriggeringPolicy implements TriggeringPolicy {
 
+    protected static final Logger logger = StatusLogger.getLogger();
+
+    private static final long KB = 1024;
+    private static final long MB = KB * KB;
+    private static final long GB = KB * MB;
+
     /**
      * Rollover threshold size in bytes.
      */
     private static final long MAX_FILE_SIZE = 10 * 1024 * 1024; // let 10 MB the default max size
 
+
+    /**
+     * Pattern for string parsing.
+     */
+    private static final Pattern valuePattern =
+        Pattern.compile("([0-9]+([\\.,][0-9]+)?)\\s*(|K|M|G)B?", Pattern.CASE_INSENSITIVE);
+
     private final long maxFileSize;
 
     private RollingFileManager manager;
@@ -64,7 +83,51 @@ public class SizeBasedTriggeringPolicy i
 
     @PluginFactory
     public static SizeBasedTriggeringPolicy createPolicy(@PluginAttr("size") String size) {
-        long maxSize = size == null ? MAX_FILE_SIZE : Long.parseLong(size);
+
+        long maxSize = size == null ? MAX_FILE_SIZE : valueOf(size);
         return new SizeBasedTriggeringPolicy(maxSize);
     }
+
+    /**
+     * Converts a string to a number of bytes. Strings consist of a floating point value followed by
+     * K, M, or G for kilobytes, megabytes, gigabytes, respectively. The
+     * abbreviations KB, MB, and GB are also accepted. Matching is case insensitive.
+     *
+     * @param string The string to convert
+     * @return The Bytes value for the string
+     */
+    private static long valueOf(final String string){
+        final Matcher matcher = valuePattern.matcher(string);
+
+        // Valid input?
+        if (matcher.matches()) {
+            try {
+                // Get double precision value
+                final long value = NumberFormat.getNumberInstance(Locale.getDefault()).parse(
+                    matcher.group(1)).longValue();
+
+                // Get units specified
+                final String units = matcher.group(3);
+
+                if (units.equalsIgnoreCase("")) {
+                    return value;
+                } else if (units.equalsIgnoreCase("K")) {
+                    return value * KB;
+                } else if (units.equalsIgnoreCase("M")) {
+                    return value * MB;
+                } else if (units.equalsIgnoreCase("G")) {
+                    return value * GB;
+                } else {
+                    logger.error("Units not recognized: " + string);
+                    return MAX_FILE_SIZE;
+                }
+            } catch (ParseException e) {
+                logger.error("Unable to parse numeric part: " + string, e);
+                return MAX_FILE_SIZE;
+            }
+        } else {
+            logger.error("Unable to parse bytes: " + string);
+            return MAX_FILE_SIZE;
+        }
+    }
 }

Modified: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/helper/FileRenameAction.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/helper/FileRenameAction.java?rev=1102953&r1=1102952&r2=1102953&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/helper/FileRenameAction.java (original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/helper/FileRenameAction.java Sat May 14 04:52:08 2011
@@ -76,12 +76,16 @@ public final class FileRenameAction exte
     public static boolean execute(final File source, final File destination, boolean renameEmptyFiles) {
         if (renameEmptyFiles || (source.length() > 0)) {
             try {
-                return source.renameTo(destination);
+
+                boolean result = source.renameTo(destination);
+                //System.out.println("Rename of " + source.getName() + " to " + destination.getName() + ": " + result);
+                return result;
             } catch (Exception ex) {
                 try {
                     copyFile(source, destination);
                     return source.delete();
                 } catch (IOException iex) {
+                    iex.printStackTrace();
                 }
             }
         }
@@ -96,18 +100,28 @@ public final class FileRenameAction exte
 
         FileChannel srcChannel = null;
         FileChannel destChannel = null;
+        FileInputStream srcStream = null;
+        FileOutputStream destStream = null;
         try {
-            srcChannel = new FileInputStream(source).getChannel();
-            destChannel = new FileOutputStream(destination).getChannel();
+            srcStream = new FileInputStream(source);
+            destStream = new FileOutputStream(destination);
+            srcChannel = srcStream.getChannel();
+            destChannel = destStream.getChannel();
             destChannel.transferFrom(srcChannel, 0, srcChannel.size());
         }
         finally {
             if(srcChannel != null) {
                 srcChannel.close();
             }
+            if (srcStream != null) {
+                srcStream.close();
+            }
             if (destChannel != null) {
                 destChannel.close();
             }
+            if (destStream != null) {
+                destStream.close();
+            }
         }
     }
 }

Modified: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/helper/GZCompressAction.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/helper/GZCompressAction.java?rev=1102953&r1=1102952&r2=1102953&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/helper/GZCompressAction.java (original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/helper/GZCompressAction.java Sat May 14 04:52:08 2011
@@ -105,8 +105,10 @@ public final class GZCompressAction exte
             os.close();
             fis.close();
 
-            if (deleteSource && !source.delete()) {
-                logger.warn("Unable to delete " + source.toString() + ".");
+            if (deleteSource) {
+                if (!source.delete()) {
+                    logger.warn("Unable to delete " + source.toString() + ".");
+                }
             }
 
             return true;

Added: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeTest.java?rev=1102953&view=auto
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeTest.java (added)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeTest.java Sat May 14 04:52:08 2011
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache license, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the license for the specific language governing permissions and
+ * limitations under the license.
+ */
+package org.apache.logging.log4j.core.appender.rolling;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.ThreadContext;
+import org.apache.logging.log4j.core.Layout;
+import org.apache.logging.log4j.core.Log4jLogEvent;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.appender.OutputStreamManager;
+import org.apache.logging.log4j.core.config.Configuration;
+import org.apache.logging.log4j.core.config.XMLConfigurationFactory;
+import org.apache.logging.log4j.core.layout.PatternLayout;
+import org.apache.logging.log4j.internal.StatusLogger;
+import org.apache.logging.log4j.message.SimpleMessage;
+import org.junit.After;
+import org.junit.Test;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedReader;
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+/**
+ *
+ */
+public class RollingAppenderSizeTest {
+
+    private static final String CONFIG = "log4j-rolling1.xml";
+    private static final String DIR = "target/rolling1";
+
+    org.apache.logging.log4j.Logger logger = LogManager.getLogger(RollingAppenderSizeTest.class.getName());
+
+    @BeforeClass
+    public static void setupClass() {
+        deleteDir();
+        System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY, CONFIG);
+        LoggerContext ctx = (LoggerContext) LogManager.getContext();
+        Configuration config = ctx.getConfiguration();
+    }
+
+    @AfterClass
+    public static void cleanupClass() {
+        deleteDir();
+        System.clearProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY);
+        LoggerContext ctx = (LoggerContext) LogManager.getContext();
+        ctx.reconfigure();
+        StatusLogger.getLogger().reset();
+    }
+
+    @Test
+    public void testAppender() throws Exception {
+        for (int i=0; i < 100; ++i) {
+            logger.debug("This is test message number " + i);
+        }
+        File dir = new File(DIR);
+        assertTrue("Directory not created", dir.exists() && dir.listFiles().length > 0);
+        File[] files = dir.listFiles();
+        assertTrue("No files created", files.length > 0);
+        boolean found = false;
+        for (File file : files) {
+            if (file.getName().endsWith(".gz")) {
+                found = true;
+            }
+        }
+        assertTrue("No compressed files found", found);
+    }
+
+    private static void deleteDir() {
+        File dir = new File(DIR);
+        if (dir.exists()) {
+            File[] files = dir.listFiles();
+            for (File file : files) {
+                file.delete();
+            }
+            dir.delete();
+        }
+    }
+}

Added: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/resources/log4j-rolling1.xml
URL: http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/resources/log4j-rolling1.xml?rev=1102953&view=auto
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/resources/log4j-rolling1.xml (added)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/resources/log4j-rolling1.xml Sat May 14 04:52:08 2011
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration packages="" status="debug" name="XMLConfigTest">
+  <properties>
+    <property name="filename">target/rolling1/rollingtest.log</property>
+  </properties>
+  <filters>
+    <Threshold level="debug"/>
+  </filters>
+
+  <appenders>
+    <Console name="STDOUT">
+      <PatternLayout pattern="%m%n"/>
+    </Console>
+    <RollingFile name="RollingFile" fileName="${filename}" filePattern="target/rolling1/test1-%i.log.gz">
+      <PatternLayout>
+        <pattern>%d %p %C{1.} [%t] %m%n</pattern>
+      </PatternLayout>
+      <SizeBasedTriggeringPolicy size="500" />
+      <FixedWindowRolloverStrategy />
+    </RollingFile>
+    <List name="List">
+      <filters>
+        <Threshold level="error"/>
+      </filters>
+    </List>
+  </appenders>
+
+  <loggers>
+    <logger name="org.apache.logging.log4j.test1" level="debug" additivity="false">
+      <filters>
+        <ThreadContextMap>
+          <KeyValuePair key="test" value="123"/>
+        </ThreadContextMap>
+      </filters>
+      <appender-ref ref="STDOUT"/>
+    </logger>>
+
+    <logger name="org.apache.logging.log4j.core.appender.rolling" level="debug" additivity="false">
+      <appender-ref ref="RollingFile"/>
+    </logger>>
+
+    <root level="error">
+      <appender-ref ref="STDOUT"/>
+    </root>
+  </loggers>
+
+</configuration>
\ No newline at end of file



---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org