Index: src/main/java/org/apache/log4j/rolling/RollingFileAppender.java
===================================================================
--- src/main/java/org/apache/log4j/rolling/RollingFileAppender.java	(revision 1102345)
+++ src/main/java/org/apache/log4j/rolling/RollingFileAppender.java	(working copy)
@@ -283,15 +283,17 @@
                 }
               }
             } else {
-              Writer newWriter =
-                createWriter(
-                  new FileOutputStream(
-                    rollover.getActiveFileName(), rollover.getAppend()));
-              closeWriter();
-              setFile(rollover.getActiveFileName());
-              this.qw = createQuietWriter(newWriter);
+	          File file = new File( rollover.getActiveFileName() );
+	          File parent = file.getParentFile();
+	          if ( parent != null && !parent.exists() ) {
+		        parent.mkdirs();
+	          }
+	          Writer newWriter = createWriter( new FileOutputStream( file, rollover.getAppend() ) );
+	          closeWriter();
+	          setFile( rollover.getActiveFileName() );
+	          this.qw = createQuietWriter( newWriter );
 
-              boolean success = true;
+	          boolean success = true;
 
               if (rollover.getSynchronous() != null) {
                 success = false;
Index: src/test/java/org/apache/log4j/rolling/TimeBasedRollingTest.java
===================================================================
--- src/test/java/org/apache/log4j/rolling/TimeBasedRollingTest.java	(revision 1102345)
+++ src/test/java/org/apache/log4j/rolling/TimeBasedRollingTest.java	(working copy)
@@ -416,6 +416,51 @@
     assertTrue(compare(filenames[3], "witness/rolling/tbr-test6.3"));
   }
 
+	/**
+   * Test rolling without compression, activeFileName left blank, no stop/start but directory based filename.
+   */
+  public void test7() throws Exception {
+    PatternLayout layout = new PatternLayout("%c{1} - %m%n");
+    RollingFileAppender rfa = new RollingFileAppender();
+    rfa.setLayout(layout);
+
+    String datePattern = "mm'/'ss";
+
+    TimeBasedRollingPolicy tbrp = new TimeBasedRollingPolicy();
+    tbrp.setFileNamePattern("%d{mm}/%d{ss}/test7.log");
+    tbrp.activateOptions();
+    rfa.setRollingPolicy(tbrp);
+    rfa.activateOptions();
+    logger.addAppender(rfa);
+
+    SimpleDateFormat sdf = new SimpleDateFormat(datePattern);
+    String[] filenames = new String[4];
+
+    Calendar cal = Calendar.getInstance();
+
+    for (int i = 0; i < 4; i++) {
+      filenames[i] =  sdf.format(cal.getTime()) + "/test7.log";
+      cal.add(Calendar.SECOND, 1);
+    }
+
+    System.out.println("Waiting until next second and 100 millis.");
+    delayUntilNextSecond(100);
+    System.out.println("Done waiting.");
+
+    for (int i = 0; i < 5; i++) {
+      logger.debug("Hello---" + i);
+      Thread.sleep(500);
+    }
+
+    for (int i = 0; i < 4; i++) {
+      //System.out.println(i + " expected filename [" + filenames[i] + "].");
+    }
+
+    for (int i = 0; i < 4; i++) {
+      assertTrue(compare(filenames[i], "witness/rolling/tbr-test1." + i));
+    }
+  }
+
   public void testWithJoran1() throws Exception {
     configure("./input/rolling/time1.xml");
 
