Author: chetanm
Date: Tue Feb 25 08:56:06 2014
New Revision: 1571618

URL: http://svn.apache.org/r1571618
Log:
SLING-3364 - All rotated log files are not made part of the zip provided 
through webconsole

Added support which uses logic similar to one used in earlier Sling Log 
implementations whereby rotated files present in same directory would be 
included

Modified:
    
sling/trunk/bundles/commons/log/src/main/java/org/apache/sling/commons/log/logback/internal/SlingConfigurationPrinter.java

Modified: 
sling/trunk/bundles/commons/log/src/main/java/org/apache/sling/commons/log/logback/internal/SlingConfigurationPrinter.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/commons/log/src/main/java/org/apache/sling/commons/log/logback/internal/SlingConfigurationPrinter.java?rev=1571618&r1=1571617&r2=1571618&view=diff
==============================================================================
--- 
sling/trunk/bundles/commons/log/src/main/java/org/apache/sling/commons/log/logback/internal/SlingConfigurationPrinter.java
 (original)
+++ 
sling/trunk/bundles/commons/log/src/main/java/org/apache/sling/commons/log/logback/internal/SlingConfigurationPrinter.java
 Tue Feb 25 08:56:06 2014
@@ -20,6 +20,7 @@ package org.apache.sling.commons.log.log
 
 import java.io.File;
 import java.io.FileReader;
+import java.io.FilenameFilter;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.net.MalformedURLException;
@@ -30,6 +31,7 @@ import java.util.List;
 import ch.qos.logback.classic.spi.ILoggingEvent;
 import ch.qos.logback.core.Appender;
 import ch.qos.logback.core.FileAppender;
+import ch.qos.logback.core.rolling.RollingFileAppender;
 import ch.qos.logback.core.status.Status;
 import ch.qos.logback.core.util.CachingDateFormatter;
 
@@ -38,7 +40,7 @@ import ch.qos.logback.core.util.CachingD
  * plugin to display the currently configured log files.
  */
 public class SlingConfigurationPrinter {
-    private final CachingDateFormatter SDF = new 
CachingDateFormatter("yyyy-MM-dd HH:mm:ss");
+    private static final CachingDateFormatter SDF = new 
CachingDateFormatter("yyyy-MM-dd HH:mm:ss");
     private final LogbackManager logbackManager;
 
     public SlingConfigurationPrinter(LogbackManager logbackManager) {
@@ -73,7 +75,7 @@ public class SlingConfigurationPrinter {
                         if (fr != null) {
                             try {
                                 fr.close();
-                            } catch (IOException ignoreCloseException) {
+                            } catch (IOException ignored) {
                             }
                         }
                     }
@@ -84,8 +86,10 @@ public class SlingConfigurationPrinter {
     }
 
     /**
-     * TODO Need to see how to implement this with LogBack as we cannot get
-     * information about all rolled over policy
+     * Attempts to determine all log files created even via rotation.
+     * if some complex rotation logic is used where rotated file get different 
names
+     * or get created in different directory then those files would not be
+     * included
      * 
      * @see 
org.apache.felix.webconsole.AttachmentProvider#getAttachments(String)
      */
@@ -97,15 +101,7 @@ public class SlingConfigurationPrinter {
             LogbackManager.LoggerStateContext ctx = 
logbackManager.determineLoggerState();
             for (Appender<ILoggingEvent> appender : ctx.getAllAppenders()) {
                 if (appender instanceof FileAppender) {
-                    final File file = new File(((FileAppender) 
appender).getFile());
-                    // TODO With LogBack there is no straightforward way to get
-                    // information
-                    // about rolled over files
-                    // final File[] files =
-                    // 
writer.getFileRotator().getRotatedFiles(writer.getFile());
-                    final File[] files = new File[] {
-                        file
-                    };
+                    final File[] files = getRotatedFiles((FileAppender) 
appender);
                     for (File f : files) {
                         try {
                             urls.add(f.toURI().toURL());
@@ -122,7 +118,28 @@ public class SlingConfigurationPrinter {
         return null;
     }
 
-    private void dumpLogbackStatus(LogbackManager logbackManager, PrintWriter 
pw) {
+    private static File[] getRotatedFiles(FileAppender app) {
+        final File file = new File(app.getFile());
+
+        //If RollingFileAppender then make an attempt to list files
+        //This might not work in all cases if complex rolling patterns
+        //are used in Logback
+        if (app instanceof RollingFileAppender) {
+            final File dir = file.getParentFile();
+            final String baseName = file.getName();
+            return dir.listFiles(new FilenameFilter() {
+                public boolean accept(File dir, String name) {
+                    return name.startsWith(baseName);
+                }
+            });
+        }
+
+        //Not a RollingFileAppender then just return the actual file
+        return new File[]{file};
+    }
+
+    @SuppressWarnings("ThrowableResultOfMethodCallIgnored")
+    private static void dumpLogbackStatus(LogbackManager logbackManager, 
PrintWriter pw) {
         List<Status> statusList = 
logbackManager.getStatusManager().getCopyOfStatusList();
         pw.println("Logback Status");
         pw.println("--------------------------------------------------");


Reply via email to