logback-dev
Threads by month
- ----- 2026 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- 9940 discussions
[JIRA] Created: (LBSITE-19) name-attribute is *not* mentioned in your CounterBasedEvaluator example
by Ceki Gulcu (JIRA) 27 Dec '08
by Ceki Gulcu (JIRA) 27 Dec '08
27 Dec '08
name-attribute is *not* mentioned in your CounterBasedEvaluator example
-----------------------------------------------------------------------
Key: LBSITE-19
URL: http://jira.qos.ch/browse/LBSITE-19
Project: logback-site
Issue Type: Bug
Affects Versions: 0.9.9
Reporter: Ceki Gulcu
Assignee: Ceki Gulcu
Fix For: 0.9.10
See http://www.qos.ch/pipermail/logback-user/2008-October/000661.html
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.qos.ch/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
1
4
Author: ceki
Date: Sat Dec 27 16:55:34 2008
New Revision: 2105
Added:
logback/trunk/logback-classic/src/test/input/joran/smtp/
logback/trunk/logback-classic/src/test/input/joran/smtp/customEvaluator.xml
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/CounterBasedEvaluator.java
logback/trunk/logback-examples/src/main/java/chapter6/GoMDC.java
- copied unchanged from r1945, /logback/trunk/logback-examples/src/main/java/chapter5/GoMDC.java
logback/trunk/logback-examples/src/main/java/chapter6/mdcfilter.xml
- copied unchanged from r2104, /logback/trunk/logback-examples/src/main/java/chapter5/mdcfilter.xml
Removed:
logback/trunk/logback-examples/src/main/java/chapter5/GoMDC.java
logback/trunk/logback-examples/src/main/java/chapter5/mdcfilter.xml
Modified:
logback/trunk/logback-access/src/main/java/ch/qos/logback/access/joran/JoranConfigurator.java
logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/boolex/OnErrorEvaluator.java
logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/joran/JoranConfigurator.java
logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/net/SMTPAppender.java
logback/trunk/logback-classic/src/test/input/joran/simpleEvaluator.xml
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/joran/EvaluatorJoranTest.java
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/SMTPAppender_GreenTest.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/filter/EvaluatorFilter.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/AbstractEventEvaluatorAction.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/net/SMTPAppenderBase.java
logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-Console.xml
logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-JMSQueue.xml
logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-JMSTopic.xml
logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-PrudentTimeBasedRolling.xml
logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-RollingFixedWindow.xml
logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-RollingSizeBased.xml
logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-RollingTimeBased.xml
logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-fileAppender.xml
logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-syslog.xml
logback/trunk/logback-examples/src/main/java/chapter4/db/append-toMySQL-with-datasource-and-pooling.xml
logback/trunk/logback-examples/src/main/java/chapter4/db/append-toMySQL-with-driverManager.xml
logback/trunk/logback-examples/src/main/java/chapter4/db/append-with-datasource.xml
logback/trunk/logback-examples/src/main/java/chapter4/mail/gmailSSL.xml
logback/trunk/logback-examples/src/main/java/chapter4/mail/gmailSTARTTLS.xml
logback/trunk/logback-examples/src/main/java/chapter4/mail/mail1.xml
logback/trunk/logback-examples/src/main/java/chapter4/socket/client1.xml
logback/trunk/logback-examples/src/main/java/chapter5/callerEvaluatorConfig.xml
logback/trunk/logback-examples/src/main/java/chapter5/exceptionEvaluatorConfig.xml
logback/trunk/logback-examples/src/main/java/chapter5/mySampleConverterConfig.xml
logback/trunk/logback-examples/src/main/java/chapter5/sampleLayoutConfig.xml
logback/trunk/logback-examples/src/main/java/chapter5/sampleLayoutConfig2.xml
logback/trunk/logback-site/src/site/pages/dependencies.html
logback/trunk/logback-site/src/site/pages/documentation.html
logback/trunk/logback-site/src/site/pages/manual/appenders.html
logback/trunk/logback-site/src/site/pages/manual/layouts.html
logback/trunk/logback-site/src/site/pages/support.html
logback/trunk/logback-site/src/site/resources/logback.ppt
Log:
- cleaned up config files so that "level" is an XML attribute and not
an XML element
- updated Gmail related examples
- LBCLASSIC-100
Evaluators are now wired into an appender automatically (implicit
rules) without the help of EvaluatorAction. EvaluatorAction is now
only needed for global evaluator elements.
It follows that name attribute is necessary only for global
evaluators. Embedded evaluators no longer need a name.
EvaluatorAction has been modified to accept evaluators of any type
and not just JaninoEvaluators.
Modified: logback/trunk/logback-access/src/main/java/ch/qos/logback/access/joran/JoranConfigurator.java
==============================================================================
--- logback/trunk/logback-access/src/main/java/ch/qos/logback/access/joran/JoranConfigurator.java (original)
+++ logback/trunk/logback-access/src/main/java/ch/qos/logback/access/joran/JoranConfigurator.java Sat Dec 27 16:55:34 2008
@@ -38,7 +38,7 @@
rs.addRule(new Pattern("configuration/appender/sift"), new SiftAction());
rs.addRule(new Pattern("configuration/appender/sift/*"), new NOPAction());
- rs.addRule(new Pattern("*/evaluator"), new EvaluatorAction());
+ rs.addRule(new Pattern("configuration/evaluator"), new EvaluatorAction());
}
Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/boolex/OnErrorEvaluator.java
==============================================================================
--- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/boolex/OnErrorEvaluator.java (original)
+++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/boolex/OnErrorEvaluator.java Sat Dec 27 16:55:34 2008
@@ -14,8 +14,19 @@
import ch.qos.logback.core.boolex.EvaluationException;
import ch.qos.logback.core.boolex.EventEvaluatorBase;
+/**
+ * Evaluates to true when the logging event passed as parameter has level ERROR
+ * or higher.
+ *
+ * @author Ceki Gülcü
+ *
+ */
public class OnErrorEvaluator extends EventEvaluatorBase<LoggingEvent> {
+ /**
+ * Return true if event passed as parameter has level ERROR or higher, returns
+ * false otherwise.
+ */
public boolean evaluate(LoggingEvent event) throws NullPointerException,
EvaluationException {
return event.getLevel().levelInt >= Level.ERROR_INT;
Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/joran/JoranConfigurator.java
==============================================================================
--- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/joran/JoranConfigurator.java (original)
+++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/joran/JoranConfigurator.java Sat Dec 27 16:55:34 2008
@@ -48,7 +48,7 @@
rs.addRule(new Pattern("configuration/contextName"), new ContextNameAction());
rs.addRule(new Pattern("configuration/insertFromJNDI"), new InsertFromJNDIAction());
- rs.addRule(new Pattern("*/evaluator"), new EvaluatorAction());
+ rs.addRule(new Pattern("configuration/evaluator"), new EvaluatorAction());
rs.addRule(new Pattern("configuration/appender/sift"), new SiftAction());
rs.addRule(new Pattern("configuration/appender/sift/*"), new NOPAction());
Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/net/SMTPAppender.java
==============================================================================
--- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/net/SMTPAppender.java (original)
+++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/net/SMTPAppender.java Sat Dec 27 16:55:34 2008
@@ -11,7 +11,7 @@
package ch.qos.logback.classic.net;
import ch.qos.logback.classic.PatternLayout;
-import ch.qos.logback.classic.boolex.JaninoEventEvaluator;
+import ch.qos.logback.classic.boolex.OnErrorEvaluator;
import ch.qos.logback.classic.spi.LoggingEvent;
import ch.qos.logback.core.Layout;
import ch.qos.logback.core.boolex.EventEvaluator;
@@ -33,7 +33,6 @@
// value "%logger{20} - %m" is referenced in the docs!
static final String DEFAULT_SUBJECT_PATTERN = "%logger{20} - %m";
- static final String DEFAULT_EVALUATOR_EXPRESSION = "level >= ERROR";
private int bufferSize = 512;
protected CyclicBuffer<LoggingEvent> cb = new CyclicBuffer<LoggingEvent>(bufferSize);
@@ -49,12 +48,11 @@
public void start() {
if (eventEvaluator == null) {
- JaninoEventEvaluator jee = new JaninoEventEvaluator();
- jee.setContext(getContext());
- jee.setExpression(DEFAULT_EVALUATOR_EXPRESSION);
- jee.setName("SMTPAppender's default event evaluator");
- jee.start();
- this.eventEvaluator = jee;
+ OnErrorEvaluator onError = new OnErrorEvaluator();
+ onError.setContext(getContext());
+ onError.setName("onError");
+ onError.start();
+ this.eventEvaluator = onError;
}
super.start();
}
Modified: logback/trunk/logback-classic/src/test/input/joran/simpleEvaluator.xml
==============================================================================
--- logback/trunk/logback-classic/src/test/input/joran/simpleEvaluator.xml (original)
+++ logback/trunk/logback-classic/src/test/input/joran/simpleEvaluator.xml Sat Dec 27 16:55:34 2008
@@ -1,22 +1,10 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE configuration>
-
<configuration>
-
<evaluator name="msgEval">
-
- <Expression>m.matches(message)</Expression>
-
- <matcher>
- <Name>m</Name>
- <regex>^hello.*</regex>
- <CaseSensitive>false</CaseSensitive>
- </matcher>
-
-
+ <Expression>m.matches(message)</Expression>
+ <matcher>
+ <Name>m</Name>
+ <regex>^hello.*</regex>
+ <CaseSensitive>false</CaseSensitive>
+ </matcher>
</evaluator>
-
-
-
</configuration>
-
\ No newline at end of file
Added: logback/trunk/logback-classic/src/test/input/joran/smtp/customEvaluator.xml
==============================================================================
--- (empty file)
+++ logback/trunk/logback-classic/src/test/input/joran/smtp/customEvaluator.xml Sat Dec 27 16:55:34 2008
@@ -0,0 +1,20 @@
+<configuration>
+
+ <appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
+ <SMTPHost>localhost</SMTPHost>
+ <SMTPPort>${port}</SMTPPort>
+ <To>nospam(a)qos.ch</To>
+ <From>user(a)host.dom</From>
+ <Subject>%logger - %m</Subject>
+ <evaluator class="ch.qos.logback.classic.net.CounterBasedEvaluator">
+ <limit>2</limit>
+ </evaluator>
+ <layout class="ch.qos.logback.classic.PatternLayout">
+ <Pattern>%message</Pattern>
+ </layout>
+ </appender>
+
+ <root level="debug">
+ <appender-ref ref="EMAIL" />
+ </root>
+</configuration>
Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/joran/EvaluatorJoranTest.java
==============================================================================
--- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/joran/EvaluatorJoranTest.java (original)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/joran/EvaluatorJoranTest.java Sat Dec 27 16:55:34 2008
@@ -60,18 +60,14 @@
jc.setContext(loggerContext);
jc.doConfigure(TeztConstants.TEST_DIR_PREFIX + "input/joran/ignore.xml");
- //StatusPrinter.print(loggerContext.getStatusManager());
-
Map evalMap = (Map) loggerContext.getObject(CoreConstants.EVALUATOR_MAP);
assertNotNull(evalMap);
- //StatusPrinter.print(loggerContext.getStatusManager());
Logger logger = loggerContext.getLogger("xx");
JaninoEventEvaluator evaluator = (JaninoEventEvaluator) evalMap.get("IGNORE_EVAL");
LoggingEvent event = new LoggingEvent("foo", logger, Level.DEBUG, "Hello world",null, null);
- //StatusPrinter.print(loggerContext.getStatusManager());
-
+
Marker ignoreMarker = MarkerFactory.getMarker("IGNORE");
event.setMarker(ignoreMarker);
assertTrue(evaluator.evaluate(event));
Added: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/CounterBasedEvaluator.java
==============================================================================
--- (empty file)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/CounterBasedEvaluator.java Sat Dec 27 16:55:34 2008
@@ -0,0 +1,72 @@
+/**
+ * Logback: the reliable, generic, fast and flexible logging framework.
+ *
+ * Copyright (C) 1999-2006, QOS.ch
+ *
+ * This library is free software, you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation.
+ */
+
+package ch.qos.logback.classic.net;
+
+import ch.qos.logback.core.boolex.EvaluationException;
+import ch.qos.logback.core.boolex.EventEvaluator;
+import ch.qos.logback.core.spi.ContextAwareBase;
+
+/**
+ * A simple EventEvaluator implementation that triggers email transmission after
+ * a given number of events occur, regardless of event level.
+ *
+ * <p>By default, the limit is 1024.
+ */
+public class CounterBasedEvaluator extends ContextAwareBase implements EventEvaluator {
+
+ static int DEFAULT_LIMIT = 1024;
+ int limit = DEFAULT_LIMIT;
+ int counter = 0;
+ String name;
+ boolean started;
+
+ public boolean evaluate(Object event) throws NullPointerException,
+ EvaluationException {
+ counter++;
+
+ if (counter == limit) {
+ counter = 0;
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public boolean isStarted() {
+ return started;
+ }
+
+ public void start() {
+ started = true;
+ }
+
+ public void stop() {
+ started = false;
+ }
+
+ public int getLimit() {
+ return limit;
+ }
+
+ public void setLimit(int limit) {
+ this.limit = limit;
+ }
+
+
+}
Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/SMTPAppender_GreenTest.java
==============================================================================
--- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/SMTPAppender_GreenTest.java (original)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/SMTPAppender_GreenTest.java Sat Dec 27 16:55:34 2008
@@ -4,6 +4,9 @@
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
+import java.io.IOException;
+
+import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
@@ -17,9 +20,12 @@
import ch.qos.logback.classic.PatternLayout;
import ch.qos.logback.classic.html.HTMLLayout;
import ch.qos.logback.classic.html.XHTMLEntityResolver;
+import ch.qos.logback.classic.joran.JoranConfigurator;
import ch.qos.logback.classic.spi.LoggingEvent;
+import ch.qos.logback.classic.util.TeztConstants;
import ch.qos.logback.core.CoreConstants;
import ch.qos.logback.core.Layout;
+import ch.qos.logback.core.joran.spi.JoranException;
import ch.qos.logback.core.testUtil.RandomUtil;
import com.icegreen.greenmail.util.GreenMail;
@@ -32,7 +38,8 @@
GreenMail greenMail;
SMTPAppender smtpAppender;
LoggerContext lc = new LoggerContext();
-
+ Logger logger = lc.getLogger(this.getClass());
+
static final String TEST_SUBJECT = "test subject";
static final String HEADER = "HEADER\n";
static final String FOOTER = "FOOTER\n";
@@ -43,8 +50,13 @@
ServerSetup.PROTOCOL_SMTP);
greenMail = new GreenMail(serverSetup);
greenMail.start();
- buildSMTPAppender();
}
+
+ @After
+ public void tearDown() throws Exception {
+ greenMail.stop();
+ }
+
void buildSMTPAppender() throws Exception {
smtpAppender = new SMTPAppender();
@@ -78,26 +90,28 @@
return layout;
}
- @After
- public void tearDown() throws Exception {
+
+
+ private MimeMultipart verify(String subject) throws MessagingException, IOException {
+ MimeMessage[] mma = greenMail.getReceivedMessages();
+ assertNotNull(mma);
+ assertEquals(1, mma.length);
+ MimeMessage mm = mma[0];
+ // http://jira.qos.ch/browse/LBCLASSIC-67
+ assertEquals(subject, mm.getSubject());
+ return (MimeMultipart) mm.getContent();
}
@Test
public void smoke() throws Exception {
+ buildSMTPAppender();
smtpAppender.setLayout(buildPatternLayout(lc));
smtpAppender.start();
- Logger logger = lc.getLogger("test");
logger.addAppender(smtpAppender);
logger.debug("hello");
logger.error("en error", new Exception("an exception"));
- MimeMessage[] mma = greenMail.getReceivedMessages();
- assertNotNull(mma);
- assertEquals(1, mma.length);
- MimeMessage mm = mma[0];
- // http://jira.qos.ch/browse/LBCLASSIC-67
- assertEquals(TEST_SUBJECT, mm.getSubject());
-
- MimeMultipart mp = (MimeMultipart) mm.getContent();
+
+ MimeMultipart mp = verify(TEST_SUBJECT);
String body = GreenMailUtil.getBody(mp.getBodyPart(0));
assertTrue(body.startsWith(HEADER.trim()));
assertTrue(body.endsWith(FOOTER.trim()));
@@ -105,26 +119,20 @@
@Test
public void html() throws Exception {
+ buildSMTPAppender();
smtpAppender.setLayout(buildHTMLLayout(lc));
smtpAppender.start();
- Logger logger = lc.getLogger("test");
logger.addAppender(smtpAppender);
logger.debug("hello");
logger.error("en error", new Exception("an exception"));
- MimeMessage[] mma = greenMail.getReceivedMessages();
- assertNotNull(mma);
- assertEquals(1, mma.length);
- MimeMessage mm = mma[0];
- assertEquals(TEST_SUBJECT, mm.getSubject());
-
- MimeMultipart mp = (MimeMultipart) mm.getContent();
-
+ MimeMultipart mp = verify(TEST_SUBJECT);
+
// verify strict adherence to xhtml1-strict.dtd
SAXReader reader = new SAXReader();
reader.setValidation(true);
reader.setEntityResolver(new XHTMLEntityResolver());
reader.read(mp.getBodyPart(0).getInputStream());
- // System.out.println(GreenMailUtil.getBody(mp.getBodyPart(0)));
+
}
@Test
@@ -132,26 +140,21 @@
* Checks that even when many events are processed, the output is still
* conforms to xhtml-strict.dtd.
*
- * Note that SMTPAppender only keeps only 500 or so (=buffer size)
- * events. So the generated output will be rather short.
+ * Note that SMTPAppender only keeps only 500 or so (=buffer size) events. So
+ * the generated output will be rather short.
*/
public void htmlLong() throws Exception {
+ buildSMTPAppender();
smtpAppender.setLayout(buildHTMLLayout(lc));
smtpAppender.start();
- Logger logger = lc.getLogger("test");
logger.addAppender(smtpAppender);
for (int i = 0; i < CoreConstants.TABLE_ROW_LIMIT * 3; i++) {
logger.debug("hello " + i);
}
logger.error("en error", new Exception("an exception"));
- MimeMessage[] mma = greenMail.getReceivedMessages();
- assertNotNull(mma);
- assertEquals(1, mma.length);
- MimeMessage mm = mma[0];
- assertEquals(TEST_SUBJECT, mm.getSubject());
-
- MimeMultipart mp = (MimeMultipart) mm.getContent();
-
+
+ MimeMultipart mp = verify(TEST_SUBJECT);
+
// verify strict adherence to xhtml1-strict.dtd
SAXReader reader = new SAXReader();
reader.setValidation(true);
@@ -159,4 +162,25 @@
reader.read(mp.getBodyPart(0).getInputStream());
}
+ private void configure(String file) throws JoranException {
+ JoranConfigurator jc = new JoranConfigurator();
+ jc.setContext(lc);
+ System.out.println("port="+port);
+ lc.putProperty("port", "" + port);
+ jc.doConfigure(file);
+ }
+
+ @Test
+ public void testCustomEvaluator() throws Exception {
+ configure(TeztConstants.TEST_DIR_PREFIX
+ + "input/joran/smtp/customEvaluator.xml");
+
+ logger.debug("hello");
+ String msg2 = "world";
+ logger.debug(msg2);
+ logger.debug("invisible");
+ MimeMultipart mp = verify(this.getClass().getName()+ " - "+msg2);
+ String body = GreenMailUtil.getBody(mp.getBodyPart(0));
+ assertEquals("helloworld", body);
+ }
}
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/filter/EvaluatorFilter.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/filter/EvaluatorFilter.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/filter/EvaluatorFilter.java Sat Dec 27 16:55:34 2008
@@ -5,41 +5,39 @@
import ch.qos.logback.core.spi.FilterReply;
/**
- * The value of the {@link #onMatch} and {@link #onMismatch} attributes is set to
- * {@link Filter.NEUTRAL}, so that a badly configured evaluator filter doesn't
- * disturb the functionning of the chain.
- * </p>
- * <p>
- * It is expected that one of the two attributes will have its value changed to
- * {@link Filter.ACCEPT} or {@link Filter.DENY}. That way, it is possible to decide if
- * a given result must be returned after the evaluation either failed or succeeded.
- * </p>
+ * The value of the {@link #onMatch} and {@link #onMismatch} attributes is set
+ * to {@link Filter.NEUTRAL}, so that a badly configured evaluator filter does
+ * not disturb the functioning of the filter chain.
*
- * For more information about filters, please refer to the online manual at
+ * <p>It is expected that one of the two attributes will have its value changed
+ * to {@link Filter.ACCEPT} or {@link Filter.DENY}. That way, it is possible to
+ * decide if a given result must be returned after the evaluation either failed
+ * or succeeded.
+ *
+ *
+ * <p> For more information about filters, please refer to the online manual at
* http://logback.qos.ch/manual/filters.html
*
* @author Ceki Gülcü
* @author Sébastien Pennec
*/
-
public class EvaluatorFilter<E> extends AbstractMatcherFilter<E> {
EventEvaluator<E> evaluator;
-
+
@Override
public void start() {
- if(evaluator != null) {
+ if (evaluator != null) {
super.start();
} else {
- addError("No evaluator set for filter "+this.getName());
+ addError("No evaluator set for filter " + this.getName());
}
}
-
+
public EventEvaluator<E> getEvaluator() {
return evaluator;
}
-
public void setEvaluator(EventEvaluator<E> evaluator) {
this.evaluator = evaluator;
}
@@ -47,7 +45,7 @@
public FilterReply decide(E event) {
// let us not throw an exception
// see also bug #17.
- if(!isStarted() || !evaluator.isStarted()) {
+ if (!isStarted() || !evaluator.isStarted()) {
return FilterReply.NEUTRAL;
}
try {
@@ -57,7 +55,7 @@
return onMismatch;
}
} catch (EvaluationException e) {
- addError("Evaluator "+evaluator.getName()+" threw an exception", e);
+ addError("Evaluator " + evaluator.getName() + " threw an exception", e);
return FilterReply.NEUTRAL;
}
}
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/AbstractEventEvaluatorAction.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/AbstractEventEvaluatorAction.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/AbstractEventEvaluatorAction.java Sat Dec 27 16:55:34 2008
@@ -16,7 +16,6 @@
import ch.qos.logback.core.CoreConstants;
import ch.qos.logback.core.boolex.EventEvaluator;
-import ch.qos.logback.core.filter.EvaluatorFilter;
import ch.qos.logback.core.joran.spi.InterpretationContext;
import ch.qos.logback.core.spi.LifeCycle;
import ch.qos.logback.core.util.OptionHelper;
@@ -63,11 +62,6 @@
evaluator.setContext(this.context);
evaluator.setName(evaluatorName);
- if (ec.getObjectStack().size() > 0
- && ec.peekObject() instanceof EvaluatorFilter) {
- ((EvaluatorFilter) ec.peekObject()).setEvaluator(evaluator);
- }
-
ec.pushObject(evaluator);
addInfo("Adding evaluator named [" + evaluatorName
+ "] to the object stack");
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/net/SMTPAppenderBase.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/net/SMTPAppenderBase.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/net/SMTPAppenderBase.java Sat Dec 27 16:55:34 2008
@@ -36,12 +36,8 @@
* An abstract class that provides support for sending events to an email
* address.
*
- * <p>
- * Authentication through plain user password is supported. Both STARTTLS and SSL are
- * also supported. Note that STARTTLS differs from SSL in that, in STARTTLS, the connection
- * is non-encrypted and only after the STARTTLS command is issued by the client
- * (if the server supports it) does the connection switch to SSL. In SSL mode, the connection
- * is SSL from the start.
+ * <p>See http://logback.qos.ch/manual/appenders.html#SMTPAppender for further
+ * documentation.
*
* @author Ceki Gülcü
* @author Sébastien Pennec
@@ -49,8 +45,6 @@
*/
public abstract class SMTPAppenderBase<E> extends AppenderBase<E> {
- // private final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
-
protected Layout<E> layout;
protected Layout<E> subjectLayout;
@@ -113,7 +107,7 @@
}
// props.put("mail.debug", "true");
-
+
Session session = Session.getInstance(props, loginAuthenticator);
msg = new MimeMessage(session);
@@ -161,9 +155,8 @@
/**
* This method determines if there is a sense in attempting to append.
*
- * <p>
- * It checks whether there is a set output target and also if there is a set
- * layout. If these checks fail, then the boolean value <code>false</code>
+ * <p> It checks whether there is a set output target and also if there is a
+ * set layout. If these checks fail, then the boolean value <code>false</code>
* is returned.
*/
public boolean checkEntryConditions() {
Modified: logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-Console.xml
==============================================================================
--- logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-Console.xml (original)
+++ logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-Console.xml Sat Dec 27 16:55:34 2008
@@ -7,8 +7,7 @@
</layout>
</appender>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
Modified: logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-JMSQueue.xml
==============================================================================
--- logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-JMSQueue.xml (original)
+++ logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-JMSQueue.xml Sat Dec 27 16:55:34 2008
@@ -12,8 +12,7 @@
<QueueBindingName>MyQueue</QueueBindingName>
</appender>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="Queue" />
</root>
</configuration>
\ No newline at end of file
Modified: logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-JMSTopic.xml
==============================================================================
--- logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-JMSTopic.xml (original)
+++ logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-JMSTopic.xml Sat Dec 27 16:55:34 2008
@@ -12,8 +12,7 @@
<TopicBindingName>MyTopic</TopicBindingName>
</appender>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="Topic" />
</root>
</configuration>
\ No newline at end of file
Modified: logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-PrudentTimeBasedRolling.xml
==============================================================================
--- logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-PrudentTimeBasedRolling.xml (original)
+++ logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-PrudentTimeBasedRolling.xml Sat Dec 27 16:55:34 2008
@@ -11,10 +11,9 @@
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</Pattern>
</layout>
- </appender>
+ </appender>
- <root>
- <level value="debug" />
- <appender-ref ref="FILE" />
- </root>
+ <root level="debug">
+ <appender-ref ref="FILE" />
+ </root>
</configuration>
\ No newline at end of file
Modified: logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-RollingFixedWindow.xml
==============================================================================
--- logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-RollingFixedWindow.xml (original)
+++ logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-RollingFixedWindow.xml Sat Dec 27 16:55:34 2008
@@ -15,8 +15,7 @@
</layout>
</appender>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="FILE" />
</root>
</configuration>
\ No newline at end of file
Modified: logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-RollingSizeBased.xml
==============================================================================
--- logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-RollingSizeBased.xml (original)
+++ logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-RollingSizeBased.xml Sat Dec 27 16:55:34 2008
@@ -17,8 +17,7 @@
</layout>
</appender>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="FILE" />
</root>
</configuration>
Modified: logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-RollingTimeBased.xml
==============================================================================
--- logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-RollingTimeBased.xml (original)
+++ logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-RollingTimeBased.xml Sat Dec 27 16:55:34 2008
@@ -12,8 +12,7 @@
</layout>
</appender>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="FILE" />
</root>
</configuration>
\ No newline at end of file
Modified: logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-fileAppender.xml
==============================================================================
--- logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-fileAppender.xml (original)
+++ logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-fileAppender.xml Sat Dec 27 16:55:34 2008
@@ -9,9 +9,7 @@
</layout>
</appender>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="FILE" />
</root>
-</configuration>
-
+</configuration>
\ No newline at end of file
Modified: logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-syslog.xml
==============================================================================
--- logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-syslog.xml (original)
+++ logback/trunk/logback-examples/src/main/java/chapter4/conf/logback-syslog.xml Sat Dec 27 16:55:34 2008
@@ -1,4 +1,3 @@
-<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="SYSLOG"
@@ -8,8 +7,7 @@
<SuffixPattern>%-4relative [%thread] %-5level - %msg</SuffixPattern>
</appender>
- <root>
- <level value="DEBUG" />
+ <root level="DEBUG">
<appender-ref ref="SYSLOG" />
</root>
</configuration>
Modified: logback/trunk/logback-examples/src/main/java/chapter4/db/append-toMySQL-with-datasource-and-pooling.xml
==============================================================================
--- logback/trunk/logback-examples/src/main/java/chapter4/db/append-toMySQL-with-datasource-and-pooling.xml (original)
+++ logback/trunk/logback-examples/src/main/java/chapter4/db/append-toMySQL-with-datasource-and-pooling.xml Sat Dec 27 16:55:34 2008
@@ -13,8 +13,7 @@
</connectionSource>
</appender>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="DB" />
</root>
</configuration>
\ No newline at end of file
Modified: logback/trunk/logback-examples/src/main/java/chapter4/db/append-toMySQL-with-driverManager.xml
==============================================================================
--- logback/trunk/logback-examples/src/main/java/chapter4/db/append-toMySQL-with-driverManager.xml (original)
+++ logback/trunk/logback-examples/src/main/java/chapter4/db/append-toMySQL-with-driverManager.xml Sat Dec 27 16:55:34 2008
@@ -11,8 +11,7 @@
</connectionSource>
</appender>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="DB" />
</root>
</configuration>
Modified: logback/trunk/logback-examples/src/main/java/chapter4/db/append-with-datasource.xml
==============================================================================
--- logback/trunk/logback-examples/src/main/java/chapter4/db/append-with-datasource.xml (original)
+++ logback/trunk/logback-examples/src/main/java/chapter4/db/append-with-datasource.xml Sat Dec 27 16:55:34 2008
@@ -20,8 +20,7 @@
</connectionSource>
</appender>
- <root>
- <level value ="debug"/>
+ <root level="debug">
<appender-ref ref="DB" />
</root>
</configuration>
Modified: logback/trunk/logback-examples/src/main/java/chapter4/mail/gmailSSL.xml
==============================================================================
--- logback/trunk/logback-examples/src/main/java/chapter4/mail/gmailSSL.xml (original)
+++ logback/trunk/logback-examples/src/main/java/chapter4/mail/gmailSSL.xml Sat Dec 27 16:55:34 2008
@@ -1,26 +1,22 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
<configuration>
<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
<SMTPHost>smtp.gmail.com</SMTPHost>
<SMTPPort>465</SMTPPort>
<SSL>true</SSL>
- <Username>USERNAME</Username>
- <Password>PASSWORD</Password>
-
+ <Username>YOUR_USERNAME(a)gmail.com</Username>
+ <Password>YOUR_GMAIL_PASSWORD</Password>
<To>EMAIL-DESTINATION</To>
- <To>ANOTHER_EMAIL_DESTINATION</To> <!-- a second destination is optional -->
- <From>SENDER-EMAIL</From>
+ <To>ANOTHER_EMAIL_DESTINATION</To> <!-- additional destinations are possible -->
+ <From>YOUR_USERNAME(a)gmail.com</From>
<Subject>TESTING: %logger{20} - %m</Subject>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%date %-5level %logger - %message%n</Pattern>
</layout>
</appender>
- <root>
- <level value="debug"/>
+ <root level="debug">
<appender-ref ref="EMAIL" />
</root>
</configuration>
Modified: logback/trunk/logback-examples/src/main/java/chapter4/mail/gmailSTARTTLS.xml
==============================================================================
--- logback/trunk/logback-examples/src/main/java/chapter4/mail/gmailSTARTTLS.xml (original)
+++ logback/trunk/logback-examples/src/main/java/chapter4/mail/gmailSTARTTLS.xml Sat Dec 27 16:55:34 2008
@@ -1,25 +1,21 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<configuration>
-
+<configuration>
<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
<SMTPHost>smtp.gmail.com</SMTPHost>
<SMTPPort>587</SMTPPort>
<STARTTLS>true</STARTTLS>
- <Username>USERNAME</Username>
- <Password>PASSWORD</Password>
+ <Username>YOUR_USERNAME(a)gmail.com</Username>
+ <Password>YOUR_GMAIL_PASSWORD</Password>
<To>EMAIL-DESTINATION</To>
- <To>ANOTHER_EMAIL_DESTINATION</To> <!-- a second destination is optional -->
- <From>SENDER-EMAIL</From>
+ <To>ANOTHER_EMAIL_DESTINATION</To> <!-- additional destinations are possible -->
+ <From>YOUR_USERNAME(a)gmail.com</From>
<Subject>TESTING: %logger{20} - %m</Subject>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%date %-5level %logger - %message%n</Pattern>
</layout>
</appender>
- <root>
- <level value="debug"/>
+ <root level="debug">
<appender-ref ref="EMAIL" />
</root>
</configuration>
Modified: logback/trunk/logback-examples/src/main/java/chapter4/mail/mail1.xml
==============================================================================
--- logback/trunk/logback-examples/src/main/java/chapter4/mail/mail1.xml (original)
+++ logback/trunk/logback-examples/src/main/java/chapter4/mail/mail1.xml Sat Dec 27 16:55:34 2008
@@ -1,11 +1,9 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-
<configuration>
<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
<SMTPHost>ADDRESS-OF-YOUR-SMTP-HOST</SMTPHost>
<To>EMAIL-DESTINATION</To>
- <To>ANOTHER_EMAIL_DESTINATION</To> <!-- a second destination is optional -->
+ <To>ANOTHER_EMAIL_DESTINATION</To> <!-- additional destinations are possible -->
<From>SENDER-EMAIL</From>
<Subject>TESTING: %logger{20} - %m</Subject>
<layout class="ch.qos.logback.classic.PatternLayout">
@@ -13,8 +11,7 @@
</layout>
</appender>
- <root>
- <level value="debug"/>
+ <root level="debug">
<appender-ref ref="EMAIL" />
</root>
</configuration>
Modified: logback/trunk/logback-examples/src/main/java/chapter4/socket/client1.xml
==============================================================================
--- logback/trunk/logback-examples/src/main/java/chapter4/socket/client1.xml (original)
+++ logback/trunk/logback-examples/src/main/java/chapter4/socket/client1.xml Sat Dec 27 16:55:34 2008
@@ -13,8 +13,7 @@
<IncludeCallerData>${includeCallerData}</IncludeCallerData>
</appender>
- <root>
- <level value ="debug"/>
+ <root level="debug">
<appender-ref ref="SOCKET" />
</root>
Modified: logback/trunk/logback-examples/src/main/java/chapter5/callerEvaluatorConfig.xml
==============================================================================
--- logback/trunk/logback-examples/src/main/java/chapter5/callerEvaluatorConfig.xml (original)
+++ logback/trunk/logback-examples/src/main/java/chapter5/callerEvaluatorConfig.xml Sat Dec 27 16:55:34 2008
@@ -1,19 +1,18 @@
<configuration>
- <evaluator name="DISPLAY_CALLER_EVAL">
- <Expression>logger.getName().contains("chapter5") && message.contains("who calls thee")</Expression>
- </evaluator>
-
- <appender name="STDOUT"
- class="ch.qos.logback.core.ConsoleAppender">
+ <evaluator name="DISPLAY_CALLER_EVAL">
+ <Expression>
+ logger.getName().contains("chapter5") && message.contains("who calls thee")
+ </Expression>
+ </evaluator>
+
+ <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
- <param name="Pattern"
- value="%-4relative [%thread] %-5level - %msg%n %caller{2, DISPLAY_CALLER_EVAL}" />
+ <Pattern>%-4relative [%thread] %-5level - %msg%n%caller{2, DISPLAY_CALLER_EVAL}</Pattern>
</layout>
</appender>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
\ No newline at end of file
Modified: logback/trunk/logback-examples/src/main/java/chapter5/exceptionEvaluatorConfig.xml
==============================================================================
--- logback/trunk/logback-examples/src/main/java/chapter5/exceptionEvaluatorConfig.xml (original)
+++ logback/trunk/logback-examples/src/main/java/chapter5/exceptionEvaluatorConfig.xml Sat Dec 27 16:55:34 2008
@@ -1,19 +1,16 @@
<configuration>
- <evaluator name="DISPLAY_EX_EVAL">
- <Expression>throwable != null && throwable instanceof chapter5.TestException</Expression>
- </evaluator>
-
- <appender name="STDOUT"
- class="ch.qos.logback.core.ConsoleAppender">
+ <evaluator name="DISPLAY_EX_EVAL">
+ <Expression>throwable != null && throwable instanceof chapter5.TestException</Expression>
+ </evaluator>
+
+ <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
- <param name="Pattern"
- value="%-4relative [%thread] %-5level - %msg %ex{full, DISPLAY_EX_EVAL}%n" />
+ <Pattern>%-4relative [%thread] %-5level - %msg%n%ex{full, DISPLAY_EX_EVAL}</Pattern>
</layout>
</appender>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
\ No newline at end of file
Modified: logback/trunk/logback-examples/src/main/java/chapter5/mySampleConverterConfig.xml
==============================================================================
--- logback/trunk/logback-examples/src/main/java/chapter5/mySampleConverterConfig.xml (original)
+++ logback/trunk/logback-examples/src/main/java/chapter5/mySampleConverterConfig.xml Sat Dec 27 16:55:34 2008
@@ -5,13 +5,11 @@
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
- <param name="Pattern"
- value="%-4relative [%thread] %sample - %msg%n" />
+ <Pattern>%-4relative [%thread] %sample - %msg%n</Pattern>
</layout>
</appender>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
\ No newline at end of file
Modified: logback/trunk/logback-examples/src/main/java/chapter5/sampleLayoutConfig.xml
==============================================================================
--- logback/trunk/logback-examples/src/main/java/chapter5/sampleLayoutConfig.xml (original)
+++ logback/trunk/logback-examples/src/main/java/chapter5/sampleLayoutConfig.xml Sat Dec 27 16:55:34 2008
@@ -5,8 +5,7 @@
<layout class="chapter5.MySampleLayout" />
</appender>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
\ No newline at end of file
Modified: logback/trunk/logback-examples/src/main/java/chapter5/sampleLayoutConfig2.xml
==============================================================================
--- logback/trunk/logback-examples/src/main/java/chapter5/sampleLayoutConfig2.xml (original)
+++ logback/trunk/logback-examples/src/main/java/chapter5/sampleLayoutConfig2.xml Sat Dec 27 16:55:34 2008
@@ -8,8 +8,7 @@
</layout>
</appender>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
\ No newline at end of file
Modified: logback/trunk/logback-site/src/site/pages/dependencies.html
==============================================================================
--- logback/trunk/logback-site/src/site/pages/dependencies.html (original)
+++ logback/trunk/logback-site/src/site/pages/dependencies.html Sat Dec 27 16:55:34 2008
@@ -149,12 +149,7 @@
<li>Depends on <code>SMTPAppenderBase</code>, and by
transitivity on <code>SMTPAppenderBase</code>'s
dependencies.
- </li>
-
- <li>Depends on
- <code>ch.qos.logback.classic.boolex.JaninoEventEvaluator</code>,
- and by transitivity on Janino.
- </li>
+ </li>
</ul>
</td>
</tr>
Modified: logback/trunk/logback-site/src/site/pages/documentation.html
==============================================================================
--- logback/trunk/logback-site/src/site/pages/documentation.html (original)
+++ logback/trunk/logback-site/src/site/pages/documentation.html Sat Dec 27 16:55:34 2008
@@ -73,9 +73,8 @@
in OSGI Enterprise Applications</a>, by Ekkehard Gentz.
</li>
- <li><a href="10reasons.ppt">Top 10 reasons for migrating to
- logback</a>, by Ceki Gülcü and Sébastien
- Pennec.
+ <li><a href="logback.ppt">Logback project</a>, by Ceki
+ Gülcü and Sébastien Pennec.
</li>
Modified: logback/trunk/logback-site/src/site/pages/manual/appenders.html
==============================================================================
--- logback/trunk/logback-site/src/site/pages/manual/appenders.html (original)
+++ logback/trunk/logback-site/src/site/pages/manual/appenders.html Sat Dec 27 16:55:34 2008
@@ -411,8 +411,7 @@
</layout>
</appender></b>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration></p>
@@ -586,8 +585,7 @@
</layout>
</appender></b>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="FILE" />
</root>
</configuration></p>
@@ -909,12 +907,11 @@
<MaxFileSize>5MB</MaxFileSize>
</triggeringPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</Pattern>
+ <Pattern>%-4relative [%thread] %-5levelu %logger{35} - %msg%n</Pattern>
</layout>
</appender>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="FILE" />
</root>
</configuration></p>
@@ -1133,8 +1130,7 @@
</layout>
</appender>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="FILE" />
</root>
</configuration></p>
@@ -1161,8 +1157,7 @@
</layout>
</appender>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="FILE" />
</root>
</configuration></p>
@@ -1245,8 +1240,7 @@
</layout>
</appender>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="FILE" />
</root>
</configuration></p>
@@ -1450,8 +1444,7 @@
<IncludeCallerData>${includeCallerData}</IncludeCallerData>
</appender>
- <root>
- <level value ="debug"/>
+ <root level="debug">
<appender-ref ref="SOCKET" />
</root>
@@ -1908,8 +1901,7 @@
<TopicBindingName>MyTopic</TopicBindingName>
</appender>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="Topic" />
</root>
</configuration></pre></div>
@@ -1977,26 +1969,24 @@
<QueueBindingName>MyQueue</QueueBindingName>
</appender>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="Queue" />
</root>
</configuration></pre></div>
<h3><a name="SMTPAppender" href="#SMTPAppender">SMTPAppender</a></h3>
-
- <p>The <a
- href="../xref/ch/qos/logback/classic/net/SMTPAppender.html"><code>SMTPAppender</code></a>
- accumulates logging events in a fixed-size buffer and sends them
- in an email when a user-specified event occurs. By default, the
- sending of such email is triggered by an event of level ERROR or
- higher.
- </p>
+ <p>The <a
+ href="../xref/ch/qos/logback/classic/net/SMTPAppender.html"><code>SMTPAppender</code></a>
+ accumulates logging events in a fixed-size buffer and sends them in
+ an email after a user-specified event occurs. By default, the
+ email transmission is -triggered by a logging event of level ERROR
+ or higher.
+ </p>
- <p>The various properties for <code>SMTPAppender</code> are
- summarized in the following table.
- </p>
+ <p>The various properties for <code>SMTPAppender</code> are
+ summarized in the following table.
+ </p>
<table class="bodyTable">
<tr class="a">
@@ -2059,38 +2049,46 @@
<td><b><span class="option">BufferSize</span></b></td>
<td><code>int</code></td>
<td>
- The <span class="option">BufferSize</span> option takes a positive
- integer representing the maximum number of logging events to collect in a
- cyclic buffer. When the <span class="option">BufferSize</span> is reached,
- oldest events are deleted as new events are added to the buffer.
- The default size of the cyclic buffer is 512.
+ The <span class="option">BufferSize</span> option takes a
+ positive integer representing the maximum number of logging
+ events to collect in a cyclic buffer. When the <span
+ class="option">BufferSize</span> is reached, oldest events
+ are deleted as new events are added to the buffer. The
+ default size of the cyclic buffer is 512.
</td>
</tr>
<tr >
<td><b><span class="option">Evaluator</span></b></td>
<td><code>String</code></td>
<td>
- <p>This option is declared by creating a new <code><EventEvaluator/></code>
- element. The name of the class that the user wishes to use as the
- <code>SMTPAppender</code>'s <code>Evaluator</code> can be given
- by adding an attribute to the newly created element.
+ <p>This option is declared by creating a new
+ <code><EventEvaluator/></code> element. The name of the
+ class that the user wishes to use as the
+ <code>SMTPAppender</code>'s <code>Evaluator</code> can needs
+ to be specified via the <span class="attr">class</span>
+ attribute.
</p>
- <p>More details about the use of event evaluators with
- <code>SMTPAppender</code> follow further down this document.
- </p>
- <p>In the absence of this option, <code>SMTPAppender</code> is
- assigned a default event evaluator which triggers email
- transmission as a response to any event of level
- <em>ERROR</em> or higher.
+ <p>In the absence of this option, <code>SMTPAppender</code>
+ is assigned an <a
+ href="../xref/ch/qos/logback/classic/boolex/OnErrorEvaluator.html">OnErrorEveluator</a>
+ instance which triggers email transmission when it
+ encounters an event of level <em>ERROR</em> or higher.
</p>
-
+
+ <!--
<p><code>EventEvaluator</code> objects are subclasses of the
<code>JaninoEventEvaluatorBase</code> which depends on
Janino. See the <a href="../dependencies.html">dependencies
page</a> for more information.
</p>
+ -->
+
+ <p>You can find more information on event evaluators further
+ down this document.
+ </p>
+
</td>
</tr>
<tr class="alt">
@@ -2166,13 +2164,12 @@
<code>Email</code> application:
</p>
-<em>Example 4.<span class="autoEx"/>: A sample <code>SMTPAppender</code> configuration (logback-examples/src/main/java/chapter4/mail/mail1.xml)</em>
-<div class="source"><pre><configuration>
-
+ <em>Example 4.<span class="autoEx"/>: A sample <code>SMTPAppender</code> configuration (logback-examples/src/main/java/chapter4/mail/mail1.xml)</em>
+ <p class="source"><configuration>
<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
<SMTPHost>ADDRESS-OF-YOUR-SMTP-HOST</SMTPHost>
<To>EMAIL-DESTINATION</To>
- <To>ANOTHER_EMAIL_DESTINATION</To> <!-- a second destination is optional -->
+ <To>ANOTHER_EMAIL_DESTINATION</To> <!-- additional destinations are possible -->
<From>SENDER-EMAIL</From>
<Subject>TESTING: %logger{20} - %m</Subject>
<layout class="ch.qos.logback.classic.PatternLayout">
@@ -2180,11 +2177,10 @@
</layout>
</appender>
- <root>
- <level value ="debug"/>
+ <root level="debug">
<appender-ref ref="EMAIL" />
</root>
-</configuration></pre></div>
+</configuration></p>
<p>Before trying out <code>chapter4.mail.Email</code> application
with the above configuration file, you must set the <span
@@ -2346,47 +2342,87 @@
<layout class="ch.qos.logback.classic.html.HTMLLayout"/>
</appender>
- <root>
- <level value ="debug"/>
+ <root level="debug">
<appender-ref ref="EMAIL" />
</root>
</configuration></pre></div>
- <h3>Authentication/STARTTLS/SSL</h3>
- <p>SMTPAppender supports plain user/password authentication as
- well as both STARTTLS and SSL.
+ <h3><a name="smtpAuthentication"
+ href="#smtpAuthentication">Authentication/STARTTLS/SSL</a></h3>
+
+ <p><code>SMTPAppender</code> supports authentication via plain
+ user passwords as well as both the STARTTLS and SSL
+ protocols. Note that STARTTLS differs from SSL in that, in
+ STARTTLS, the connection is initially non-encrypted and only after
+ the STARTTLS command is issued by the client (if the server
+ supports it) does the connection switch to SSL. In SSL mode, the
+ connection is encrypted right from the start.
</p>
- <p>The next example shows you how to configure SMTPAppender for
- gmail with SSL. </p>
+ <h3><a name="gmailSSL" href="#gmailSSL">SMTPAppender configuration
+ for Gmail (SSL)</a></h3>
+
+ <p>The next example shows you how to configure
+ <code>SMTPAppender</code> for Gmail with the SSL protocol. </p>
-<em>Example 4.<span class="autoEx"/>: <code>SMTPAppender</code> to GMAIL using SSL (logback-examples/src/main/java/chapter4/mail/gmailSSL.xml)</em>
+ <em>Example 4.<span class="autoEx"/>: <code>SMTPAppender</code> to Gmail using SSL (logback-examples/src/main/java/chapter4/mail/gmailSSL.xml)</em>
-<div class="source"><pre><configuration>
+ <p class="source"><configuration>
<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
- <b><SMTPHost>smtp.gmail.com</SMTPHost>
- <SMTPPort>465</SMTPPort>
- <SSL>true</SSL>
- <Username>USERNAME(a)gmail.com</Username>
- <Password>PASSWORD</Password></b>
+ <b><SMTPHost>smtp.gmail.com</SMTPHost></b>
+ <b><SMTPPort>465</SMTPPort></b>
+ <b><SSL>true</SSL></b>
+ <b><Username>YOUR_USERNAME(a)gmail.com</Username></b>
+ <b><Password>YOUR_GMAIL_PASSWORD</Password></b>
- <To>${to}</To>
- <From>${from}</From>
- <layout class="ch.qos.logback.classic.html.HTMLLayout"/>
+ <To>EMAIL-DESTINATION</To>
+ <To>ANOTHER_EMAIL_DESTINATION</To> <!-- additional destinations are possible -->
+ <From>YOUR_USERNAME(a)gmail.com</From>
+ <Subject>TESTING: %logger{20} - %m</Subject>
+ <layout class="ch.qos.logback.classic.PatternLayout">
+ <Pattern>%date %-5level %logger{35} - %message%n</Pattern>
+ </layout>
</appender>
- <root>
- <level value ="debug"/>
+ <root level="debug">
<appender-ref ref="EMAIL" />
</root>
-</configuration></pre></div>
+</configuration></p>
+
+
+ <h3><a name="gmailSTARTTLS" href="#gmailSTARTTLS">SMTPAppender for Gmail
+ (STARTTLS)</a></h3>
+
+ <p>The next example shows you how to configure
+ <code>SMTPAppender</code> for Gmail for the STARTTLS protocol. </p>
+
+ <em>Example 4.<span class="autoEx"/>: <code>SMTPAppender</code> to GMAIL using STARTTLS (logback-examples/src/main/java/chapter4/mail/gmailSTARTTLS.xml)</em>
+
+ <p class="source"><configuration>
+ <appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
+ <SMTPHost>smtp.gmail.com</SMTPHost>
+ <SMTPPort>587</SMTPPort>
+ <STARTTLS>true</STARTTLS>
+ <Username>YOUR_USERNAME(a)gmail.com</Username>
+ <Password>YOUR_GMAIL_xPASSWORD</Password>
+
+ <To>EMAIL-DESTINATION</To>
+ <To>ANOTHER_EMAIL_DESTINATION</To> <!-- additional destinations are possible -->
+ <From>YOUR_USERNAME(a)gmail.com</From>
+ <Subject>TESTING: %logger{20} - %m</Subject>
+ <layout class="ch.qos.logback.classic.PatternLayout">
+ <Pattern>%date %-5level %logger - %message%n</Pattern>
+ </layout>
+ </appender>
+
+ <root level="debug">
+ <appender-ref ref="EMAIL" />
+ </root>
+</configuration></p>
- <p>For a STARTTLS with gmail refer to the configuration file
- <em>logback-examples/src/main/java/chapter4/mail/gmailSTARTTLS.xml)</em>
- </p>
<h3>
<a name="DBAppender" href="#DBAppender">DBAppender</a>
@@ -2691,8 +2727,7 @@
</connectionSource>
</appender></b>
- <root>
- <level value="debug" />
+ <root level="debug" >
<appender-ref ref="DB" />
</root>
</configuration></pre></div>
@@ -2779,8 +2814,7 @@
</connectionSource>
</appender>
- <root>
- <level value ="debug"/>
+ <root level="debug">
<appender-ref ref="DB" />
</root>
</configuration></pre></div>
@@ -2870,8 +2904,9 @@
configuration file, logging events are sent to a MySQL database,
without any pooling.
</p>
-<em>Example 4.<span class="autoEx"/> <code>DBAppender</code> configuration without pooling (logback-examples/src/main/java/chapter4/db/append-toMySQL-with-datasource.xml)</em>
-<div class="source"><pre><configuration>
+
+ <em>Example 4.<span class="autoEx"/> <code>DBAppender</code> configuration without pooling (logback-examples/src/main/java/chapter4/db/append-toMySQL-with-datasource.xml)</em>
+ <p class="source"><configuration>
<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
<connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
@@ -2885,25 +2920,22 @@
</connectionSource>
</appender>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="DB" />
</root>
-</configuration</pre></div>
+</configuration</p>
- <p>
- With this configuration file, sending 500 logging events to
- a MySQL database takes a whopping 5 seconds, that is
- 10 miliseconds per requests. This figure is
- unacceptable when dealing with large applications.
+ <p>With this configuration file, sending 500 logging events to a
+ MySQL database takes a whopping 5 seconds, that is 10 miliseconds
+ per requests. This figure is unacceptable when dealing with large
+ applications.
</p>
- <p>
- A dedicated external library is necessary to use connection pooling
- with <code>DBAppender</code>. The next example uses
- <a href="http://sourceforge.net/projects/c3p0">c3p0</a>. To be able
- to use c3p0, one must download it and place <em>c3p0-VERSION.jar</em>
- in the classpath.
+ <p>A dedicated external library is necessary to use connection
+ pooling with <code>DBAppender</code>. The next example uses <a
+ href="http://sourceforge.net/projects/c3p0">c3p0</a>. To be able
+ to use c3p0, one must download it and place
+ <em>c3p0-VERSION.jar</em> in the classpath.
</p>
<em>Example 4.<span class="autoEx"/>: <code>DBAppender</code> configuration with pooling (logback-examples/src/main/java/chapter4/db/append-toMySQL-with-datasource-and-pooling.xml)</em>
@@ -2922,31 +2954,27 @@
</connectionSource>
</appender>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="DB" />
</root>
</configuration></p>
- <p>
- With this new configuration, sending 500 logging requests to
- the same MySQL database as previously used takes around 0.5 seconds,
- for an average time of 1 milisecond per request.
- The gain is a <em>10</em> factor.
+ <p>With this new configuration, sending 500 logging requests to
+ the same MySQL database as previously used takes around 0.5
+ seconds, for an average time of 1 milisecond per request. The
+ gain is a <em>10</em> factor.
</p>
- <h3>
- <a name="SyslogAppender" href="#SyslogAppender">
- SyslogAppender
- </a>
+ <h3><a name="SyslogAppender"
+ href="#SyslogAppender">SyslogAppender</a>
</h3>
- <p>
- The syslog protocol is a very simple protocol: a syslog sender sends a small
- message to a syslog receiver.
- The receiver is commonly called <em>syslog daemon</em> or <em>syslog server</em>.
- Logback can send messages to a remote syslog daemon. This is achieved by using
- <a href="../xref/ch/qos/logback/classic/net/SyslogAppender.html"><code>SyslogAppender</code></a>.
+ <p>The syslog protocol is a very simple protocol: a syslog sender
+ sends a small message to a syslog receiver. The receiver is
+ commonly called <em>syslog daemon</em> or <em>syslog server</em>.
+ Logback can send messages to a remote syslog daemon. This is
+ achieved by using <a
+ href="../xref/ch/qos/logback/classic/net/SyslogAppender.html"><code>SyslogAppender</code></a>.
</p>
<p>Here are the properties upi can pass to a SyslogAppender.</p>
@@ -3055,8 +3083,7 @@
<SuffixPattern>[%thread] %logger %msg</SuffixPattern>
</appender>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration></pre></div>
Modified: logback/trunk/logback-site/src/site/pages/manual/layouts.html
==============================================================================
--- logback/trunk/logback-site/src/site/pages/manual/layouts.html (original)
+++ logback/trunk/logback-site/src/site/pages/manual/layouts.html Sat Dec 27 16:55:34 2008
@@ -1181,13 +1181,12 @@
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
- <param name="Pattern" value="%-4relative [%thread] %-5level - %msg%n \
- <b>%caller{2, DISP_CALLER_EVAL}</b>" />
+ <Pattern>%-4relative [%thread] %-5level - %msg%n<b>%caller{2, DISP_CALLER_EVAL}</b>
+ </Pattern>
</layout>
</appender>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration></pre></div>
@@ -1340,14 +1339,12 @@
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
- <param name="Pattern"
- value="%-4relative [%thread] %-5level - %msg \
- <b>%ex{full, DISPLAY_EX_EVAL}</b>%n" />
+ <Pattern>%-4relative [%thread] %-5level - %msg%n<b>%ex{full, DISPLAY_EX_EVAL}</b>
+ </Pattern>
</layout>
</appender>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration></pre></div>
@@ -1453,8 +1450,7 @@
</layout>
</appender>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration></pre></div>
@@ -1633,8 +1629,7 @@
<To>destination.email(a)domain.net</To>
</appender>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="SMTP" />
</root>
</configuration></pre></div>
@@ -1660,8 +1655,7 @@
</layout>
</appender>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="FILE" />
</root>
</configuration></pre></div>
Modified: logback/trunk/logback-site/src/site/pages/support.html
==============================================================================
--- logback/trunk/logback-site/src/site/pages/support.html (original)
+++ logback/trunk/logback-site/src/site/pages/support.html Sat Dec 27 16:55:34 2008
@@ -19,28 +19,28 @@
</div>
<div id="content">
- <h2>Professional support</h2>
+ <h2>Professional Logback Support</h2>
<p>Although the quality of support in the various public logback
- mailing lists is very good, these are operated on a best-effort
- basis. If you require guaranteed response times and in-depth
- advice from developers intimately acquainted with logback, then do
- consider our professional support package.
+ mailing lists is quite good, these are operated on a best-effort
+ basis. If you require authoritative responses and guaranteed
+ response times, then you should consider our professional support
+ package.
</p>
<p>As the founders and current maintainers of the logback project,
- we can offer you highest quality of support. Opting for our
+ we can offer you the highest quality of support. Opting for our
professional logback support service is a great way to leverage
the expertise of logback developers.
</p>
- <p>If your project requires custom appenders or logback
- extensions, we can also help you.
+ <p>Moreovoer, if your project requires custom appenders or logback
+ extensions, we are likely to be of help.
</p>
- <p>For a quote for "Professional Support Contract" please do not
- hesitate to contact us. We will happy to discuss or help you with
- logging-related issues.</p>
+ <p>For more information about Professional Logback Support do not
+ hesitate to contact us. We will be happy to discuss your
+ logging-related questions.</p>
<table>
<tr>
Modified: logback/trunk/logback-site/src/site/resources/logback.ppt
==============================================================================
Binary files. No diff available.
1
0
svn commit: r2104 - logback/trunk/logback-examples/src/main/java/chapter5
by noreply.cekiļ¼ qos.ch 26 Dec '08
by noreply.cekiļ¼ qos.ch 26 Dec '08
26 Dec '08
Author: ceki
Date: Fri Dec 26 15:54:29 2008
New Revision: 2104
Modified:
logback/trunk/logback-examples/src/main/java/chapter5/mdcfilter.xml
Log:
- clean up
Modified: logback/trunk/logback-examples/src/main/java/chapter5/mdcfilter.xml
==============================================================================
--- logback/trunk/logback-examples/src/main/java/chapter5/mdcfilter.xml (original)
+++ logback/trunk/logback-examples/src/main/java/chapter5/mdcfilter.xml Fri Dec 26 15:54:29 2008
@@ -3,8 +3,7 @@
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
- <param name="Pattern"
- value="%-4relative [%thread] %-5level %X{testKey} - %msg%n" />
+ <Pattern>%-4relative [%thread] %-5level %X{testKey} - %msg%n"</Pattern>
</layout>
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
@@ -17,8 +16,7 @@
</filter>
</appender>
- <root>
- <level value="debug" />
+ <root level="debug">
<appender-ref ref="STDOUT" />
</root>
</configuration>
1
0
svn commit: r2103 - in logback/trunk: logback-access/src/main/java/ch/qos/logback/access/joran logback-classic/src/main/java/ch/qos/logback/classic/joran logback-classic/src/test/input/joran logback-classic/src/test/java/ch/qos/logback/classic/joran logback-core/src/main/java/ch/qos/logback/core/joran/action
by noreply.cekiļ¼ qos.ch 26 Dec '08
by noreply.cekiļ¼ qos.ch 26 Dec '08
26 Dec '08
Author: ceki
Date: Fri Dec 26 15:43:01 2008
New Revision: 2103
Removed:
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/MatcherAction.java
Modified:
logback/trunk/logback-access/src/main/java/ch/qos/logback/access/joran/JoranConfigurator.java
logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/joran/JoranConfigurator.java
logback/trunk/logback-classic/src/test/input/joran/callerData.xml
logback/trunk/logback-classic/src/test/input/joran/simpleEvaluator.xml
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/joran/EvaluatorJoranTest.java
Log:
- MatcherAction no longer needed to add matcher to an evaluator
Modified: logback/trunk/logback-access/src/main/java/ch/qos/logback/access/joran/JoranConfigurator.java
==============================================================================
--- logback/trunk/logback-access/src/main/java/ch/qos/logback/access/joran/JoranConfigurator.java (original)
+++ logback/trunk/logback-access/src/main/java/ch/qos/logback/access/joran/JoranConfigurator.java Fri Dec 26 15:43:01 2008
@@ -16,7 +16,6 @@
import ch.qos.logback.access.sift.SiftAction;
import ch.qos.logback.core.joran.JoranConfiguratorBase;
import ch.qos.logback.core.joran.action.AppenderRefAction;
-import ch.qos.logback.core.joran.action.MatcherAction;
import ch.qos.logback.core.joran.action.NOPAction;
import ch.qos.logback.core.joran.spi.Pattern;
import ch.qos.logback.core.joran.spi.RuleStore;
@@ -40,8 +39,6 @@
rs.addRule(new Pattern("configuration/appender/sift/*"), new NOPAction());
rs.addRule(new Pattern("*/evaluator"), new EvaluatorAction());
- rs.addRule(new Pattern("*/evaluator/matcher"), new MatcherAction());
-
}
Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/joran/JoranConfigurator.java
==============================================================================
--- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/joran/JoranConfigurator.java (original)
+++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/joran/JoranConfigurator.java Fri Dec 26 15:43:01 2008
@@ -25,7 +25,6 @@
import ch.qos.logback.core.joran.JoranConfiguratorBase;
import ch.qos.logback.core.joran.action.AppenderRefAction;
import ch.qos.logback.core.joran.action.IncludeAction;
-import ch.qos.logback.core.joran.action.MatcherAction;
import ch.qos.logback.core.joran.action.NOPAction;
import ch.qos.logback.core.joran.spi.Pattern;
import ch.qos.logback.core.joran.spi.RuleStore;
@@ -50,8 +49,6 @@
rs.addRule(new Pattern("configuration/contextName"), new ContextNameAction());
rs.addRule(new Pattern("configuration/insertFromJNDI"), new InsertFromJNDIAction());
rs.addRule(new Pattern("*/evaluator"), new EvaluatorAction());
- rs.addRule(new Pattern("*/evaluator/matcher"),
- new MatcherAction());
rs.addRule(new Pattern("configuration/appender/sift"), new SiftAction());
rs.addRule(new Pattern("configuration/appender/sift/*"), new NOPAction());
Modified: logback/trunk/logback-classic/src/test/input/joran/callerData.xml
==============================================================================
--- logback/trunk/logback-classic/src/test/input/joran/callerData.xml (original)
+++ logback/trunk/logback-classic/src/test/input/joran/callerData.xml Fri Dec 26 15:43:01 2008
@@ -5,7 +5,8 @@
<evaluator name="helloEval">
<Expression>m.matches(message)</Expression>
- <matcher name="m">
+ <matcher>
+ <name>m</name>
<regex>^hello.*</regex>
<CaseSensitive>false</CaseSensitive>
</matcher>
Modified: logback/trunk/logback-classic/src/test/input/joran/simpleEvaluator.xml
==============================================================================
--- logback/trunk/logback-classic/src/test/input/joran/simpleEvaluator.xml (original)
+++ logback/trunk/logback-classic/src/test/input/joran/simpleEvaluator.xml Fri Dec 26 15:43:01 2008
@@ -7,7 +7,8 @@
<Expression>m.matches(message)</Expression>
- <matcher name="m">
+ <matcher>
+ <Name>m</Name>
<regex>^hello.*</regex>
<CaseSensitive>false</CaseSensitive>
</matcher>
Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/joran/EvaluatorJoranTest.java
==============================================================================
--- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/joran/EvaluatorJoranTest.java (original)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/joran/EvaluatorJoranTest.java Fri Dec 26 15:43:01 2008
@@ -9,6 +9,7 @@
*/
package ch.qos.logback.classic.joran;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
@@ -41,16 +42,15 @@
Map evalMap = (Map) loggerContext.getObject(CoreConstants.EVALUATOR_MAP);
assertNotNull(evalMap);
- //StatusPrinter.print(loggerContext.getStatusManager());
JaninoEventEvaluator evaluator = (JaninoEventEvaluator) evalMap.get("msgEval");
assertNotNull(evaluator);
Logger logger = loggerContext.getLogger("xx");
- LoggingEvent event = new LoggingEvent("foo", logger, Level.DEBUG, "Hello world", null, null);
- //StatusPrinter.print(loggerContext.getStatusManager());
- assertTrue(evaluator.evaluate(event));
+ LoggingEvent event0 = new LoggingEvent("foo", logger, Level.DEBUG, "Hello world", null, null);
+ assertTrue(evaluator.evaluate(event0));
- //StatusPrinter.print(loggerContext.getStatusManager());
+ LoggingEvent event1 = new LoggingEvent("foo", logger, Level.DEBUG, "random blurb", null, null);
+ assertFalse(evaluator.evaluate(event1));
}
@Test
1
0
Author: ceki
Date: Fri Dec 26 14:55:28 2008
New Revision: 2102
Added:
logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/boolex/OnErrorEvaluator.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/boolex/EventEvaluatorBase.java
Modified:
logback/trunk/logback-access/src/main/java/ch/qos/logback/access/boolex/JaninoEventEvaluator.java
logback/trunk/logback-access/src/main/java/ch/qos/logback/access/jetty/RequestLogImpl.java
logback/trunk/logback-access/src/main/java/ch/qos/logback/access/joran/action/EvaluatorAction.java
logback/trunk/logback-access/src/main/java/ch/qos/logback/access/net/SMTPAppender.java
logback/trunk/logback-access/src/main/java/ch/qos/logback/access/spi/AccessContext.java
logback/trunk/logback-access/src/main/java/ch/qos/logback/access/tomcat/LogbackValve.java
logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/boolex/JaninoEventEvaluator.java
logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/joran/action/EvaluatorAction.java
logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/net/SMTPAppender.java
logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/pattern/CallerDataConverter.java
logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/pattern/EnsureExceptionHandling.java
logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/pattern/ThrowableProxyConverter.java
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/AllClassicTest.java
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/boolex/JaninoEventEvaluatorTest.java
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/boolex/PackageTest.java
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/control/PackageTest.java
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/db/PackageTest.java
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/html/PackageTest.java
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/jmx/PackageTest.java
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/joran/EvaluatorJoranTest.java
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/joran/PackageTest.java
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/JMSTopicAppenderTest.java
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/PackageTest.java
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/pattern/MDCConverterTest.java
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/pattern/MarkerConverterTest.java
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/pattern/PackageTest.java
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/selector/ContextDetachingSCLTest.java
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/selector/PackageTest.java
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/spi/CallerDataTest.java
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/spi/ContextListenerTest.java
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/spi/PackageTest.java
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/util/PackageTest.java
logback/trunk/logback-classic/src/test/java/org/slf4j/impl/PackageTest.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/Appender.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/AppenderBase.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/UnsynchronizedAppenderBase.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/boolex/EventEvaluator.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/boolex/JaninoEventEvaluatorBase.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/boolex/Matcher.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/filter/AbstractMatcherFilter.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/filter/EvaluatorFilter.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/filter/Filter.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/AbstractEventEvaluatorAction.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/IADataForComplexProperty.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/MatcherAction.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/NestedComplexPropertyIA.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/spi/PropertySetter.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/net/SMTPAppenderBase.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/spi/FilterAttachable.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/spi/FilterAttachableImpl.java
logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/spi/PropertySetterTest.java
Log:
- Migrate all tests to Junit4
- add tests for verifying that parameter types which are concrete classes
can be instantiated by implicit actions
- ongoing work on evaluators
Modified: logback/trunk/logback-access/src/main/java/ch/qos/logback/access/boolex/JaninoEventEvaluator.java
==============================================================================
--- logback/trunk/logback-access/src/main/java/ch/qos/logback/access/boolex/JaninoEventEvaluator.java (original)
+++ logback/trunk/logback-access/src/main/java/ch/qos/logback/access/boolex/JaninoEventEvaluator.java Fri Dec 26 14:55:28 2008
@@ -1,3 +1,12 @@
+/**
+ * Logback: the generic, reliable, fast and flexible logging framework.
+ *
+ * Copyright (C) 2000-2008, QOS.ch
+ *
+ * This library is free software, you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation.
+ */
package ch.qos.logback.access.boolex;
import java.util.ArrayList;
@@ -8,16 +17,13 @@
import ch.qos.logback.core.boolex.JaninoEventEvaluatorBase;
import ch.qos.logback.core.boolex.Matcher;
-
-
-public class JaninoEventEvaluator extends JaninoEventEvaluatorBase {
+public class JaninoEventEvaluator extends JaninoEventEvaluatorBase<AccessEvent> {
public final static List<String> DEFAULT_PARAM_NAME_LIST = new ArrayList<String>();
public final static List<Class> DEFAULT_PARAM_TYPE_LIST = new ArrayList<Class>();
static {
DEFAULT_PARAM_NAME_LIST.add("event");
-
DEFAULT_PARAM_TYPE_LIST.add(AccessEvent.class);
}
@@ -51,14 +57,14 @@
return (Class[]) fullTypeList.toArray(CoreConstants.EMPTY_CLASS_ARRAY);
}
- protected Object[] getParameterValues(Object event) {
- AccessEvent loggingEvent = (AccessEvent) event;
+ protected Object[] getParameterValues(AccessEvent event) {
+ AccessEvent accessEvent = (AccessEvent) event;
final int matcherListSize = matcherList.size();
int i = 0;
Object[] values = new Object[DEFAULT_PARAM_NAME_LIST.size()+matcherListSize];
- values[i++] = loggingEvent;
+ values[i++] = accessEvent;
for(int j = 0; j < matcherListSize; j++) {
values[i++] = (Matcher) matcherList.get(j);
Modified: logback/trunk/logback-access/src/main/java/ch/qos/logback/access/jetty/RequestLogImpl.java
==============================================================================
--- logback/trunk/logback-access/src/main/java/ch/qos/logback/access/jetty/RequestLogImpl.java (original)
+++ logback/trunk/logback-access/src/main/java/ch/qos/logback/access/jetty/RequestLogImpl.java Fri Dec 26 14:55:28 2008
@@ -110,13 +110,13 @@
* @author Sébastien Pennec
*/
public class RequestLogImpl extends ContextBase implements RequestLog,
- AppenderAttachable<AccessEvent>, FilterAttachable {
+ AppenderAttachable<AccessEvent>, FilterAttachable<AccessEvent> {
public final static String DEFAULT_CONFIG_FILE = "etc" + File.separatorChar
+ "logback-access.xml";
AppenderAttachableImpl<AccessEvent> aai = new AppenderAttachableImpl<AccessEvent>();
- FilterAttachableImpl fai = new FilterAttachableImpl();
+ FilterAttachableImpl<AccessEvent> fai = new FilterAttachableImpl<AccessEvent>();
String filename;
boolean started = false;
@@ -235,7 +235,7 @@
return aai.detachAppender(name);
}
- public void addFilter(Filter newFilter) {
+ public void addFilter(Filter<AccessEvent> newFilter) {
fai.addFilter(newFilter);
}
@@ -243,7 +243,7 @@
fai.clearAllFilters();
}
- public FilterReply getFilterChainDecision(Object event) {
+ public FilterReply getFilterChainDecision(AccessEvent event) {
return fai.getFilterChainDecision(event);
}
Modified: logback/trunk/logback-access/src/main/java/ch/qos/logback/access/joran/action/EvaluatorAction.java
==============================================================================
--- logback/trunk/logback-access/src/main/java/ch/qos/logback/access/joran/action/EvaluatorAction.java (original)
+++ logback/trunk/logback-access/src/main/java/ch/qos/logback/access/joran/action/EvaluatorAction.java Fri Dec 26 14:55:28 2008
@@ -1,17 +1,11 @@
package ch.qos.logback.access.joran.action;
import ch.qos.logback.access.boolex.JaninoEventEvaluator;
-import ch.qos.logback.core.boolex.EventEvaluator;
import ch.qos.logback.core.joran.action.AbstractEventEvaluatorAction;
public class EvaluatorAction extends AbstractEventEvaluatorAction {
- protected boolean isOfCorrectType(EventEvaluator ee) {
- return (ee instanceof JaninoEventEvaluator);
- }
-
-
protected String defaultClassName() {
return JaninoEventEvaluator.class.getName();
}
Modified: logback/trunk/logback-access/src/main/java/ch/qos/logback/access/net/SMTPAppender.java
==============================================================================
--- logback/trunk/logback-access/src/main/java/ch/qos/logback/access/net/SMTPAppender.java (original)
+++ logback/trunk/logback-access/src/main/java/ch/qos/logback/access/net/SMTPAppender.java Fri Dec 26 14:55:28 2008
@@ -47,7 +47,7 @@
* Use <code>evaluator</code> passed as parameter as the {@link
* EventEvaluator} for this SMTPAppender.
*/
- public SMTPAppender(EventEvaluator evaluator) {
+ public SMTPAppender(EventEvaluator<AccessEvent> evaluator) {
this.eventEvaluator = evaluator;
}
Modified: logback/trunk/logback-access/src/main/java/ch/qos/logback/access/spi/AccessContext.java
==============================================================================
--- logback/trunk/logback-access/src/main/java/ch/qos/logback/access/spi/AccessContext.java (original)
+++ logback/trunk/logback-access/src/main/java/ch/qos/logback/access/spi/AccessContext.java Fri Dec 26 14:55:28 2008
@@ -18,10 +18,10 @@
*
* @author Sébastien Pennec
*/
-public class AccessContext extends ContextBase implements AppenderAttachable<AccessEvent>, FilterAttachable {
+public class AccessContext extends ContextBase implements AppenderAttachable<AccessEvent>, FilterAttachable<AccessEvent> {
AppenderAttachableImpl<AccessEvent> aai = new AppenderAttachableImpl<AccessEvent>();
- FilterAttachableImpl fai = new FilterAttachableImpl();
+ FilterAttachableImpl<AccessEvent> fai = new FilterAttachableImpl<AccessEvent>();
public void callAppenders(AccessEvent event) {
aai.appendLoopOnAppenders(event);
@@ -55,7 +55,7 @@
return aai.iteratorForAppenders();
}
- public void addFilter(Filter newFilter) {
+ public void addFilter(Filter<AccessEvent> newFilter) {
fai.addFilter(newFilter);
}
@@ -63,7 +63,7 @@
fai.clearAllFilters();
}
- public FilterReply getFilterChainDecision(Object event) {
+ public FilterReply getFilterChainDecision(AccessEvent event) {
return fai.getFilterChainDecision(event);
}
Modified: logback/trunk/logback-access/src/main/java/ch/qos/logback/access/tomcat/LogbackValve.java
==============================================================================
--- logback/trunk/logback-access/src/main/java/ch/qos/logback/access/tomcat/LogbackValve.java (original)
+++ logback/trunk/logback-access/src/main/java/ch/qos/logback/access/tomcat/LogbackValve.java Fri Dec 26 14:55:28 2008
@@ -54,7 +54,7 @@
* @author Sébastien Pennec
*/
public class LogbackValve extends ValveBase implements Lifecycle, Context,
- AppenderAttachable<AccessEvent>, FilterAttachable {
+ AppenderAttachable<AccessEvent>, FilterAttachable<AccessEvent> {
public final static String DEFAULT_CONFIG_FILE = "conf" + File.separatorChar
+ "logback-access.xml";
@@ -67,7 +67,7 @@
// serialized. For the time being, we ignore this shortcoming.
Map<String, String> propertyMap = new HashMap<String, String>();
Map<String, Object> objectMap = new HashMap<String, Object>();
- private FilterAttachableImpl fai = new FilterAttachableImpl();
+ private FilterAttachableImpl<AccessEvent> fai = new FilterAttachableImpl<AccessEvent>();
AppenderAttachableImpl<AccessEvent> aai = new AppenderAttachableImpl<AccessEvent>();
String filename;
@@ -204,7 +204,7 @@
objectMap.put(key, value);
}
- public void addFilter(Filter newFilter) {
+ public void addFilter(Filter<AccessEvent> newFilter) {
fai.addFilter(newFilter);
}
@@ -216,7 +216,7 @@
fai.clearAllFilters();
}
- public FilterReply getFilterChainDecision(Object event) {
+ public FilterReply getFilterChainDecision(AccessEvent event) {
return fai.getFilterChainDecision(event);
}
Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/boolex/JaninoEventEvaluator.java
==============================================================================
--- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/boolex/JaninoEventEvaluator.java (original)
+++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/boolex/JaninoEventEvaluator.java Fri Dec 26 14:55:28 2008
@@ -1,3 +1,12 @@
+/**
+ * Logback: the generic, reliable, fast and flexible logging framework.
+ *
+ * Copyright (C) 2000-2008, QOS.ch
+ *
+ * This library is free software, you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation.
+ */
package ch.qos.logback.classic.boolex;
import java.util.ArrayList;
@@ -15,7 +24,7 @@
-public class JaninoEventEvaluator extends JaninoEventEvaluatorBase {
+public class JaninoEventEvaluator extends JaninoEventEvaluatorBase<LoggingEvent> {
public final static String IMPORT_LEVEL = "import ch.qos.logback.classic.Level;\r\n";
@@ -83,8 +92,7 @@
return (Class[]) fullTypeList.toArray(CoreConstants.EMPTY_CLASS_ARRAY);
}
- protected Object[] getParameterValues(Object event) {
- LoggingEvent loggingEvent = (LoggingEvent) event;
+ protected Object[] getParameterValues(LoggingEvent loggingEvent) {
final int matcherListSize = matcherList.size();
int i = 0;
Added: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/boolex/OnErrorEvaluator.java
==============================================================================
--- (empty file)
+++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/boolex/OnErrorEvaluator.java Fri Dec 26 14:55:28 2008
@@ -0,0 +1,23 @@
+/**
+ * Logback: the generic, reliable, fast and flexible logging framework.
+ *
+ * Copyright (C) 2000-2008, QOS.ch
+ *
+ * This library is free software, you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation.
+ */
+package ch.qos.logback.classic.boolex;
+
+import ch.qos.logback.classic.Level;
+import ch.qos.logback.classic.spi.LoggingEvent;
+import ch.qos.logback.core.boolex.EvaluationException;
+import ch.qos.logback.core.boolex.EventEvaluatorBase;
+
+public class OnErrorEvaluator extends EventEvaluatorBase<LoggingEvent> {
+
+ public boolean evaluate(LoggingEvent event) throws NullPointerException,
+ EvaluationException {
+ return event.getLevel().levelInt >= Level.ERROR_INT;
+ }
+}
Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/joran/action/EvaluatorAction.java
==============================================================================
--- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/joran/action/EvaluatorAction.java (original)
+++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/joran/action/EvaluatorAction.java Fri Dec 26 14:55:28 2008
@@ -1,21 +1,22 @@
+/**
+ * Logback: the generic, reliable, fast and flexible logging framework.
+ *
+ * Copyright (C) 2000-2008, QOS.ch
+ *
+ * This library is free software, you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation.
+ */
package ch.qos.logback.classic.joran.action;
import ch.qos.logback.classic.boolex.JaninoEventEvaluator;
-import ch.qos.logback.core.boolex.EventEvaluator;
import ch.qos.logback.core.joran.action.AbstractEventEvaluatorAction;
public class EvaluatorAction extends AbstractEventEvaluatorAction {
- protected boolean isOfCorrectType(EventEvaluator ee) {
- return (ee instanceof JaninoEventEvaluator);
- }
-
-
- protected String defaultClassName() {
+ protected String defaultClassName() {
return JaninoEventEvaluator.class.getName();
}
-
-
}
Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/net/SMTPAppender.java
==============================================================================
--- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/net/SMTPAppender.java (original)
+++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/net/SMTPAppender.java Fri Dec 26 14:55:28 2008
@@ -63,7 +63,7 @@
* Use the parameter as the {@link
* EventEvaluator} for this SMTPAppender.
*/
- public SMTPAppender(EventEvaluator eventEvaluator) {
+ public SMTPAppender(EventEvaluator<LoggingEvent> eventEvaluator) {
this.eventEvaluator = eventEvaluator;
}
Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/pattern/CallerDataConverter.java
==============================================================================
--- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/pattern/CallerDataConverter.java (original)
+++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/pattern/CallerDataConverter.java Fri Dec 26 14:55:28 2008
@@ -1,11 +1,11 @@
/**
- * LOGBack: the reliable, fast and flexible logging library for Java.
- *
- * Copyright (C) 1999-2006, QOS.ch
- *
- * This library is free software, you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation.
+ * Logback: the generic, reliable, fast and flexible logging framework.
+ *
+ * Copyright (C) 2000-2008, QOS.ch
+ *
+ * This library is free software, you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation.
*/
package ch.qos.logback.classic.pattern;
@@ -21,7 +21,6 @@
import ch.qos.logback.core.boolex.EventEvaluator;
import ch.qos.logback.core.status.ErrorStatus;
-
/**
* This converter outputs caller data depending on depth and marker data.
*
@@ -30,11 +29,12 @@
public class CallerDataConverter extends ClassicConverter {
int depth = 5;
- List<EventEvaluator> evaluatorList = null;
+ List<EventEvaluator<LoggingEvent>> evaluatorList = null;
final int MAX_ERROR_COUNT = 4;
int errorCount = 0;
-
+
+ @SuppressWarnings("unchecked")
public void start() {
String depthStr = getFirstOption();
if (depthStr == null) {
@@ -55,8 +55,10 @@
String evaluatorStr = (String) optionList.get(i);
Context context = getContext();
if (context != null) {
- Map evaluatorMap = (Map) context.getObject(CoreConstants.EVALUATOR_MAP);
- EventEvaluator ee = (EventEvaluator) evaluatorMap.get(evaluatorStr);
+ Map evaluatorMap = (Map) context
+ .getObject(CoreConstants.EVALUATOR_MAP);
+ EventEvaluator<LoggingEvent> ee = (EventEvaluator<LoggingEvent>) evaluatorMap
+ .get(evaluatorStr);
if (ee != null) {
addEvaluator(ee);
}
@@ -66,9 +68,9 @@
}
- private void addEvaluator(EventEvaluator ee) {
+ private void addEvaluator(EventEvaluator<LoggingEvent> ee) {
if (evaluatorList == null) {
- evaluatorList = new ArrayList<EventEvaluator>();
+ evaluatorList = new ArrayList<EventEvaluator<LoggingEvent>>();
}
evaluatorList.add(ee);
}
@@ -79,7 +81,7 @@
if (evaluatorList != null) {
boolean printCallerData = false;
for (int i = 0; i < evaluatorList.size(); i++) {
- EventEvaluator ee = (EventEvaluator) evaluatorList.get(i);
+ EventEvaluator<LoggingEvent> ee = evaluatorList.get(i);
try {
if (ee.evaluate(le)) {
printCallerData = true;
@@ -94,8 +96,9 @@
ErrorStatus errorStatus = new ErrorStatus(
"Exception thrown for evaluator named [" + ee.getName() + "].",
this, eex);
- errorStatus.add(new ErrorStatus("This was the last warning about this evaluator's errors." +
- "We don't want the StatusManager to get flooded.", this));
+ errorStatus.add(new ErrorStatus(
+ "This was the last warning about this evaluator's errors."
+ + "We don't want the StatusManager to get flooded.", this));
addStatus(errorStatus);
}
Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/pattern/EnsureExceptionHandling.java
==============================================================================
--- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/pattern/EnsureExceptionHandling.java (original)
+++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/pattern/EnsureExceptionHandling.java Fri Dec 26 14:55:28 2008
@@ -8,11 +8,6 @@
public class EnsureExceptionHandling implements
PostCompileProcessor<LoggingEvent> {
- // public void process(Converter head) {
- // // TODO Auto-generated method stub
- //
- // }
-
/**
* This implementation checks if any of the converters in the chain handles
* exceptions. If not, then this method adds a
Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/pattern/ThrowableProxyConverter.java
==============================================================================
--- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/pattern/ThrowableProxyConverter.java (original)
+++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/pattern/ThrowableProxyConverter.java Fri Dec 26 14:55:28 2008
@@ -30,11 +30,12 @@
public class ThrowableProxyConverter extends ThrowableHandlingConverter {
int lengthOption;
- List<EventEvaluator> evaluatorList = null;
+ List<EventEvaluator<LoggingEvent>> evaluatorList = null;
final int MAX_ERROR_COUNT = 4;
int errorCount = 0;
+ @SuppressWarnings("unchecked")
public void start() {
String lengthStr = getFirstOption();
@@ -66,16 +67,16 @@
String evaluatorStr = (String) optionList.get(i);
Context context = getContext();
Map evaluatorMap = (Map) context.getObject(CoreConstants.EVALUATOR_MAP);
- EventEvaluator ee = (EventEvaluator) evaluatorMap.get(evaluatorStr);
+ EventEvaluator<LoggingEvent> ee = (EventEvaluator<LoggingEvent>) evaluatorMap.get(evaluatorStr);
addEvaluator(ee);
}
}
super.start();
}
- private void addEvaluator(EventEvaluator ee) {
+ private void addEvaluator(EventEvaluator<LoggingEvent> ee) {
if (evaluatorList == null) {
- evaluatorList = new ArrayList<EventEvaluator>();
+ evaluatorList = new ArrayList<EventEvaluator<LoggingEvent>>();
}
evaluatorList.add(ee);
}
@@ -111,7 +112,7 @@
if (evaluatorList != null) {
boolean printStack = true;
for (int i = 0; i < evaluatorList.size(); i++) {
- EventEvaluator ee = (EventEvaluator) evaluatorList.get(i);
+ EventEvaluator<LoggingEvent> ee = evaluatorList.get(i);
try {
if (ee.evaluate(event)) {
printStack = false;
Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/AllClassicTest.java
==============================================================================
--- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/AllClassicTest.java (original)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/AllClassicTest.java Fri Dec 26 14:55:28 2008
@@ -9,33 +9,27 @@
*/
package ch.qos.logback.classic;
-import junit.framework.JUnit4TestAdapter;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
-public class AllClassicTest extends TestCase {
+(a)RunWith(Suite.class)
+(a)SuiteClasses({org.slf4j.impl.PackageTest.class,
+ ch.qos.logback.classic.PackageTest.class,
+ ch.qos.logback.classic.util.PackageTest.class,
+ ch.qos.logback.classic.control.PackageTest.class,
+ ch.qos.logback.classic.joran.PackageTest.class,
+ ch.qos.logback.classic.jmx.PackageTest.class,
+ ch.qos.logback.classic.boolex.PackageTest.class,
+ ch.qos.logback.classic.selector.PackageTest.class,
+ ch.qos.logback.classic.html.PackageTest.class,
+ ch.qos.logback.classic.net.PackageTest.class,
+ ch.qos.logback.classic.pattern.PackageTest.class,
+ ch.qos.logback.classic.db.PackageTest.class,
+ ch.qos.logback.classic.spi.PackageTest.class,
+ ch.qos.logback.classic.turbo.PackageTest.class,
+ ch.qos.logback.classic.sift.PackageTest.class})
+public class AllClassicTest {
- public static Test suite() {
- TestSuite suite = new TestSuite();
- suite.addTest(org.slf4j.impl.PackageTest.suite());
- suite.addTest(new JUnit4TestAdapter(
- ch.qos.logback.classic.PackageTest.class));
- suite.addTest(ch.qos.logback.classic.util.PackageTest.suite());
- suite.addTest(ch.qos.logback.classic.control.PackageTest.suite());
- suite.addTest(ch.qos.logback.classic.joran.PackageTest.suite());
- suite.addTest(ch.qos.logback.classic.jmx.PackageTest.suite());
- suite.addTest(ch.qos.logback.classic.boolex.PackageTest.suite());
- suite.addTest(ch.qos.logback.classic.selector.PackageTest.suite());
- suite.addTest(ch.qos.logback.classic.html.PackageTest.suite());
- suite.addTest(ch.qos.logback.classic.net.PackageTest.suite());
- suite.addTest(ch.qos.logback.classic.pattern.PackageTest.suite());
- suite.addTest(ch.qos.logback.classic.db.PackageTest.suite());
- suite.addTest(ch.qos.logback.classic.spi.PackageTest.suite());
- suite.addTest(new JUnit4TestAdapter(ch.qos.logback.classic.turbo.PackageTest.class));
- suite.addTest(new JUnit4TestAdapter(
- ch.qos.logback.classic.sift.PackageTest.class));
- return suite;
- }
}
Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/boolex/JaninoEventEvaluatorTest.java
==============================================================================
--- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/boolex/JaninoEventEvaluatorTest.java (original)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/boolex/JaninoEventEvaluatorTest.java Fri Dec 26 14:55:28 2008
@@ -1,7 +1,10 @@
package ch.qos.logback.classic.boolex;
-import junit.framework.TestCase;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import org.junit.Test;
import org.slf4j.MarkerFactory;
import ch.qos.logback.classic.Level;
@@ -13,16 +16,14 @@
import ch.qos.logback.core.boolex.JaninoEventEvaluatorBase;
import ch.qos.logback.core.boolex.Matcher;
-public class JaninoEventEvaluatorTest extends TestCase {
+public class JaninoEventEvaluatorTest {
LoggerContext loggerContext = new LoggerContext();
Logger logger = loggerContext.getLogger(ConverterTest.class);
Matcher matcherX = new Matcher();
- public JaninoEventEvaluatorTest(String arg0) {
- super(arg0);
-
+ public JaninoEventEvaluatorTest() {
matcherX.setName("x");
matcherX.setRegex("^Some\\s.*");
matcherX.start();
@@ -36,6 +37,7 @@
return e;
}
+ @Test
public void testBasic() throws Exception {
JaninoEventEvaluator jee = new JaninoEventEvaluator();
jee.setExpression("message.equals(\"Some message\")");
@@ -47,6 +49,7 @@
assertTrue(jee.evaluate(event));
}
+ @Test
public void testLevel() throws Exception {
JaninoEventEvaluator jee = new JaninoEventEvaluator();
jee.setExpression("level > DEBUG");
@@ -58,6 +61,7 @@
assertTrue(jee.evaluate(event));
}
+ @Test
public void testtimeStamp() throws Exception {
JaninoEventEvaluator jee = new JaninoEventEvaluator();
jee.setExpression("timeStamp > 10");
@@ -68,6 +72,7 @@
assertTrue(jee.evaluate(event));
}
+ @Test
public void testWithMatcher() throws Exception {
JaninoEventEvaluator jee = new JaninoEventEvaluator();
@@ -80,6 +85,7 @@
assertTrue(jee.evaluate(event));
}
+ @Test
public void testMarker() throws Exception {
JaninoEventEvaluator jee = new JaninoEventEvaluator();
jee.setExpression("marker.contains(\"BLUE\")");
@@ -92,6 +98,7 @@
assertTrue(jee.evaluate(event));
}
+ @Test
public void testWithNullMarker() throws Exception {
JaninoEventEvaluator jee = new JaninoEventEvaluator();
jee.setExpression("marker.contains(\"BLUE\")");
@@ -108,6 +115,7 @@
}
}
+ @Test
public void testComplex() throws Exception {
JaninoEventEvaluator jee = new JaninoEventEvaluator();
@@ -127,6 +135,7 @@
*
* @throws Exception
*/
+ @Test
public void testBogusExp1() {
JaninoEventEvaluator jee = new JaninoEventEvaluator();
@@ -145,6 +154,7 @@
}
// check that eval stops after errors
+ @Test
public void testBogusExp2() {
JaninoEventEvaluator jee = new JaninoEventEvaluator();
@@ -185,6 +195,7 @@
//System.out.println(msg + (end - start) / LEN + " nanos");
}
+ @Test
public void testLoop1() throws Exception {
JaninoEventEvaluator jee = new JaninoEventEvaluator();
jee.setExpression("timeStamp > 10");
@@ -194,6 +205,7 @@
loop(jee, "timestamp > 10]: ");
}
+ @Test
public void testLoop2() throws Exception {
JaninoEventEvaluator jee = new JaninoEventEvaluator();
jee.setExpression("x.matches(message)");
Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/boolex/PackageTest.java
==============================================================================
--- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/boolex/PackageTest.java (original)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/boolex/PackageTest.java Fri Dec 26 14:55:28 2008
@@ -9,13 +9,13 @@
*/
package ch.qos.logback.classic.boolex;
-import junit.framework.*;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
-public class PackageTest extends TestCase {
+import ch.qos.logback.classic.jmx.JMXConfiguratorTest;
- public static Test suite() {
- TestSuite suite = new TestSuite();
- suite.addTestSuite(JaninoEventEvaluatorTest.class);
- return suite;
- }
+(a)RunWith(Suite.class)
+(a)SuiteClasses(JMXConfiguratorTest.class)
+public class PackageTest {
}
\ No newline at end of file
Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/control/PackageTest.java
==============================================================================
--- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/control/PackageTest.java (original)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/control/PackageTest.java Fri Dec 26 14:55:28 2008
@@ -9,13 +9,12 @@
*/
package ch.qos.logback.classic.control;
-import junit.framework.*;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
-public class PackageTest extends TestCase {
- public static Test suite() {
- TestSuite suite = new TestSuite();
- suite.addTest(new JUnit4TestAdapter(RandomUtilTest.class));
- return suite;
- }
+(a)RunWith(Suite.class)
+(a)SuiteClasses({RandomUtilTest.class})
+public class PackageTest {
}
\ No newline at end of file
Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/db/PackageTest.java
==============================================================================
--- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/db/PackageTest.java (original)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/db/PackageTest.java Fri Dec 26 14:55:28 2008
@@ -9,13 +9,11 @@
*/
package ch.qos.logback.classic.db;
-import junit.framework.*;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
-public class PackageTest extends TestCase {
-
- public static Test suite() {
- TestSuite suite = new TestSuite();
- suite.addTest(new JUnit4TestAdapter(DBAppenderTest.class));
- return suite;
- }
+(a)RunWith(Suite.class)
+@SuiteClasses( {DBAppenderTest.class})
+public class PackageTest {
}
\ No newline at end of file
Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/html/PackageTest.java
==============================================================================
--- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/html/PackageTest.java (original)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/html/PackageTest.java Fri Dec 26 14:55:28 2008
@@ -9,16 +9,11 @@
*/
package ch.qos.logback.classic.html;
-import junit.framework.JUnit4TestAdapter;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
-public class PackageTest extends TestCase {
-
- public static Test suite() {
- TestSuite suite = new TestSuite();
- suite.addTest(new JUnit4TestAdapter(HTMLLayoutTest.class));
- return suite;
- }
+(a)RunWith(Suite.class)
+(a)SuiteClasses(HTMLLayoutTest.class)
+public class PackageTest {
}
\ No newline at end of file
Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/jmx/PackageTest.java
==============================================================================
--- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/jmx/PackageTest.java (original)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/jmx/PackageTest.java Fri Dec 26 14:55:28 2008
@@ -10,16 +10,12 @@
package ch.qos.logback.classic.jmx;
-import junit.framework.JUnit4TestAdapter;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
-public class PackageTest extends TestCase {
+(a)RunWith(Suite.class)
+(a)SuiteClasses(JMXConfiguratorTest.class)
+public class PackageTest {
- public static Test suite() {
- TestSuite suite = new TestSuite();
- suite.addTest(new JUnit4TestAdapter (JMXConfiguratorTest.class));
- return suite;
- }
}
\ No newline at end of file
Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/joran/EvaluatorJoranTest.java
==============================================================================
--- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/joran/EvaluatorJoranTest.java (original)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/joran/EvaluatorJoranTest.java Fri Dec 26 14:55:28 2008
@@ -1,18 +1,20 @@
/**
- * LOGBack: the generic, reliable, fast and flexible logging framework.
- *
- * Copyright (C) 1999-2006, QOS.ch
- *
- * This library is free software, you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation.
+ * Logback: the generic, reliable, fast and flexible logging framework.
+ *
+ * Copyright (C) 2000-2008, QOS.ch
+ *
+ * This library is free software, you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation.
*/
package ch.qos.logback.classic.joran;
-import java.util.Map;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
-import junit.framework.TestCase;
+import java.util.Map;
+import org.junit.Test;
import org.slf4j.Marker;
import org.slf4j.MarkerFactory;
@@ -27,9 +29,10 @@
import ch.qos.logback.core.joran.spi.JoranException;
-public class EvaluatorJoranTest extends TestCase {
+public class EvaluatorJoranTest {
- public void xtest() throws NullPointerException, EvaluationException, JoranException {
+ @Test
+ public void testSimpleEvaluator() throws NullPointerException, EvaluationException, JoranException {
JoranConfigurator jc = new JoranConfigurator();
LoggerContext loggerContext = new LoggerContext();
jc.setContext(loggerContext);
@@ -50,6 +53,7 @@
//StatusPrinter.print(loggerContext.getStatusManager());
}
+ @Test
public void testIgnoreMarker() throws NullPointerException, EvaluationException, JoranException {
JoranConfigurator jc = new JoranConfigurator();
LoggerContext loggerContext = new LoggerContext();
@@ -80,6 +84,7 @@
//StatusPrinter.print(loggerContext.getStatusManager());
}
+ @Test
public void testMultipleConditionsInExpression() throws NullPointerException, EvaluationException {
LoggerContext loggerContext = new LoggerContext();
Logger logger = loggerContext.getLogger("xx");
Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/joran/PackageTest.java
==============================================================================
--- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/joran/PackageTest.java (original)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/joran/PackageTest.java Fri Dec 26 14:55:28 2008
@@ -1,22 +1,20 @@
-/**
- * LOGBack: the reliable, fast and flexible logging library for Java.
- *
- * Copyright (C) 1999-2005, QOS.ch, LOGBack.com
- *
- * This library is free software, you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation.
+/**
+ * Logback: the generic, reliable, fast and flexible logging framework.
+ *
+ * Copyright (C) 2000-2008, QOS.ch
+ *
+ * This library is free software, you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation.
*/
package ch.qos.logback.classic.joran;
-import junit.framework.*;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
-public class PackageTest extends TestCase {
- public static Test suite() {
- TestSuite suite = new TestSuite();
- suite.addTest(new JUnit4TestAdapter(JoranConfiguratorTest.class));
- suite.addTestSuite(EvaluatorJoranTest.class);
- return suite;
- }
+(a)RunWith(Suite.class)
+@SuiteClasses( { JoranConfiguratorTest.class, EvaluatorJoranTest.class})
+public class PackageTest {
}
\ No newline at end of file
Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/JMSTopicAppenderTest.java
==============================================================================
--- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/JMSTopicAppenderTest.java (original)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/JMSTopicAppenderTest.java Fri Dec 26 14:55:28 2008
@@ -1,11 +1,19 @@
package ch.qos.logback.classic.net;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
import java.util.Properties;
import javax.jms.ObjectMessage;
import javax.naming.Context;
-import junit.framework.TestCase;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.net.mock.MockTopic;
import ch.qos.logback.classic.net.mock.MockTopicConnectionFactory;
@@ -15,13 +23,14 @@
import ch.qos.logback.classic.util.MockInitialContextFactory;
import ch.qos.logback.core.ContextBase;
-public class JMSTopicAppenderTest extends TestCase {
+public class JMSTopicAppenderTest {
ch.qos.logback.core.Context context;
JMSTopicAppender appender;
- @Override
- protected void setUp() throws Exception {
+
+ @Before
+ public void setUp() throws Exception {
context = new ContextBase();
appender = new JMSTopicAppender();
appender.setContext(context);
@@ -34,17 +43,17 @@
MockInitialContext mic = MockInitialContextFactory.getContext();
mic.map.put(appender.tcfBindingName, new MockTopicConnectionFactory());
mic.map.put(appender.topicBindingName, new MockTopic(appender.topicBindingName));
-
- super.setUp();
+
}
- @Override
- protected void tearDown() throws Exception {
+
+ @After
+ public void tearDown() throws Exception {
appender = null;
context = null;
- super.tearDown();
}
+ @Test
public void testAppendOk() {
appender.start();
@@ -61,6 +70,7 @@
}
}
+ @Test
public void testAppendFailure() {
appender.start();
@@ -78,6 +88,7 @@
assertFalse(appender.isStarted());
}
+ @Test
public void testBuildEnvProperties() {
appender.setInitialContextFactoryName("icfn");
appender.setProviderURL("url");
@@ -98,6 +109,7 @@
.getProperty(Context.SECURITY_CREDENTIALS));
}
+ @Test
public void testBuildEnvPropertiesWithNullProviderURL() {
appender.setInitialContextFactoryName("icfn");
appender.setProviderURL(null);
@@ -120,6 +132,7 @@
assertEquals(1, context.getStatusManager().getCount());
}
+ @Test
public void testBuildEnvPropertiesWithNullCredentials() {
appender.setInitialContextFactoryName("icfn");
appender.setProviderURL("url");
@@ -142,6 +155,7 @@
assertEquals(1, context.getStatusManager().getCount());
}
+ @Test
public void testBuildEnvPropertiesWithPkgNull() {
appender.setInitialContextFactoryName("icfn");
appender.setProviderURL("url");
@@ -164,6 +178,7 @@
assertEquals(0, context.getStatusManager().getCount());
}
+ @Test
public void testStartMinimalInfo() {
//let's leave only what's in the setup()
//method, minus the providerURL
@@ -179,6 +194,7 @@
}
}
+ @Test
public void testStartUserPass() {
appender.setUserName("test");
appender.setPassword("test");
@@ -194,6 +210,7 @@
}
}
+ @Test
public void testStartFails() {
appender.topicBindingName = null;
Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/PackageTest.java
==============================================================================
--- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/PackageTest.java (original)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/net/PackageTest.java Fri Dec 26 14:55:28 2008
@@ -9,20 +9,12 @@
*/
package ch.qos.logback.classic.net;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
-import junit.framework.JUnit4TestAdapter;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-public class PackageTest extends TestCase {
-
- public static Test suite() {
- TestSuite suite = new TestSuite();
- suite.addTest(new JUnit4TestAdapter(SyslogAppenderTest.class));
- suite.addTest(new JUnit4TestAdapter(DilutedSMTPAppenderTest.class));
- suite.addTest(new JUnit4TestAdapter(SocketAppenderTest.class));
- suite.addTestSuite(JMSTopicAppenderTest.class);
- return suite;
- }
+(a)RunWith(Suite.class)
+@SuiteClasses( { SyslogAppenderTest.class, DilutedSMTPAppenderTest.class,
+ SocketAppenderTest.class, JMSTopicAppenderTest.class })
+public class PackageTest {
}
\ No newline at end of file
Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/pattern/MDCConverterTest.java
==============================================================================
--- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/pattern/MDCConverterTest.java (original)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/pattern/MDCConverterTest.java Fri Dec 26 14:55:28 2008
@@ -1,7 +1,10 @@
package ch.qos.logback.classic.pattern;
-import junit.framework.TestCase;
+import static org.junit.Assert.*;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
import org.slf4j.MDC;
import ch.qos.logback.classic.Level;
@@ -9,23 +12,26 @@
import ch.qos.logback.classic.spi.LoggingEvent;
import ch.qos.logback.core.util.SystemInfo;
-public class MDCConverterTest extends TestCase {
+public class MDCConverterTest {
LoggerContext lc;
MDCConverter converter;
+ @Before
public void setUp() throws Exception {
lc = new LoggerContext();
converter = new MDCConverter();
converter.start();
}
+ @After
public void tearDown() throws Exception {
lc = null;
converter.stop();
converter = null;
}
+ @Test
public void testConverWithOneEntry() {
MDC.clear();
MDC.put("testKey", "testValue");
@@ -34,6 +40,7 @@
assertEquals("testKey=testValue", result);
}
+ @Test
public void testConverWithMultipleEntries() {
MDC.clear();
MDC.put("testKey", "testValue");
Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/pattern/MarkerConverterTest.java
==============================================================================
--- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/pattern/MarkerConverterTest.java (original)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/pattern/MarkerConverterTest.java Fri Dec 26 14:55:28 2008
@@ -1,7 +1,10 @@
package ch.qos.logback.classic.pattern;
-import junit.framework.TestCase;
+import static org.junit.Assert.*;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
import org.slf4j.IMarkerFactory;
import org.slf4j.Marker;
import org.slf4j.helpers.BasicMarkerFactory;
@@ -10,30 +13,34 @@
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.spi.LoggingEvent;
-public class MarkerConverterTest extends TestCase {
+public class MarkerConverterTest {
LoggerContext lc;
MarkerConverter converter;
// use a different facotry for each test so that they are independent
IMarkerFactory markerFactory = new BasicMarkerFactory();
+ @Before
public void setUp() throws Exception {
lc = new LoggerContext();
converter = new MarkerConverter();
converter.start();
}
+ @After
public void tearDown() throws Exception {
lc = null;
converter.stop();
converter = null;
}
+ @Test
public void testWithNullMarker() {
String result = converter.convert(createLoggingEvent(null));
assertEquals("", result);
}
+ @Test
public void testWithMarker() {
String name = "test";
Marker marker = markerFactory.getMarker(name);
@@ -41,6 +48,7 @@
assertEquals(name, result);
}
+ @Test
public void testWithOneChildMarker() {
Marker marker = markerFactory.getMarker("test");
marker.add(markerFactory.getMarker("child"));
@@ -50,6 +58,7 @@
assertEquals("test [ child ]", result);
}
+ @Test
public void testWithSeveralChildMarker() {
Marker marker = markerFactory.getMarker("testParent");
marker.add(markerFactory.getMarker("child1"));
Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/pattern/PackageTest.java
==============================================================================
--- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/pattern/PackageTest.java (original)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/pattern/PackageTest.java Fri Dec 26 14:55:28 2008
@@ -1,28 +1,22 @@
/**
- * LOGBack: the reliable, fast and flexible logging library for Java.
- *
- * Copyright (C) 1999-2006, QOS.ch
- *
- * This library is free software, you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation.
+ * Logback: the generic, reliable, fast and flexible logging framework.
+ *
+ * Copyright (C) 2000-2008, QOS.ch
+ *
+ * This library is free software, you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation.
*/
package ch.qos.logback.classic.pattern;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
-import junit.framework.JUnit4TestAdapter;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
+(a)RunWith(Suite.class)
+@SuiteClasses( { ConverterTest.class,
+ TargetLengthBasedClassNameAbbreviatorTest.class, MDCConverterTest.class,
+ MarkerConverterTest.class })
+public class PackageTest {
-public class PackageTest extends TestCase {
-
- public static Test suite() {
- TestSuite suite = new TestSuite();
- suite.addTest(new JUnit4TestAdapter(ConverterTest.class));
- suite.addTest(new JUnit4TestAdapter(TargetLengthBasedClassNameAbbreviatorTest.class));
- suite.addTestSuite(MDCConverterTest.class);
- suite.addTestSuite(MarkerConverterTest.class);
- return suite;
- }
}
\ No newline at end of file
Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/selector/ContextDetachingSCLTest.java
==============================================================================
--- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/selector/ContextDetachingSCLTest.java (original)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/selector/ContextDetachingSCLTest.java Fri Dec 26 14:55:28 2008
@@ -1,7 +1,10 @@
package ch.qos.logback.classic.selector;
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
import org.slf4j.LoggerFactory;
import org.slf4j.impl.StaticLoggerBinder;
@@ -10,14 +13,14 @@
import ch.qos.logback.classic.util.MockInitialContext;
import ch.qos.logback.classic.util.MockInitialContextFactory;
-public class ContextDetachingSCLTest extends TestCase {
+public class ContextDetachingSCLTest {
static String INITIAL_CONTEXT_KEY = "java.naming.factory.initial";
ContextDetachingSCL listener;
- @Override
- protected void setUp() throws Exception {
+ @Before
+ public void setUp() throws Exception {
System.setProperty(ClassicGlobal.LOGBACK_CONTEXT_SELECTOR, "JNDI");
//LoggerFactory.setup();
@@ -33,21 +36,22 @@
//this call will create the context "toto"
LoggerFactory.getLogger(ContextDetachingSCLTest.class);
- super.setUp();
}
- @Override
- protected void tearDown() throws Exception {
+ @After
+ public void tearDown() throws Exception {
System.clearProperty(INITIAL_CONTEXT_KEY);
- super.tearDown();
}
-
+
+ @Test
public void testDetach() {
ContextJNDISelector selector = (ContextJNDISelector) StaticLoggerBinder.getSingleton().getContextSelector();
listener.contextDestroyed(null);
assertEquals(0, selector.getCount());
}
+
+ @Test
public void testDetachWithMissingContext() {
MockInitialContext mic = MockInitialContextFactory.getContext();
mic.map.put(ClassicGlobal.JNDI_CONTEXT_NAME, "tata");
Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/selector/PackageTest.java
==============================================================================
--- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/selector/PackageTest.java (original)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/selector/PackageTest.java Fri Dec 26 14:55:28 2008
@@ -9,14 +9,11 @@
*/
package ch.qos.logback.classic.selector;
-import junit.framework.*;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
-public class PackageTest extends TestCase {
-
- public static Test suite() {
- TestSuite suite = new TestSuite();
- suite.addTest(new JUnit4TestAdapter(ContextJNDISelectorTest.class));
- suite.addTestSuite(ContextDetachingSCLTest.class);
- return suite;
- }
+(a)RunWith(Suite.class)
+(a)SuiteClasses({ContextJNDISelectorTest.class, ContextDetachingSCLTest.class})
+public class PackageTest {
}
\ No newline at end of file
Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/spi/CallerDataTest.java
==============================================================================
--- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/spi/CallerDataTest.java (original)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/spi/CallerDataTest.java Fri Dec 26 14:55:28 2008
@@ -1,21 +1,15 @@
package ch.qos.logback.classic.spi;
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
-public class CallerDataTest extends TestCase {
+import org.junit.Test;
- public CallerDataTest(String name) {
- super(name);
- }
-
- protected void setUp() throws Exception {
- super.setUp();
- }
+public class CallerDataTest {
- protected void tearDown() throws Exception {
- super.tearDown();
- }
+ @Test
public void testBasic() {
Throwable t = new Throwable();
StackTraceElement[] steArray = t.getStackTrace();
@@ -31,6 +25,7 @@
* extracted, CallerData.extract does not throw an exception
*
*/
+ @Test
public void testDeferredProcessing() {
CallerData[] cda = CallerData.extract(new Throwable(), "com.inexistent.foo");
assertNotNull(cda);
Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/spi/ContextListenerTest.java
==============================================================================
--- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/spi/ContextListenerTest.java (original)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/spi/ContextListenerTest.java Fri Dec 26 14:55:28 2008
@@ -1,27 +1,33 @@
package ch.qos.logback.classic.spi;
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Before;
+import org.junit.Test;
+
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.spi.BasicContextListener.UpdateType;
-public class ContextListenerTest extends TestCase {
+public class ContextListenerTest {
LoggerContext context;
BasicContextListener listener;
+ @Before
public void setUp() throws Exception {
context = new LoggerContext();
listener = new BasicContextListener();
context.addListener(listener);
- super.setUp();
}
-
+
+ @Test
public void testNotifyOnReset() {
context.reset();
assertEquals(UpdateType.RESET, listener.updateType);
assertEquals(listener.context, context);
}
+ @Test
public void testNotifyOnStopResistant() {
listener.setResetResistant(true);
context.stop();
@@ -29,13 +35,14 @@
assertEquals(listener.context, context);
}
+ @Test
public void testNotifyOnStopNotResistant() {
context.stop();
assertEquals(UpdateType.RESET, listener.updateType);
assertEquals(listener.context, context);
}
-
+ @Test
public void testNotifyOnStart() {
context.start();
assertEquals(UpdateType.START, listener.updateType);
Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/spi/PackageTest.java
==============================================================================
--- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/spi/PackageTest.java (original)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/spi/PackageTest.java Fri Dec 26 14:55:28 2008
@@ -9,23 +9,14 @@
*/
package ch.qos.logback.classic.spi;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
-import junit.framework.JUnit4TestAdapter;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-public class PackageTest extends TestCase {
-
- public static Test suite() {
- TestSuite suite = new TestSuite();
- suite.addTestSuite(ContextListenerTest.class);
- suite.addTestSuite(CallerDataTest.class);
- suite.addTest(new JUnit4TestAdapter (LoggerComparatorTest.class));
- suite.addTest(new JUnit4TestAdapter (LoggingEventSerializationTest.class));
- suite.addTest(new JUnit4TestAdapter(LoggingEventSerializationPerfTest.class));
- suite.addTest(new JUnit4TestAdapter(ThrowableToDataPointTest.class));
- suite.addTest(new JUnit4TestAdapter(BasicCPDCTest.class));
- return suite;
- }
+(a)RunWith(Suite.class)
+@SuiteClasses( { ContextListenerTest.class, CallerDataTest.class,
+ LoggerComparatorTest.class, LoggingEventSerializationTest.class,
+ LoggingEventSerializationPerfTest.class, ThrowableToDataPointTest.class,
+ BasicCPDCTest.class })
+public class PackageTest {
}
\ No newline at end of file
Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/util/PackageTest.java
==============================================================================
--- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/util/PackageTest.java (original)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/util/PackageTest.java Fri Dec 26 14:55:28 2008
@@ -10,17 +10,12 @@
package ch.qos.logback.classic.util;
-import junit.framework.JUnit4TestAdapter;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
-public class PackageTest extends TestCase {
-
- public static Test suite() {
- TestSuite suite = new TestSuite();
- suite.addTest(new JUnit4TestAdapter(InitializationTest.class));
- suite.addTest(new JUnit4TestAdapter(LevelToSyslogSeverityTest.class));
- return suite;
- }
+(a)RunWith(Suite.class)
+(a)SuiteClasses({InitializationTest.class, LevelToSyslogSeverityTest.class} )
+
+public class PackageTest {
}
\ No newline at end of file
Modified: logback/trunk/logback-classic/src/test/java/org/slf4j/impl/PackageTest.java
==============================================================================
--- logback/trunk/logback-classic/src/test/java/org/slf4j/impl/PackageTest.java (original)
+++ logback/trunk/logback-classic/src/test/java/org/slf4j/impl/PackageTest.java Fri Dec 26 14:55:28 2008
@@ -9,14 +9,14 @@
*/
package org.slf4j.impl;
-import junit.framework.*;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
-public class PackageTest extends TestCase {
+import ch.qos.logback.classic.LoggerPerfTest;
+
+(a)RunWith(Suite.class)
+@SuiteClasses( { RecursiveInitializationTest.class, LoggerPerfTest.class})
+public class PackageTest {
- public static Test suite() {
- TestSuite suite = new TestSuite();
- suite.addTest(new JUnit4TestAdapter(RecursiveInitializationTest.class));
- suite.addTest(new JUnit4TestAdapter(LogbackMDCAdapterTest.class));
- return suite;
- }
}
\ No newline at end of file
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/Appender.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/Appender.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/Appender.java Fri Dec 26 14:55:28 2008
@@ -14,7 +14,7 @@
import ch.qos.logback.core.spi.LifeCycle;
-public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachable {
+public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachable<E> {
/**
* Get the name of this appender. The name uniquely identifies the appender.
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/AppenderBase.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/AppenderBase.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/AppenderBase.java Fri Dec 26 14:55:28 2008
@@ -11,22 +11,20 @@
import ch.qos.logback.core.filter.Filter;
import ch.qos.logback.core.spi.ContextAwareBase;
-import ch.qos.logback.core.spi.FilterAttachable;
import ch.qos.logback.core.spi.FilterAttachableImpl;
-import ch.qos.logback.core.spi.FilterReply;
+import ch.qos.logback.core.spi.FilterReply;
import ch.qos.logback.core.status.WarnStatus;
/**
* Sets a skeleton implementation for appenders.
*
- * <p>
- * For more information about this appender, please refer to the online manual at
- * http://logback.qos.ch/manual/appenders.html#AppenderBase
- *
+ * <p> For more information about this appender, please refer to the online
+ * manual at http://logback.qos.ch/manual/appenders.html#AppenderBase
+ *
* @author Ceki Gülcü
*/
abstract public class AppenderBase<E> extends ContextAwareBase implements
- Appender<E>, FilterAttachable {
+ Appender<E> {
protected boolean started = false;
@@ -41,7 +39,7 @@
*/
protected String name;
- private FilterAttachableImpl fai = new FilterAttachableImpl();
+ private FilterAttachableImpl<E> fai = new FilterAttachableImpl<E>();
public String getName() {
return name;
@@ -49,10 +47,9 @@
private int statusRepeatCount = 0;
private int exceptionCount = 0;
-
+
static final int ALLOWED_REPEATS = 5;
-
public synchronized void doAppend(E eventObject) {
// WARNING: The guard check MUST be the first statement in the
// doAppend() method.
@@ -77,15 +74,15 @@
if (getFilterChainDecision(eventObject) == FilterReply.DENY) {
return;
}
-
+
// ok, we now invoke derived class' implementation of append
this.append(eventObject);
- } catch(Exception e) {
+ } catch (Exception e) {
if (exceptionCount++ < ALLOWED_REPEATS) {
- addError("Appender ["+name+"] failed to append.", e);
+ addError("Appender [" + name + "] failed to append.", e);
}
- } finally {
+ } finally {
guard = false;
}
}
@@ -115,7 +112,7 @@
return this.getClass().getName() + "[" + name + "]";
}
- public void addFilter(Filter newFilter) {
+ public void addFilter(Filter<E> newFilter) {
fai.addFilter(newFilter);
}
@@ -127,10 +124,10 @@
fai.clearAllFilters();
}
- public FilterReply getFilterChainDecision(Object event) {
+ public FilterReply getFilterChainDecision(E event) {
return fai.getFilterChainDecision(event);
}
-
+
public Layout<E> getLayout() {
return null;
}
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/UnsynchronizedAppenderBase.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/UnsynchronizedAppenderBase.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/UnsynchronizedAppenderBase.java Fri Dec 26 14:55:28 2008
@@ -11,7 +11,6 @@
import ch.qos.logback.core.filter.Filter;
import ch.qos.logback.core.spi.ContextAwareBase;
-import ch.qos.logback.core.spi.FilterAttachable;
import ch.qos.logback.core.spi.FilterAttachableImpl;
import ch.qos.logback.core.spi.FilterReply;
import ch.qos.logback.core.status.WarnStatus;
@@ -24,7 +23,7 @@
* @author Ralph Goers
*/
abstract public class UnsynchronizedAppenderBase<E> extends ContextAwareBase implements
- Appender<E>, FilterAttachable {
+ Appender<E> {
protected boolean started = false;
@@ -46,7 +45,7 @@
*/
protected String name;
- private FilterAttachableImpl fai = new FilterAttachableImpl();
+ private FilterAttachableImpl<E> fai = new FilterAttachableImpl<E>();
public String getName() {
return name;
@@ -119,7 +118,7 @@
return this.getClass().getName() + "[" + name + "]";
}
- public void addFilter(Filter newFilter) {
+ public void addFilter(Filter<E> newFilter) {
fai.addFilter(newFilter);
}
@@ -131,7 +130,7 @@
fai.clearAllFilters();
}
- public FilterReply getFilterChainDecision(Object event) {
+ public FilterReply getFilterChainDecision(E event) {
return fai.getFilterChainDecision(event);
}
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/boolex/EventEvaluator.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/boolex/EventEvaluator.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/boolex/EventEvaluator.java Fri Dec 26 14:55:28 2008
@@ -24,7 +24,7 @@
* @author Ceki Gülcü
*/
-public interface EventEvaluator extends ContextAware, LifeCycle {
+public interface EventEvaluator<E> extends ContextAware, LifeCycle {
/**
@@ -40,7 +40,7 @@
* @throws NullPointerException can be thrown in presence of null values
* @throws EvaluationException Thrown during evaluation
*/
- boolean evaluate(Object event) throws NullPointerException, EvaluationException;
+ boolean evaluate(E event) throws NullPointerException, EvaluationException;
Added: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/boolex/EventEvaluatorBase.java
==============================================================================
--- (empty file)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/boolex/EventEvaluatorBase.java Fri Dec 26 14:55:28 2008
@@ -0,0 +1,45 @@
+/**
+ * Logback: the generic, reliable, fast and flexible logging framework.
+ *
+ * Copyright (C) 2000-2008, QOS.ch
+ *
+ * This library is free software, you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation.
+ */
+package ch.qos.logback.core.boolex;
+
+import ch.qos.logback.core.spi.ContextAwareBase;
+
+abstract public class EventEvaluatorBase<E> extends ContextAwareBase implements
+ EventEvaluator<E> {
+
+ String name;
+ boolean started;
+
+ public String getName() {
+
+ return name;
+ }
+
+ public void setName(String name) {
+ if (this.name != null) {
+ throw new IllegalStateException("name has been already set");
+ }
+ this.name = name;
+ }
+
+ public boolean isStarted() {
+ return started;
+ }
+
+ public void start() {
+ started = true;
+
+ }
+
+ public void stop() {
+ started = false;
+ }
+
+}
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/boolex/JaninoEventEvaluatorBase.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/boolex/JaninoEventEvaluatorBase.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/boolex/JaninoEventEvaluatorBase.java Fri Dec 26 14:55:28 2008
@@ -5,11 +5,7 @@
import org.codehaus.janino.ExpressionEvaluator;
-import ch.qos.logback.core.spi.ContextAwareBase;
-import ch.qos.logback.core.spi.LifeCycle;
-
-abstract public class JaninoEventEvaluatorBase extends ContextAwareBase
- implements EventEvaluator, LifeCycle {
+abstract public class JaninoEventEvaluatorBase<E> extends EventEvaluatorBase<E>{
static Class EXPRESSION_TYPE = boolean.class;
static Class[] THROWN_EXCEPTIONS = new Class[1];
@@ -19,10 +15,7 @@
THROWN_EXCEPTIONS[0] = EvaluationException.class;
}
-
- protected boolean start = false;
- private String name;
private String expression;
ExpressionEvaluator ee;
@@ -34,33 +27,26 @@
abstract protected Class[] getParameterTypes();
- abstract protected Object[] getParameterValues(Object event);
+ abstract protected Object[] getParameterValues(E event);
protected List<Matcher> matcherList = new ArrayList<Matcher>();
- public boolean isStarted() {
- return start;
- }
-
- public void stop() {
- start = false;
- }
-
+ @Override
public void start() {
try {
assert context != null;
ClassLoader cl = context.getClass().getClassLoader();
ee = new ExpressionEvaluator(getDecoratedExpression(), EXPRESSION_TYPE,
getParameterNames(), getParameterTypes(), THROWN_EXCEPTIONS, cl);
- start = true;
+ super.start();
} catch (Exception e) {
addError(
"Could not start evaluator with expression [" + expression + "]", e);
}
}
- public boolean evaluate(Object event) throws EvaluationException {
- if (!start) {
+ public boolean evaluate(E event) throws EvaluationException {
+ if (!isStarted()) {
throw new IllegalStateException("Evaluator [" + name + "] was called in stopped state");
}
try {
@@ -69,24 +55,13 @@
} catch (Exception ex) {
errorCount++;
if (errorCount >= ERROR_THRESHOLD) {
- start = false;
+ stop();
}
throw new EvaluationException("Evaluator [" + name
+ "] caused an exception", ex);
}
}
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- if (this.name != null) {
- throw new IllegalStateException("name has been already set");
- }
- this.name = name;
- }
-
public String getExpression() {
return expression;
}
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/boolex/Matcher.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/boolex/Matcher.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/boolex/Matcher.java Fri Dec 26 14:55:28 2008
@@ -1,3 +1,12 @@
+/**
+ * Logback: the generic, reliable, fast and flexible logging framework.
+ *
+ * Copyright (C) 2000-2008, QOS.ch
+ *
+ * This library is free software, you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation.
+ */
package ch.qos.logback.core.boolex;
import java.util.regex.Pattern;
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/filter/AbstractMatcherFilter.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/filter/AbstractMatcherFilter.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/filter/AbstractMatcherFilter.java Fri Dec 26 14:55:28 2008
@@ -2,7 +2,7 @@
import ch.qos.logback.core.spi.FilterReply;
-public abstract class AbstractMatcherFilter extends Filter {
+public abstract class AbstractMatcherFilter<E> extends Filter<E> {
protected FilterReply onMatch = FilterReply.NEUTRAL;
protected FilterReply onMismatch = FilterReply.NEUTRAL;
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/filter/EvaluatorFilter.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/filter/EvaluatorFilter.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/filter/EvaluatorFilter.java Fri Dec 26 14:55:28 2008
@@ -22,9 +22,9 @@
* @author Sébastien Pennec
*/
-public class EvaluatorFilter extends AbstractMatcherFilter {
+public class EvaluatorFilter<E> extends AbstractMatcherFilter<E> {
- EventEvaluator evaluator;
+ EventEvaluator<E> evaluator;
@Override
public void start() {
@@ -35,16 +35,16 @@
}
}
- public EventEvaluator getEvaluator() {
+ public EventEvaluator<E> getEvaluator() {
return evaluator;
}
- public void setEvaluator(EventEvaluator evaluator) {
+ public void setEvaluator(EventEvaluator<E> evaluator) {
this.evaluator = evaluator;
}
- public FilterReply decide(Object event) {
+ public FilterReply decide(E event) {
// let us not throw an exception
// see also bug #17.
if(!isStarted() || !evaluator.isStarted()) {
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/filter/Filter.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/filter/Filter.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/filter/Filter.java Fri Dec 26 14:55:28 2008
@@ -5,25 +5,20 @@
import ch.qos.logback.core.spi.LifeCycle;
/**
- * Users should extend this class to implement customized event filtering in
- * addition to the build-in filtering rules. It is suggested that you first use
- * and understand the built-in rules before rushing to write your own custom
- * filters.
- * <p>
- * For more information about filters, please refer to the online manual at
+ * Users should extend this class to implement customized event filtering.
+ *
+ * <p>We suggest that you first try to use the built-in rules before rushing to
+ * write your own custom filters.
+ *
+ * <p>For more information about filters, please refer to the online manual at
* http://logback.qos.ch/manual/filters.html
*
* @author Ceki Gülcü
*/
-public abstract class Filter extends ContextAwareBase implements LifeCycle {
+public abstract class Filter<E> extends ContextAwareBase implements LifeCycle {
- /**
- * Points to the next filter in the filter chain.
- */
- private Filter next;
-
private String name;
-
+
boolean start = false;
public void start() {
@@ -46,23 +41,9 @@
* consulting with other filters in the chain.
*
* @param event
- * The event to decide upon.
+ * The event to decide upon.
*/
- public abstract FilterReply decide(Object event);
-
- /**
- * Set the next filter pointer.
- */
- public void setNext(Filter next) {
- this.next = next;
- }
-
- /**
- * Return the pointer to the next filter;
- */
- public Filter getNext() {
- return next;
- }
+ public abstract FilterReply decide(E event);
public String getName() {
return name;
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/AbstractEventEvaluatorAction.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/AbstractEventEvaluatorAction.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/AbstractEventEvaluatorAction.java Fri Dec 26 14:55:28 2008
@@ -1,7 +1,7 @@
/**
- * LOGBack: the generic, reliable, fast and flexible logging framework.
+ * Logback: the generic, reliable, fast and flexible logging framework.
*
- * Copyright (C) 1999-2006, QOS.ch
+ * Copyright (C) 2000-2008, QOS.ch
*
* This library is free software, you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
@@ -10,8 +10,6 @@
package ch.qos.logback.core.joran.action;
-
-
import java.util.Map;
import org.xml.sax.Attributes;
@@ -23,59 +21,57 @@
import ch.qos.logback.core.spi.LifeCycle;
import ch.qos.logback.core.util.OptionHelper;
-
abstract public class AbstractEventEvaluatorAction extends Action {
-
+
EventEvaluator evaluator;
boolean inError = false;
/**
* Instantiates an evaluator of the given class and sets its name.
*/
+ @SuppressWarnings("unchecked")
public void begin(InterpretationContext ec, String name, Attributes attributes) {
// Let us forget about previous errors (in this instance)
inError = false;
evaluator = null;
-
+
String className = attributes.getValue(CLASS_ATTRIBUTE);
- if(OptionHelper.isEmpty(className)) {
+ if (OptionHelper.isEmpty(className)) {
className = defaultClassName();
- addWarn("Assuming default evaluator class ["+className+"]");
+ addWarn("Assuming default evaluator class [" + className + "]");
}
- if(OptionHelper.isEmpty(className)) {
+ if (OptionHelper.isEmpty(className)) {
className = defaultClassName();
inError = true;
- addError("Mandatory \""+CLASS_ATTRIBUTE+"\" attribute not set for <evaluator>");
+ addError("Mandatory \"" + CLASS_ATTRIBUTE
+ + "\" attribute not set for <evaluator>");
return;
}
-
+
String evaluatorName = attributes.getValue(Action.NAME_ATTRIBUTE);
- if(OptionHelper.isEmpty(evaluatorName)) {
+ if (OptionHelper.isEmpty(evaluatorName)) {
inError = true;
- addError("Mandatory \""+NAME_ATTRIBUTE+"\" attribute not set for <evaluator>");
+ addError("Mandatory \"" + NAME_ATTRIBUTE
+ + "\" attribute not set for <evaluator>");
return;
}
try {
- evaluator = (EventEvaluator)
- OptionHelper.instantiateByClassName(
+ evaluator = (EventEvaluator) OptionHelper.instantiateByClassName(
className, ch.qos.logback.core.boolex.EventEvaluator.class, context);
-
- if(isOfCorrectType(evaluator)) {
- evaluator.setContext(this.context);
- evaluator.setName(evaluatorName);
-
- if (ec.getObjectStack().size() > 0 && ec.peekObject() instanceof EvaluatorFilter) {
- ((EvaluatorFilter)ec.peekObject()).setEvaluator(evaluator);
- }
-
- ec.pushObject(evaluator);
- addInfo("Adding evaluator named ["+evaluatorName+"] to the object stack");
- } else {
- inError = true;
- addError("Evaluator of type ["+className+"] is not of the desired type");
+
+ evaluator.setContext(this.context);
+ evaluator.setName(evaluatorName);
+
+ if (ec.getObjectStack().size() > 0
+ && ec.peekObject() instanceof EvaluatorFilter) {
+ ((EvaluatorFilter) ec.peekObject()).setEvaluator(evaluator);
}
+ ec.pushObject(evaluator);
+ addInfo("Adding evaluator named [" + evaluatorName
+ + "] to the object stack");
+
} catch (Exception oops) {
inError = true;
addError("Could not create evaluator of type " + className + "].", oops);
@@ -83,22 +79,15 @@
}
/**
- * Is the layout of the desired type?
- * @param layout
- * @return true if the layout is of the correct type
- */
- abstract protected boolean isOfCorrectType(EventEvaluator ee);
-
- /**
* Returns a default class name in case the class attribute is not specified
+ *
* @return
*/
abstract protected String defaultClassName();
-
-
+
/**
- * Once the children elements are also parsed, now is the time to activate
- * the evaluator options.
+ * Once the children elements are also parsed, now is the time to activate the
+ * evaluator options.
*/
@SuppressWarnings("unchecked")
public void end(InterpretationContext ec, String e) {
@@ -108,23 +97,22 @@
if (evaluator instanceof LifeCycle) {
((LifeCycle) evaluator).start();
- addInfo("Starting evaluator named ["+evaluator.getName()+"]");
+ addInfo("Starting evaluator named [" + evaluator.getName() + "]");
}
Object o = ec.peekObject();
if (o != evaluator) {
- addWarn(
- "The object on the top the of the stack is not the evaluator pushed earlier.");
+ addWarn("The object on the top the of the stack is not the evaluator pushed earlier.");
} else {
ec.popObject();
try {
- Map<String, EventEvaluator> evaluatorMap = (Map<String, EventEvaluator>) context.getObject(CoreConstants.EVALUATOR_MAP);
+ Map<String, EventEvaluator> evaluatorMap = (Map<String, EventEvaluator>) context
+ .getObject(CoreConstants.EVALUATOR_MAP);
evaluatorMap.put(evaluator.getName(), evaluator);
} catch (Exception ex) {
- addError(
- "Could not set evaluator named ["+evaluator+"].", ex);
+ addError("Could not set evaluator named [" + evaluator + "].", ex);
}
}
}
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/IADataForComplexProperty.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/IADataForComplexProperty.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/IADataForComplexProperty.java Fri Dec 26 14:55:28 2008
@@ -12,7 +12,7 @@
final PropertySetter parentBean;
final AggregationType aggregationType;
final String complexPropertyName;
- Object nestedComplexProperty;
+ private Object nestedComplexProperty;
boolean inError;
public IADataForComplexProperty(PropertySetter parentBean, AggregationType aggregationType, String complexPropertyName) {
@@ -32,6 +32,10 @@
public String getComplexPropertyName() {
return complexPropertyName;
}
+
+ public void setNestedComplexProperty(Object nestedComplexProperty) {
+ this.nestedComplexProperty = nestedComplexProperty;
+ }
}
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/MatcherAction.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/MatcherAction.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/MatcherAction.java Fri Dec 26 14:55:28 2008
@@ -27,6 +27,8 @@
public void begin(InterpretationContext ec, String localName, Attributes attributes)
throws ActionException {
+ // TODO can we replace MarcherAction by an implicit action?
+
matcher = null;
inError = false;
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/NestedComplexPropertyIA.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/NestedComplexPropertyIA.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/NestedComplexPropertyIA.java Fri Dec 26 14:55:28 2008
@@ -74,7 +74,8 @@
return true;
default:
- addError("PropertySetter.computeAggregationType returned " + aggregationType);
+ addError("PropertySetter.computeAggregationType returned "
+ + aggregationType);
return false;
}
}
@@ -89,43 +90,34 @@
String className = attributes.getValue(CLASS_ATTRIBUTE);
// perform variable name substitution
className = ec.subst(className);
- if (className == null) {
+
+ // guess class name via implicit rules
+ if (OptionHelper.isEmpty(className)) {
PropertySetter parentBean = actionData.parentBean;
- className = parentBean.getDefaultClassNameByAnnonation(actionData
+ className = parentBean.getClassNameViaImplicitRules(actionData
.getComplexPropertyName(), actionData.getAggregationType());
}
if (OptionHelper.isEmpty(className)) {
- Class clazz = actionData.parentBean
- .findUnequivocallyInstantiableClass(actionData);
- if (clazz != null) {
- className = clazz.getName();
- } else {
- actionData.inError = true;
- String errMsg = "No class name attribute in [" + localName + "]";
- addError(errMsg);
-
- return;
- }
+ actionData.inError = true;
+ String errMsg = "No class name attribute in [" + localName + "]";
+ addError(errMsg);
+ return;
}
try {
- // getLogger().debug(
- // "About to instantiate component [{}] of type [{}]", localName,
- // className);
-
- actionData.nestedComplexProperty = Loader.loadClass(className, context)
- .newInstance();
+ actionData.setNestedComplexProperty(Loader.loadClass(className, context)
+ .newInstance());
// pass along the repository
- if (actionData.nestedComplexProperty instanceof ContextAware) {
- ((ContextAware) actionData.nestedComplexProperty)
+ if (actionData.getNestedComplexProperty() instanceof ContextAware) {
+ ((ContextAware) actionData.getNestedComplexProperty())
.setContext(this.context);
}
// getLogger().debug(
addInfo("Pushing component [" + localName
+ "] on top of the object stack.");
- ec.pushObject(actionData.nestedComplexProperty);
+ ec.pushObject(actionData.getNestedComplexProperty());
} catch (Exception oops) {
actionData.inError = true;
String msg = "Could not create component [" + localName + "] of type ["
@@ -145,8 +137,8 @@
return;
}
- PropertySetter nestedBean = new PropertySetter(
- actionData.nestedComplexProperty);
+ PropertySetter nestedBean = new PropertySetter(actionData
+ .getNestedComplexProperty());
nestedBean.setContext(context);
// have the nested element point to its parent if possible
@@ -154,34 +146,26 @@
nestedBean.setComplexProperty("parent", actionData.parentBean.getObj());
}
// start the nested complex attribute if it implements LifeCycle
- if (actionData.nestedComplexProperty instanceof LifeCycle) {
- ((LifeCycle) actionData.nestedComplexProperty).start();
+ if (actionData.getNestedComplexProperty() instanceof LifeCycle) {
+ ((LifeCycle) actionData.getNestedComplexProperty()).start();
}
Object o = ec.peekObject();
- if (o != actionData.nestedComplexProperty) {
+ if (o != actionData.getNestedComplexProperty()) {
addError("The object on the top the of the stack is not the component pushed earlier.");
} else {
- // getLogger().debug("Removing component from the object stack");
ec.popObject();
-
// Now let us attach the component
switch (actionData.aggregationType) {
case AS_COMPLEX_PROPERTY:
- // addInfo("Setting ["+tagName+"}] to parent of type
- // ["+actionData.parentBean.getObjClass()+"]");
-
- actionData.parentBean.setComplexProperty(tagName,
- actionData.nestedComplexProperty);
+ actionData.parentBean.setComplexProperty(tagName, actionData
+ .getNestedComplexProperty());
break;
case AS_COMPLEX_PROPERTY_COLLECTION:
- // getLogger().debug(
- // "Adding [{}] to parent of type [{}]", tagName,
- // actionData.parentBean.getObjClass());
- actionData.parentBean.addComplexProperty(tagName,
- actionData.nestedComplexProperty);
+ actionData.parentBean.addComplexProperty(tagName, actionData
+ .getNestedComplexProperty());
break;
}
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/spi/PropertySetter.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/spi/PropertySetter.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/spi/PropertySetter.java Fri Dec 26 14:55:28 2008
@@ -177,7 +177,7 @@
public AggregationType computeAggregationType(String name) {
String cName = capitalizeFirstLetter(name);
- Method addMethod = getMethod("add" + cName);
+ Method addMethod = findAdderMethod(cName);
// if the
if (addMethod != null) {
@@ -217,7 +217,7 @@
}
}
- Class<?> getParameterClassForMethod(Method method) {
+ private Class<?> getParameterClassForMethod(Method method) {
if (method == null) {
return null;
}
@@ -277,13 +277,19 @@
}
}
- boolean isUnequivocallyInstantiable(Class<?> clazz) {
+ /**
+ * Can the given clazz instantiable with certainty?
+ *
+ * @param clazz The class to test for instantiability
+ * @return true if clazz can be instantiated, and false otherwise.
+ */
+ private boolean isUnequivocallyInstantiable(Class<?> clazz) {
if (clazz.isInterface()) {
return false;
}
- // checking for constructors would be slightly more elegant, but in
- // classes
- // without any declared constructors, Class.getConstructor() returns null.
+ // checking for constructors would be more elegant, but in
+ // classes without any declared constructors, Class.getConstructor()
+ // returns null.
Object o;
try {
o = clazz.newInstance();
@@ -339,7 +345,7 @@
}
name = capitalizeFirstLetter(name);
- Method adderMethod = getMethod("add" + name);
+ Method adderMethod = findAdderMethod(name);
if (adderMethod == null) {
addError("No adder for property [" + name + "].");
@@ -530,17 +536,22 @@
return obj;
}
- public <T extends Annotation> T getAnnotation(String name,
- Class<T> annonationClass, AggregationType aggregationType) {
+ Method getRelevantMethod(String name, AggregationType aggregationType) {
String cName = capitalizeFirstLetter(name);
Method relevantMethod;
if (aggregationType == AggregationType.AS_COMPLEX_PROPERTY_COLLECTION) {
- relevantMethod = getMethod("add" + cName);
+ relevantMethod = findAdderMethod(cName);
} else if (aggregationType == AggregationType.AS_COMPLEX_PROPERTY) {
relevantMethod = findSetterMethod(cName);
} else {
throw new IllegalStateException(aggregationType + " not allowed here");
}
+ return relevantMethod;
+ }
+
+ <T extends Annotation> T getAnnotation(String name, Class<T> annonationClass,
+ Method relevantMethod) {
+
if (relevantMethod != null) {
return relevantMethod.getAnnotation(annonationClass);
} else {
@@ -548,11 +559,9 @@
}
}
- public String getDefaultClassNameByAnnonation(String name,
- AggregationType aggregationType) {
-
+ String getDefaultClassNameByAnnonation(String name, Method relevantMethod) {
DefaultClass defaultClassAnnon = getAnnotation(name, DefaultClass.class,
- aggregationType);
+ relevantMethod);
if (defaultClassAnnon != null) {
Class defaultClass = defaultClassAnnon.value();
if (defaultClass != null) {
@@ -561,4 +570,36 @@
}
return null;
}
+
+ String getByConcreteType(String name, Method relevantMethod) {
+
+ Class<?> paramType = getParameterClassForMethod(relevantMethod);
+ if (paramType == null) {
+ return null;
+ }
+
+ boolean isUnequivocallyInstantiable = isUnequivocallyInstantiable(paramType);
+ if(isUnequivocallyInstantiable) {
+ return paramType.getName();
+ } else {
+ return null;
+ }
+
+ }
+
+ public String getClassNameViaImplicitRules(String name,
+ AggregationType aggregationType) {
+
+ // find the relevant method for the given property name and aggregationType
+ Method relevantMethod = getRelevantMethod(name, aggregationType);
+ if (relevantMethod == null) {
+
+ }
+ String byAnnotation = getDefaultClassNameByAnnonation(name, relevantMethod);
+ if (byAnnotation != null) {
+ return byAnnotation;
+ }
+ return getByConcreteType(name, relevantMethod);
+ }
+
}
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/net/SMTPAppenderBase.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/net/SMTPAppenderBase.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/net/SMTPAppenderBase.java Fri Dec 26 14:55:28 2008
@@ -67,7 +67,7 @@
protected Message msg;
- protected EventEvaluator eventEvaluator;
+ protected EventEvaluator<E> eventEvaluator;
/**
* return a layout for the subjet string as appropriate for the module. If the
@@ -381,7 +381,7 @@
* corresponding object will be instantiated and assigned as the event
* evaluator for the SMTPAppender.
*/
- public void setEvaluator(EventEvaluator eventEvaluator) {
+ public void setEvaluator(EventEvaluator<E> eventEvaluator) {
this.eventEvaluator = eventEvaluator;
}
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/spi/FilterAttachable.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/spi/FilterAttachable.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/spi/FilterAttachable.java Fri Dec 26 14:55:28 2008
@@ -16,11 +16,11 @@
*
* @author Ceki Gülcü
*/
-public interface FilterAttachable {
+public interface FilterAttachable<E> {
/**
* Add a filter.
*/
- public void addFilter(Filter newFilter);
+ public void addFilter(Filter<E> newFilter);
/**
* Get first filter in the chain.
@@ -34,5 +34,5 @@
* ACCEPT or DENY, then that value is returned. If all of the filters return
* NEUTRAL, then NEUTRAL is returned.
*/
- public FilterReply getFilterChainDecision(Object event);
+ public FilterReply getFilterChainDecision(E event);
}
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/spi/FilterAttachableImpl.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/spi/FilterAttachableImpl.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/spi/FilterAttachableImpl.java Fri Dec 26 14:55:28 2008
@@ -1,14 +1,16 @@
/**
- * LOGBack: the generic, reliable, fast and flexible logging framework.
- *
- * Copyright (C) 1999-2006, QOS.ch
- *
- * This library is free software, you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation.
+ * Logback: the generic, reliable, fast and flexible logging framework.
+ *
+ * Copyright (C) 2000-2008, QOS.ch
+ *
+ * This library is free software, you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation.
*/
package ch.qos.logback.core.spi;
+import java.util.concurrent.CopyOnWriteArrayList;
+
import ch.qos.logback.core.filter.Filter;
/**
@@ -16,64 +18,45 @@
*
* @author Ceki Gülcü
*/
-final public class FilterAttachableImpl implements FilterAttachable {
+final public class FilterAttachableImpl<E> implements FilterAttachable<E> {
- Filter headFilter;
- Filter tailFilter;
+ CopyOnWriteArrayList<Filter<E>> filterList = new CopyOnWriteArrayList<Filter<E>>();
/**
* Add a filter to end of the filter list.
*/
- public void addFilter(Filter newFilter) {
- if (headFilter == null) {
- headFilter = newFilter;
- tailFilter = newFilter;
- } else {
- tailFilter.setNext(newFilter);
- tailFilter = newFilter;
- }
+ public void addFilter(Filter<E> newFilter) {
+ filterList.add(newFilter);
}
/**
* Get first filter in the chain.
*/
- public Filter getFirstFilter() {
- return headFilter;
+ public Filter<E> getFirstFilter() {
+ if (filterList.size() > 0) {
+ return filterList.get(0);
+ } else {
+ return null;
+ }
}
/**
* Clear the filter chain
*/
public void clearAllFilters() {
- Filter f = headFilter;
- while (f != null) {
- final Filter next = f.getNext();
- f.setNext(null);
- f = next;
- }
- f = null;
- headFilter = null;
- tailFilter = null;
+ filterList.clear();
}
/**
- * Loop through the filters in the chain. As soon as a filter decides on
+ * Loop through the filters in the list. As soon as a filter decides on
* ACCEPT or DENY, then that value is returned. If all of the filters return
- * NEUTRAL, then NEUTRAL is returned.
+ * NEUTRAL, then NEUTRAL is returned.
*/
- public FilterReply getFilterChainDecision(Object event) {
- Filter f = headFilter;
-
- while (f != null) {
- switch (f.decide(event)) {
- case DENY:
- return FilterReply.DENY;
-
- case ACCEPT:
- return FilterReply.ACCEPT;
-
- case NEUTRAL:
- f = f.getNext();
+ public FilterReply getFilterChainDecision(E event) {
+ for (Filter<E> f : filterList) {
+ final FilterReply r = f.decide(event);
+ if (r == FilterReply.DENY || r == FilterReply.ACCEPT) {
+ return r;
}
}
return FilterReply.NEUTRAL;
Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/spi/PropertySetterTest.java
==============================================================================
--- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/spi/PropertySetterTest.java (original)
+++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/joran/spi/PropertySetterTest.java Fri Dec 26 14:55:28 2008
@@ -1,7 +1,10 @@
package ch.qos.logback.core.joran.spi;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
@@ -9,39 +12,51 @@
import ch.qos.logback.core.Context;
import ch.qos.logback.core.ContextBase;
-import ch.qos.logback.core.joran.action.IADataForComplexProperty;
import ch.qos.logback.core.spi.FilterReply;
import ch.qos.logback.core.util.AggregationType;
import ch.qos.logback.core.util.Duration;
import ch.qos.logback.core.util.FileSize;
import ch.qos.logback.core.util.StatusPrinter;
-public class PropertySetterTest {
+public class PropertySetterTest {
@Test
public void testCanAggregateComponent() {
House house = new House();
PropertySetter setter = new PropertySetter(house);
- assertEquals(AggregationType.AS_COMPLEX_PROPERTY, setter.computeAggregationType("door"));
-
- assertEquals(AggregationType.AS_BASIC_PROPERTY, setter.computeAggregationType("count"));
- assertEquals(AggregationType.AS_BASIC_PROPERTY, setter.computeAggregationType("Count"));
-
- assertEquals(AggregationType.AS_BASIC_PROPERTY, setter.computeAggregationType("name"));
- assertEquals(AggregationType.AS_BASIC_PROPERTY, setter.computeAggregationType("Name"));
-
- assertEquals(AggregationType.AS_BASIC_PROPERTY, setter.computeAggregationType("Duration"));
- assertEquals(AggregationType.AS_BASIC_PROPERTY, setter.computeAggregationType("fs"));
-
- assertEquals(AggregationType.AS_BASIC_PROPERTY, setter.computeAggregationType("open"));
- assertEquals(AggregationType.AS_BASIC_PROPERTY, setter.computeAggregationType("Open"));
-
- assertEquals(AggregationType.AS_COMPLEX_PROPERTY_COLLECTION, setter.computeAggregationType("Window"));
- assertEquals(AggregationType.AS_BASIC_PROPERTY_COLLECTION, setter.computeAggregationType("adjective"));
-
- assertEquals(AggregationType.AS_BASIC_PROPERTY, setter.computeAggregationType("filterReply"));
- assertEquals(AggregationType.AS_BASIC_PROPERTY, setter.computeAggregationType("houseColor"));
-
+ assertEquals(AggregationType.AS_COMPLEX_PROPERTY, setter
+ .computeAggregationType("door"));
+
+ assertEquals(AggregationType.AS_BASIC_PROPERTY, setter
+ .computeAggregationType("count"));
+ assertEquals(AggregationType.AS_BASIC_PROPERTY, setter
+ .computeAggregationType("Count"));
+
+ assertEquals(AggregationType.AS_BASIC_PROPERTY, setter
+ .computeAggregationType("name"));
+ assertEquals(AggregationType.AS_BASIC_PROPERTY, setter
+ .computeAggregationType("Name"));
+
+ assertEquals(AggregationType.AS_BASIC_PROPERTY, setter
+ .computeAggregationType("Duration"));
+ assertEquals(AggregationType.AS_BASIC_PROPERTY, setter
+ .computeAggregationType("fs"));
+
+ assertEquals(AggregationType.AS_BASIC_PROPERTY, setter
+ .computeAggregationType("open"));
+ assertEquals(AggregationType.AS_BASIC_PROPERTY, setter
+ .computeAggregationType("Open"));
+
+ assertEquals(AggregationType.AS_COMPLEX_PROPERTY_COLLECTION, setter
+ .computeAggregationType("Window"));
+ assertEquals(AggregationType.AS_BASIC_PROPERTY_COLLECTION, setter
+ .computeAggregationType("adjective"));
+
+ assertEquals(AggregationType.AS_BASIC_PROPERTY, setter
+ .computeAggregationType("filterReply"));
+ assertEquals(AggregationType.AS_BASIC_PROPERTY, setter
+ .computeAggregationType("houseColor"));
+
System.out.println();
}
@@ -58,7 +73,7 @@
assertEquals("jack", house.getName());
assertTrue(house.isOpen());
}
-
+
{
House house = new House();
PropertySetter setter = new PropertySetter(house);
@@ -76,14 +91,14 @@
public void testSetCamelProperty() {
House house = new House();
PropertySetter setter = new PropertySetter(house);
-
+
setter.setProperty("camelCase", "trot");
assertEquals("trot", house.getCamelCase());
-
+
setter.setProperty("camelCase", "gh");
assertEquals("gh", house.getCamelCase());
}
-
+
@Test
public void testSetComplexProperty() {
House house = new House();
@@ -94,20 +109,25 @@
}
@Test
- public void testSetComplexProperty2() {
+ public void testgetClassNameViaImplicitRules() {
House house = new House();
- //Door door = new Door();
PropertySetter setter = new PropertySetter(house);
-
- IADataForComplexProperty actionData = new IADataForComplexProperty(setter,
- AggregationType.AS_COMPLEX_PROPERTY, "door");
-
- Class clazz = setter.findUnequivocallyInstantiableClass(actionData);
- assertNotNull(clazz);
- assertEquals(Door.class.getName(), clazz.getName());
- //setter.setComplexProperty("door", door);
- //assertEquals(door, house.getDoor());
+ String className = setter.getClassNameViaImplicitRules("door",
+ AggregationType.AS_COMPLEX_PROPERTY);
+ assertEquals(Door.class.getName(), className);
}
+
+
+
+ @Test
+ public void testgetComplexPropertyColleClassNameViaImplicitRules() {
+ House house = new House();
+ PropertySetter setter = new PropertySetter(house);
+ String className = setter.getClassNameViaImplicitRules("window",
+ AggregationType.AS_COMPLEX_PROPERTY_COLLECTION);
+ assertEquals(Window.class.getName(), className);
+ }
+
@Test
public void testPropertyCollection() {
@@ -128,26 +148,26 @@
House house = new House();
PropertySetter setter = new PropertySetter(house);
Window w1 = new Window();
- w1.handle=10;
+ w1.handle = 10;
Window w2 = new Window();
- w2.handle=20;
-
+ w2.handle = 20;
+
setter.addComplexProperty("window", w1);
setter.addComplexProperty("window", w2);
assertEquals(2, house.windowList.size());
assertEquals(10, house.windowList.get(0).handle);
assertEquals(20, house.windowList.get(1).handle);
}
-
+
@Test
public void testSetComplexWithCamelCaseName() {
House house = new House();
- SwimmingPool pool = new SwimmingPool();
+ SwimmingPool pool = new SwimmingPoolImpl();
PropertySetter setter = new PropertySetter(house);
setter.setComplexProperty("swimmingPool", pool);
assertEquals(pool, house.getSwimmingPool());
}
-
+
@Test
public void testDuration() {
House house = new House();
@@ -161,18 +181,18 @@
House house = new House();
PropertySetter setter = new PropertySetter(house);
setter.setProperty("fs", "2 kb");
- assertEquals(2*1024, house.getFs().getSize());
+ assertEquals(2 * 1024, house.getFs().getSize());
}
-
+
@Test
public void testFilterReply() {
- //test case reproducing bug #52
+ // test case reproducing bug #52
House house = new House();
PropertySetter setter = new PropertySetter(house);
setter.setProperty("filterReply", "ACCEPT");
assertEquals(FilterReply.ACCEPT, house.getFilterReply());
}
-
+
@Test
public void testEnum() {
House house = new House();
@@ -180,14 +200,21 @@
setter.setProperty("houseColor", "BLUE");
assertEquals(HouseColor.BLUE, house.getHouseColor());
}
-
-
+
@Test
public void testDefaultClassAnnonation() {
House house = new House();
PropertySetter setter = new PropertySetter(house);
- String spClassName = setter.getDefaultClassNameByAnnonation("SwimmingPool", AggregationType.AS_COMPLEX_PROPERTY);
- assertEquals(SwimmingPool.class.getName(), spClassName);
+ Method relevantMethod = setter.getRelevantMethod("SwimmingPool",
+ AggregationType.AS_COMPLEX_PROPERTY);
+ assertNotNull(relevantMethod);
+ String spClassName = setter.getDefaultClassNameByAnnonation("SwimmingPool",
+ relevantMethod);
+ assertEquals(SwimmingPoolImpl.class.getName(), spClassName);
+
+ String classNameViaImplicitRules = setter.getClassNameViaImplicitRules(
+ "SwimmingPool", AggregationType.AS_COMPLEX_PROPERTY);
+ assertEquals(SwimmingPoolImpl.class.getName(), classNameViaImplicitRules);
}
}
@@ -202,10 +229,10 @@
FileSize fs;
HouseColor houseColor;
FilterReply reply;
-
+
List<String> adjectiveList = new ArrayList<String>();
List<Window> windowList = new ArrayList<Window>();
-
+
public String getCamelCase() {
return camelCase;
}
@@ -245,20 +272,19 @@
public void setOpen(boolean open) {
this.open = open;
}
-
- @DefaultClass(SwimmingPool.class)
+
+ @DefaultClass(SwimmingPoolImpl.class)
public void setSwimmingPool(SwimmingPool pool) {
this.pool = pool;
}
-
+
public SwimmingPool getSwimmingPool() {
return pool;
}
-
+
public void addWindow(Window w) {
windowList.add(w);
}
-
public void addAdjective(String s) {
adjectiveList.add(s);
@@ -279,23 +305,23 @@
public void setFs(FileSize fs) {
this.fs = fs;
}
-
+
public void setHouseColor(HouseColor color) {
this.houseColor = color;
}
-
+
public HouseColor getHouseColor() {
return houseColor;
}
-
+
public void setFilterReply(FilterReply reply) {
this.reply = reply;
}
-
+
public FilterReply getFilterReply() {
return reply;
}
-
+
}
class Door {
@@ -306,7 +332,10 @@
int handle;
}
-class SwimmingPool {
+interface SwimmingPool {
+}
+
+class SwimmingPoolImpl implements SwimmingPool {
int length;
int width;
int depth;
1
0
svn commit: r2101 - logback/trunk/logback-access/src/main/java/ch/qos/logback/access/sift
by noreply.cekiļ¼ qos.ch 24 Dec '08
by noreply.cekiļ¼ qos.ch 24 Dec '08
24 Dec '08
Author: ceki
Date: Wed Dec 24 16:03:31 2008
New Revision: 2101
Modified:
logback/trunk/logback-access/src/main/java/ch/qos/logback/access/sift/AccessEventDiscriminator.java
Log:
- removing unused import
Modified: logback/trunk/logback-access/src/main/java/ch/qos/logback/access/sift/AccessEventDiscriminator.java
==============================================================================
--- logback/trunk/logback-access/src/main/java/ch/qos/logback/access/sift/AccessEventDiscriminator.java (original)
+++ logback/trunk/logback-access/src/main/java/ch/qos/logback/access/sift/AccessEventDiscriminator.java Wed Dec 24 16:03:31 2008
@@ -9,8 +9,6 @@
*/
package ch.qos.logback.access.sift;
-import java.util.Enumeration;
-
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
1
0
[JIRA] Commented: (LBCORE-18) classloader for loading autoConfig configuration resource
by Ceki Gulcu (JIRA) 23 Dec '08
by Ceki Gulcu (JIRA) 23 Dec '08
23 Dec '08
[ http://jira.qos.ch/browse/LBCORE-18?page=com.atlassian.jira.plugin.system.i⦠]
Ceki Gulcu commented on LBCORE-18:
----------------------------------
Hello Filip,
Thank you for reporting this problem. In logback 0.9.14, ContextInitializer.autoConfig uses the class loader which loaded the ContextInitializer class to search for resources (logback-test.xml and logback.xml). It does not use TCCL.
Please let me know if this works for you so that I can close this bug.
> classloader for loading autoConfig configuration resource
> ---------------------------------------------------------
>
> Key: LBCORE-18
> URL: http://jira.qos.ch/browse/LBCORE-18
> Project: logback-core
> Issue Type: Bug
> Components: Other
> Affects Versions: unspecified
> Environment: Operating System: Windows
> Platform: PC
> Reporter: Filip JirsƔk
> Assignee: Logback dev list
> Priority: Blocker
> Attachments: classloader.patch
>
>
> ContextInitializer.autoConfig(LoggerContext) uses current thread context ClassLoader (TCL) nowadays - it calls Thread.currentThread().getContextClassLoader(). Sometimes this classloader has no access to logback classes - for example TCL is parent of classloader, which loaded current class, in oc4j (Oracle J2EE container) at the time of starting servlet container. So logback-*.jar are in WEB-INF/lib directory, but TCL has no access to these jars and to files in WEB-INF/classes.
> I think ContextInitializer.autoConfig(LoggerContext) should try this.getClass().getClassLoader() first and only if it fails it should use Thread.currentThread().getContextClassLoader().
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.qos.ch/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
1
0
[JIRA] Created: (LBCORE-80) StatusManager should clean up old values
by Ceki Gulcu (JIRA) 23 Dec '08
by Ceki Gulcu (JIRA) 23 Dec '08
23 Dec '08
StatusManager should clean up old values
----------------------------------------
Key: LBCORE-80
URL: http://jira.qos.ch/browse/LBCORE-80
Project: logback-core
Issue Type: New Feature
Reporter: Ceki Gulcu
Assignee: Logback dev list
Fix For: 0.9.14
StatusManager should split status message into two parts, the head part and the tail part. The tail part, as the name indicates, should contain only the latest messages.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.qos.ch/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
1
1
[JIRA] Resolved: (LBCLASSIC-36) Synchronization of SimpleDateFormat object in DateConverter
by Ceki Gulcu (JIRA) 23 Dec '08
by Ceki Gulcu (JIRA) 23 Dec '08
23 Dec '08
[ http://jira.qos.ch/browse/LBCLASSIC-36?page=com.atlassian.jira.plugin.syste⦠]
Ceki Gulcu resolved LBCLASSIC-36.
---------------------------------
Resolution: Won't Fix
As mentioned in my last comment, regarding Joda time, I intend to wait for JSR-310 to finalize.
Regarding synchronization UnsynchronizedAppenderBase now ships with logback-core.
> Synchronization of SimpleDateFormat object in DateConverter
> -----------------------------------------------------------
>
> Key: LBCLASSIC-36
> URL: http://jira.qos.ch/browse/LBCLASSIC-36
> Project: logback-classic
> Issue Type: Bug
> Components: Other
> Affects Versions: unspecified
> Environment: Operating System: All
> Platform: All
> Reporter: Anders Hammar
> Assignee: Ceki Gulcu
> Attachments: DateConverter_patch.java
>
>
> According to the API documentation of SimpleDateFormat, date formats are not synchronized and it is recommended to create separate format instances for each thread.
> However, a possibly simpler (mer efficient) solution would be to synchronize on the SimpleDateFormat object in the convert() method to prevent two threads to access it concurrently.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.qos.ch/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
1
0
[JIRA] Resolved: (LBCLASSIC-13) provide standard facility to hook System.err
by Ceki Gulcu (JIRA) 23 Dec '08
by Ceki Gulcu (JIRA) 23 Dec '08
23 Dec '08
[ http://jira.qos.ch/browse/LBCLASSIC-13?page=com.atlassian.jira.plugin.syste⦠]
Ceki Gulcu resolved LBCLASSIC-13.
---------------------------------
Fix Version/s: 0.9.14
Resolution: Won't Fix
Hello Sebastien,
Thank for this issue. Redirecting system.err or system.out to a logger is a notoriously error-prone feature. I do not wish to implement this feature at this time.
> provide standard facility to hook System.err
> --------------------------------------------
>
> Key: LBCLASSIC-13
> URL: http://jira.qos.ch/browse/LBCLASSIC-13
> Project: logback-classic
> Issue Type: Bug
> Components: Other
> Affects Versions: unspecified
> Environment: Operating System: All
> Platform: All
> Reporter: Sebastian Davids
> Assignee: Logback dev list
> Fix For: 0.9.14
>
>
> Several standard JDK classes "log" to System.err
> There should be a configuration option to redirect them to a Logger.
> System.setErr(/* PrintStream writing to logger */)
> Things to look out for: PrintStream's encoding
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.qos.ch/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
1
0