You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rg...@apache.org on 2013/01/15 20:03:51 UTC
svn commit: r1433581 - in /logging/log4j/log4j2/trunk:
core/src/main/java/org/apache/logging/log4j/core/appender/
core/src/main/java/org/apache/logging/log4j/core/net/
core/src/test/java/org/apache/logging/log4j/core/appender/ flume-ng/
samples/flume-c...
Author: rgoers
Date: Tue Jan 15 19:03:50 2013
New Revision: 1433581
URL: http://svn.apache.org/viewvc?rev=1433581&view=rev
Log:
LOG4J2-149 - SMTPAppender will only cache filtered events.
Added:
logging/log4j/log4j2/trunk/samples/flume-common/src/main/java/org/apache/logging/log4j/samples/app/LoggingApp.java
- copied, changed from r1431786, logging/log4j/log4j2/trunk/samples/flume-common/src/main/java/org/apache/logging/log4j/samples/app/LoggingController.java
Modified:
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/SMTPAppender.java
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/net/SMTPManager.java
logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/appender/SMTPAppenderTest.java
logging/log4j/log4j2/trunk/flume-ng/pom.xml
logging/log4j/log4j2/trunk/src/changes/changes.xml
Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/SMTPAppender.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/SMTPAppender.java?rev=1433581&r1=1433580&r2=1433581&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/SMTPAppender.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/SMTPAppender.java Tue Jan 15 19:03:50 2013
@@ -146,8 +146,11 @@ public class SMTPAppender extends Abstra
*/
@Override
public boolean isFiltered(final LogEvent event) {
- manager.add(event);
- return super.isFiltered(event);
+ final boolean filtered = super.isFiltered(event);
+ if(filtered) {
+ manager.add(event);
+ }
+ return filtered;
}
/**
@@ -156,6 +159,6 @@ public class SMTPAppender extends Abstra
* sent.
*/
public void append(final LogEvent event) {
- manager.sendEvents(getLayout());
+ manager.sendEvents(getLayout(), event);
}
}
\ No newline at end of file
Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/net/SMTPManager.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/net/SMTPManager.java?rev=1433581&r1=1433580&r2=1433581&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/net/SMTPManager.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/net/SMTPManager.java Tue Jan 15 19:03:50 2013
@@ -123,13 +123,15 @@ public class SMTPManager extends Abstrac
/**
* Send the contents of the cyclic buffer as an e-mail message.
+ * @param appendEvent
*/
- public void sendEvents(final Layout<?> layout) {
+ public void sendEvents(final Layout<?> layout, final LogEvent appendEvent) {
if (message == null) {
connect();
}
try {
- final byte[] rawBytes = formatContentToBytes(buffer, layout);
+ final LogEvent[] priorEvents = buffer.removeAll();
+ final byte[] rawBytes = formatContentToBytes(priorEvents, appendEvent, layout);
final String contentType = layout.getContentType();
final String encoding = getEncoding(rawBytes, contentType);
@@ -151,16 +153,16 @@ public class SMTPManager extends Abstrac
}
}
- protected byte[] formatContentToBytes(final CyclicBuffer<LogEvent> cb, final Layout<?> layout) throws IOException {
+ protected byte[] formatContentToBytes(final LogEvent[] priorEvents, final LogEvent appendEvent, final Layout<?> layout) throws IOException {
final ByteArrayOutputStream raw = new ByteArrayOutputStream();
- writeContent(cb, layout, raw);
+ writeContent(priorEvents, appendEvent, layout, raw);
return raw.toByteArray();
}
- private void writeContent(final CyclicBuffer<LogEvent> cb, final Layout<?> layout, final ByteArrayOutputStream out)
+ private void writeContent(final LogEvent[] priorEvents, final LogEvent appendEvent, final Layout<?> layout, final ByteArrayOutputStream out)
throws IOException {
writeHeader(layout, out);
- writeBuffer(cb, layout, out);
+ writeBuffer(priorEvents, appendEvent, layout, out);
writeFooter(layout, out);
}
@@ -171,12 +173,14 @@ public class SMTPManager extends Abstrac
}
}
- protected void writeBuffer(final CyclicBuffer<LogEvent> cb, final Layout<?> layout, final OutputStream out) throws IOException {
- final LogEvent[] events = cb.removeAll();
- for (final LogEvent event : events) {
- final byte[] bytes = layout.toByteArray(event);
+ protected void writeBuffer(final LogEvent[] priorEvents, final LogEvent appendEvent, final Layout<?> layout, final OutputStream out) throws IOException {
+ for (final LogEvent priorEvent : priorEvents) {
+ final byte[] bytes = layout.toByteArray(priorEvent);
out.write(bytes);
}
+
+ final byte[] bytes = layout.toByteArray(appendEvent);
+ out.write(bytes);
}
protected void writeFooter(final Layout<?> layout, final OutputStream out) throws IOException {
Modified: logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/appender/SMTPAppenderTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/appender/SMTPAppenderTest.java?rev=1433581&r1=1433580&r2=1433581&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/appender/SMTPAppenderTest.java (original)
+++ logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/appender/SMTPAppenderTest.java Tue Jan 15 19:03:50 2013
@@ -144,6 +144,7 @@ public class SMTPAppenderTest {
root.debug("Debug message #1");
root.debug("Debug message #2");
root.debug("Debug message #3");
+ root.debug("Debug message #4");
root.error("Error with exception", new RuntimeException("Exception message"));
server.stop();
@@ -162,6 +163,7 @@ public class SMTPAppenderTest {
assertFalse(body.contains("Debug message #1"));
assertTrue(body.contains("Debug message #2"));
assertTrue(body.contains("Debug message #3"));
+ assertTrue(body.contains("Debug message #4"));
assertTrue(body.contains("Error with exception"));
assertTrue(body.contains("RuntimeException"));
assertTrue(body.contains("Exception message"));
Modified: logging/log4j/log4j2/trunk/flume-ng/pom.xml
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/flume-ng/pom.xml?rev=1433581&r1=1433580&r2=1433581&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/flume-ng/pom.xml (original)
+++ logging/log4j/log4j2/trunk/flume-ng/pom.xml Tue Jan 15 19:03:50 2013
@@ -32,7 +32,7 @@
<log4jParentDir>${basedir}/..</log4jParentDir>
<docLabel>Flume Documentation</docLabel>
<projectDir>/flume-ng</projectDir>
- <flumeVersion>1.2.0</flumeVersion>
+ <flumeVersion>1.3.1</flumeVersion>
</properties>
<dependencies>
<dependency>
Copied: logging/log4j/log4j2/trunk/samples/flume-common/src/main/java/org/apache/logging/log4j/samples/app/LoggingApp.java (from r1431786, logging/log4j/log4j2/trunk/samples/flume-common/src/main/java/org/apache/logging/log4j/samples/app/LoggingController.java)
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/samples/flume-common/src/main/java/org/apache/logging/log4j/samples/app/LoggingApp.java?p2=logging/log4j/log4j2/trunk/samples/flume-common/src/main/java/org/apache/logging/log4j/samples/app/LoggingApp.java&p1=logging/log4j/log4j2/trunk/samples/flume-common/src/main/java/org/apache/logging/log4j/samples/app/LoggingController.java&r1=1431786&r2=1433581&rev=1433581&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/samples/flume-common/src/main/java/org/apache/logging/log4j/samples/app/LoggingController.java (original)
+++ logging/log4j/log4j2/trunk/samples/flume-common/src/main/java/org/apache/logging/log4j/samples/app/LoggingApp.java Tue Jan 15 19:03:50 2013
@@ -16,41 +16,41 @@
*/
package org.apache.logging.log4j.samples.app;
-import java.util.List;
-import java.util.Random;
-
-import javax.servlet.http.HttpServletRequest;
-
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.ThreadContext;
import org.apache.logging.log4j.samples.dto.AuditEvent;
import org.apache.logging.log4j.samples.dto.RequestContext;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.servlet.ModelAndView;
+import java.util.List;
+import java.util.Random;
/**
- * The Class LoggingController.
+ * The Class LoggingApp.
*/
-@Controller
-public class LoggingController {
+public class LoggingApp {
/**
* The logger.
*/
- private static Logger logger = LogManager.getLogger(LoggingController.class);
+ private static Logger logger = LogManager.getLogger(LoggingApp.class);
- private volatile boolean generateLog = false;
private Random ran = new Random();
private List<AuditEvent> events;
- public LoggingController() {
+ public static void main(String[] args) {
+ String member = "fakemember";
+ if (args.length == 1) {
+ member = args[0];
+ }
+ LoggingApp app = new LoggingApp(member);
+ app.runApp(member);
+ System.out.println("Job ended");
+ }
+
+ public LoggingApp(String member) {
ThreadContext.clear();
@@ -61,64 +61,82 @@ public class LoggingController {
RequestContext.setProductVersion("4.18.1");
RequestContext.setLocale("en_US");
RequestContext.setRegion("prod");
- }
-
- @RequestMapping(value = "/start.do", method = RequestMethod.GET)
- public ModelAndView startLogging(
- @RequestParam(value = "member", required = false, defaultValue = "fakemember") final String member,
- HttpServletRequest servletRequest) {
-
- System.out.println("STARTING..................");
if (events == null) {
events = MockEventsSupplier.getAllEvents(member);
}
+ }
- generateLog = true;
+ public void runApp(String member) {
+ Worker worker = new Worker(member);
+ worker.start();
+ sleep(30000);
+ worker.shutdown();
+ sleep(5000);
+ }
- (new Thread() {
+ private void sleep(long millis) {
+ try {
+ Thread.sleep(millis);
+ } catch (InterruptedException ie) {
+ //
+ }
+ }
- public void run() {
- while (generateLog) {
- // Generate rand number between 1 to 10
- int rand = ran.nextInt(9) + 1;
-
- // Sleep for rand seconds
- try {
- Thread.sleep(rand * 1000);
- } catch (InterruptedException e) {
- logger.warn("WARN", e);
- }
- // Write rand number of logs
- for (int i = 0; i < rand; i++) {
- int eventIndex = (Math.abs(ran.nextInt())) % events.size();
- AuditEvent event = events.get(eventIndex);
- RequestContext.setUserId(member);
- event.logEvent();
-
- if ((rand % 4) == 1) {
- logger.debug("DEBUG level logging.....");
- } else if ((rand % 4) == 2) {
- logger.info("INFO level logging.....");
- } else if ((rand % 4) == 3) {
- logger.warn("WARN level logging.....");
- } else {
- logger.error("ERROR level logging.....");
- }
- }
+ public class Worker extends Thread {
+
+ private final String member;
+
+ private boolean shutdown = false;
+
+ public Worker(String member) {
+ this.member = member;
+ }
+
+ public void run() {
+ System.out.println("STARTING..................");
+ while (!shutdown) {
+ // Generate rand number between 1 to 10
+ int rand = ran.nextInt(9) + 1;
+
+ // Sleep for rand seconds
+ try {
+ Thread.sleep(rand * 1000);
+ } catch (InterruptedException e) {
+ logger.warn("WARN", e);
}
- }
- }).start();
- return new ModelAndView("start.jsp");
- }
+ // Write rand number of logs
+ for (int i = 0; i < rand; i++) {
+ int eventIndex = (Math.abs(ran.nextInt())) % events.size();
+ AuditEvent event = events.get(eventIndex);
+ RequestContext.setUserId(member);
+ event.logEvent();
+
+ if ((rand % 4) == 1) {
+ logger.debug("DEBUG level logging.....");
+ } else if ((rand % 4) == 2) {
+ logger.info("INFO level logging.....");
+ } else if ((rand % 4) == 3) {
+ logger.warn("WARN level logging.....");
+ } else {
+ logger.error("ERROR level logging.....");
+ }
+ }
- @RequestMapping(value = "/stop.do", method = RequestMethod.GET)
- public ModelAndView stopLogging(HttpServletRequest servletRequest) {
- generateLog = false;
- return new ModelAndView("stop.jsp");
- }
+ }
+ }
+ public void shutdown() {
+ this.shutdown = true;
+ try {
+ this.join();
+ } catch (InterruptedException ie) {
+ //
+ }
+ System.out.println("SHUTDOWN.......................");
+ }
+ }
}
Modified: logging/log4j/log4j2/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/src/changes/changes.xml?rev=1433581&r1=1433580&r2=1433581&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/src/changes/changes.xml (original)
+++ logging/log4j/log4j2/trunk/src/changes/changes.xml Tue Jan 15 19:03:50 2013
@@ -23,6 +23,9 @@
<body>
<release version="2.0-beta4" date="TBD" description="Bug fixes and enhancements">
+ <action issue="LOG4J2-149" dev="rgoers" type="fix">
+ SMTPAppender will only cache filtered events.
+ </action>
<action issue="LOG4J2-145" dev="ggregory" type="fix">
Add missing serial version IDs.
</action>