Index: src/main/java/org/apache/logging/log4j/core/appender/rolling/EventBasedTriggeringPolicy.java
===================================================================
--- src/main/java/org/apache/logging/log4j/core/appender/rolling/EventBasedTriggeringPolicy.java	(revision 0)
+++ src/main/java/org/apache/logging/log4j/core/appender/rolling/EventBasedTriggeringPolicy.java	(working copy)
@@ -0,0 +1,51 @@
+package org.apache.logging.log4j.core.appender.rolling;
+
+import java.util.EventListener;
+
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.appender.rolling.event.RolloverEvent;
+import org.apache.logging.log4j.core.config.plugins.Plugin;
+import org.apache.logging.log4j.core.config.plugins.PluginFactory;
+
+
+/**
+ * Triggers a rollover when a event has been fired
+ *
+ */
+@Plugin(name = "EventBasedTriggeringPolicy", category = "Core", printObject = true)
+public class EventBasedTriggeringPolicy implements TriggeringPolicy, EventListener {
+
+	private RollingFileManager manager;
+
+	//TODO - Change
+	public static boolean eventFired = false;
+	
+	
+	@Override
+	public void initialize(RollingFileManager manager) {
+		this.manager = manager;
+	}
+	
+	public void rolloverEventFired(RolloverEvent event) {
+		eventFired = true;
+	}
+
+	/**
+	 * Checks if a triggering event has occured
+	 * and resets the eventFired flag.
+	 * @param event
+	 * @return
+	 */
+	@Override
+	public boolean isTriggeringEvent(LogEvent event) {
+		boolean eventHasBeenTriggered = (eventFired == true);
+		eventFired = false; 
+		return eventHasBeenTriggered;
+	}
+	
+	@PluginFactory
+	public static EventBasedTriggeringPolicy createPolicy() {
+		return new EventBasedTriggeringPolicy();
+	}
+
+}
Index: src/main/java/org/apache/logging/log4j/core/appender/rolling/event/RolloverEvent.java
===================================================================
--- src/main/java/org/apache/logging/log4j/core/appender/rolling/event/RolloverEvent.java	(revision 0)
+++ src/main/java/org/apache/logging/log4j/core/appender/rolling/event/RolloverEvent.java	(working copy)
@@ -0,0 +1,11 @@
+package org.apache.logging.log4j.core.appender.rolling.event;
+
+import java.io.Serializable;
+
+/**
+ * An event to trigger a rollover.
+ *
+ */
+public class RolloverEvent implements Serializable {
+
+}
Index: src/test/java/org/apache/logging/log4j/core/appender/rolling/EventBasedTriggeringPolicyTest.java
===================================================================
--- src/test/java/org/apache/logging/log4j/core/appender/rolling/EventBasedTriggeringPolicyTest.java	(revision 0)
+++ src/test/java/org/apache/logging/log4j/core/appender/rolling/EventBasedTriggeringPolicyTest.java	(working copy)
@@ -0,0 +1,55 @@
+
+package org.apache.logging.log4j.core.appender.rolling;
+
+import java.io.ByteArrayOutputStream;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.appender.rolling.event.RolloverEvent;
+import org.apache.logging.log4j.core.impl.Log4jLogEvent;
+import org.apache.logging.log4j.message.SimpleMessage;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Test of Event Based Triggering Policy
+ * @author karun
+ *
+ */
+public class EventBasedTriggeringPolicyTest {
+
+    @Test
+    public void testPolicy() {
+        EventBasedTriggeringPolicy policy = EventBasedTriggeringPolicy.createPolicy();
+        final MyRollingManager manager = new MyRollingManager(policy, null);
+        final LogEvent event = new Log4jLogEvent(null, null, null, Level.ERROR, new SimpleMessage("Test"), null);
+        assertTrue("Expected trigger not to fire", !policy.isTriggeringEvent(event));
+        policy.rolloverEventFired(new RolloverEvent());
+        assertTrue("Expected trigger to succeed", policy.isTriggeringEvent(event));
+        
+        policy = EventBasedTriggeringPolicy.createPolicy();
+        policy.initialize(manager);
+        assertTrue("Expected trigger not to fire", !policy.isTriggeringEvent(event));
+
+    }
+
+    private class MyRollingManager extends RollingFileManager {
+
+        private long timestamp;
+
+        public MyRollingManager(final TriggeringPolicy policy, final RolloverStrategy strategy) {
+            super("testfile", "target/rolling1/test1-%i.log.gz", new ByteArrayOutputStream(),
+                false, 0, System.currentTimeMillis(), policy, strategy, null, null, 8192);
+        }
+
+        public void setFileTime(final long timestamp) {
+            this.timestamp = timestamp;
+        }
+
+        @Override
+        public long getFileTime() {
+            return timestamp;
+        }
+    }
+}
