logback-dev
Threads by month
- ----- 2025 -----
- 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
December 2008
- 8 participants
- 156 discussions

[JIRA] Closed: (LBCLASSIC-87) LoggerContextFilter is useless (org.slf4j.Loggerfactory bug ++)
by Ceki Gulcu (JIRA) 28 Dec '08
by Ceki Gulcu (JIRA) 28 Dec '08
28 Dec '08
[ http://jira.qos.ch/browse/LBCLASSIC-87?page=com.atlassian.jira.plugin.syste… ]
Ceki Gulcu closed LBCLASSIC-87.
-------------------------------
> LoggerContextFilter is useless (org.slf4j.Loggerfactory bug ++)
> ---------------------------------------------------------------
>
> Key: LBCLASSIC-87
> URL: http://jira.qos.ch/browse/LBCLASSIC-87
> Project: logback-classic
> Issue Type: Bug
> Components: Other
> Affects Versions: unspecified
> Environment: Operating System: All
> Platform: All
> Reporter: Jens Elkner
> Assignee: Logback dev list
>
> Since LoggerFactory obtains the LoggerContext to use in its static init stage, using a LoggerContextFilter as described in Chapter 8 is completely useless, since the JNDI selector is never consulted again.
> Digging deeper on that issue reveals, that using a ContextJNDISelector (even if it would work) rarely leads to the intended behavior (e.g. webapp related logging), and is probably not thread safe wrt. common practice and intended logging. E.g. in tomcat we have two different cases:
> a) each webapp provides its own slfj4*.jar as well as *logback*.jar
> b) slfj4*.jar as well as *logback*.jar are shared via tomcat/common/lib or
> tomcat/share/lib
> c) a und b mixed
> Well, to get things right, one can say case c) is unsupported ;-).
> In case a) logback has its own playground, so using JNDI doesn't make sense at all, since the webapp/logback has its own playground - doesn't interfere with
> other web apps since loaded via its dedicated classloader.
> However case b) is a little bit more challenging. Here the LoggerFactory and other classes are !shared! between several webapps, since loading is delegated from the dedicated webapp classloader to the shared webapp classloader, which picks up everything in share/lib , common/lib. So right now in 0.9.7, even if one uses JNDISelector a per webapp logging is impossible: The first webapp, which asks for a LoggerFactory always wins! All other webapps, which ask later for a LoggerFactory.getLogger() will get a Logger from the LoggerContext associated with the first webapp, since the context is "cached", i.e. the JNDI selector gets never consulted again.
> Assuming the LoggerFactory problem gets fixed by using e.g.
> public static Logger getLogger(* *) {
> return StaticLoggerBinder.SINGLETON.getLoggerFactory().getLogger(**);
> }
> there is still a problem wrt. common practice aka log* usage pattern and webapp shared classes, which can not be resolved by JNDI: Today most developer use something like:
> public class XY {
> private static [final] Logger log = LoggerFactory.getLogger(XY.class);
> ...
> }
> That implies the same problem, as with the current LoggerFactory bug: The class gets the Logger from the context associated with the first webapp, which needs the shared class. And that's why all other webapps, which later need this class will use the the logger context of the first webapp. So e.g. if webapp A is configured to log to /var/log/a.log and another webapp B is configured to log to /var/log/b.log the loging output of shared classes will always go to /var/log/a.log if webapp used the classes in question first, no matter on which thread aka in which webapp the shared classes are used.
> So even if LoggerFactory gets fixed, JNDI selector is of little use, if one wants to have a webapp dedicated log as soon as shared classes are involved.
> The only way to solve the didcated webapp log problem a can think of, to introduce another level of indirection in the Logger.log* etc. method, which takes care of thread local settings and the settings of its parent threads (e.g. an application may start other threads, which do not inherit the thread local settings from the current thread ...). But this would probably influence the performance of logback in a rather negative way.
> Another idea might be an architecture re-design: sharing Loggers would be no problem because of thread local AppenderContext soft ref, which points to an Appender in the global AppenderStore singleton ...
> RFE: These problems should be reflected chapter 8 of the logback manual to avoid further confusion ...
--
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-87) LoggerContextFilter is useless (org.slf4j.Loggerfactory bug ++)
by Ceki Gulcu (JIRA) 28 Dec '08
by Ceki Gulcu (JIRA) 28 Dec '08
28 Dec '08
[ http://jira.qos.ch/browse/LBCLASSIC-87?page=com.atlassian.jira.plugin.syste… ]
Ceki Gulcu resolved LBCLASSIC-87.
---------------------------------
Resolution: Fixed
In a nutshell, I consider this issue a duplicate of SLF4J bug 113. See also [1]. In each call to getLogger() method, org.slf4j.LoggerContext will now retrieve the ILoggerFactory afresh from StaticLoggerBinder. This change enables context selectors of native implementations, e.g logback, to work correctly.
Static logger references in shared classes relate to a different problem. If you need static references problem to be dealt with, then please file a *new* jira issue. As such, I am closing this issue as "fixed".
[1] http://bugzilla.slf4j.org/show_bug.cgi?id=113
> LoggerContextFilter is useless (org.slf4j.Loggerfactory bug ++)
> ---------------------------------------------------------------
>
> Key: LBCLASSIC-87
> URL: http://jira.qos.ch/browse/LBCLASSIC-87
> Project: logback-classic
> Issue Type: Bug
> Components: Other
> Affects Versions: unspecified
> Environment: Operating System: All
> Platform: All
> Reporter: Jens Elkner
> Assignee: Logback dev list
>
> Since LoggerFactory obtains the LoggerContext to use in its static init stage, using a LoggerContextFilter as described in Chapter 8 is completely useless, since the JNDI selector is never consulted again.
> Digging deeper on that issue reveals, that using a ContextJNDISelector (even if it would work) rarely leads to the intended behavior (e.g. webapp related logging), and is probably not thread safe wrt. common practice and intended logging. E.g. in tomcat we have two different cases:
> a) each webapp provides its own slfj4*.jar as well as *logback*.jar
> b) slfj4*.jar as well as *logback*.jar are shared via tomcat/common/lib or
> tomcat/share/lib
> c) a und b mixed
> Well, to get things right, one can say case c) is unsupported ;-).
> In case a) logback has its own playground, so using JNDI doesn't make sense at all, since the webapp/logback has its own playground - doesn't interfere with
> other web apps since loaded via its dedicated classloader.
> However case b) is a little bit more challenging. Here the LoggerFactory and other classes are !shared! between several webapps, since loading is delegated from the dedicated webapp classloader to the shared webapp classloader, which picks up everything in share/lib , common/lib. So right now in 0.9.7, even if one uses JNDISelector a per webapp logging is impossible: The first webapp, which asks for a LoggerFactory always wins! All other webapps, which ask later for a LoggerFactory.getLogger() will get a Logger from the LoggerContext associated with the first webapp, since the context is "cached", i.e. the JNDI selector gets never consulted again.
> Assuming the LoggerFactory problem gets fixed by using e.g.
> public static Logger getLogger(* *) {
> return StaticLoggerBinder.SINGLETON.getLoggerFactory().getLogger(**);
> }
> there is still a problem wrt. common practice aka log* usage pattern and webapp shared classes, which can not be resolved by JNDI: Today most developer use something like:
> public class XY {
> private static [final] Logger log = LoggerFactory.getLogger(XY.class);
> ...
> }
> That implies the same problem, as with the current LoggerFactory bug: The class gets the Logger from the context associated with the first webapp, which needs the shared class. And that's why all other webapps, which later need this class will use the the logger context of the first webapp. So e.g. if webapp A is configured to log to /var/log/a.log and another webapp B is configured to log to /var/log/b.log the loging output of shared classes will always go to /var/log/a.log if webapp used the classes in question first, no matter on which thread aka in which webapp the shared classes are used.
> So even if LoggerFactory gets fixed, JNDI selector is of little use, if one wants to have a webapp dedicated log as soon as shared classes are involved.
> The only way to solve the didcated webapp log problem a can think of, to introduce another level of indirection in the Logger.log* etc. method, which takes care of thread local settings and the settings of its parent threads (e.g. an application may start other threads, which do not inherit the thread local settings from the current thread ...). But this would probably influence the performance of logback in a rather negative way.
> Another idea might be an architecture re-design: sharing Loggers would be no problem because of thread local AppenderContext soft ref, which points to an Appender in the global AppenderStore singleton ...
> RFE: These problems should be reflected chapter 8 of the logback manual to avoid further confusion ...
--
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-55) Report URL config has been loaded from when debug="true"
by Ceki Gulcu (JIRA) 28 Dec '08
by Ceki Gulcu (JIRA) 28 Dec '08
28 Dec '08
[ http://jira.qos.ch/browse/LBCLASSIC-55?page=com.atlassian.jira.plugin.syste… ]
Ceki Gulcu resolved LBCLASSIC-55.
---------------------------------
Fix Version/s: 0.9.14
Resolution: Fixed
ContextInitializer will now print the url of the configration it is using. As Henric observes, this should help reduce confusion when multiple config files are found on the class path. Fixed in revision 2108.
> Report URL config has been loaded from when debug="true"
> --------------------------------------------------------
>
> Key: LBCLASSIC-55
> URL: http://jira.qos.ch/browse/LBCLASSIC-55
> Project: logback-classic
> Issue Type: Improvement
> Reporter: Anton Tagunov
> Assignee: Ceki Gulcu
> Fix For: 0.9.14
>
>
> Hi!
> <configuration debug="true"> is nice.
> It will be even nicer if it also reports what URL the config is being loaded from.
> Thx!
--
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

svn commit: r2108 - logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/util
by noreply.ceki@qos.ch 28 Dec '08
by noreply.ceki@qos.ch 28 Dec '08
28 Dec '08
Author: ceki
Date: Sun Dec 28 20:46:10 2008
New Revision: 2108
Modified:
logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/util/ContextInitializer.java
Log:
ContextInitializer now prints the url it uses for default configuration.
This was requested in LBCLASSIC-55.
Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/util/ContextInitializer.java
==============================================================================
--- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/util/ContextInitializer.java (original)
+++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/util/ContextInitializer.java Sun Dec 28 20:46:10 2008
@@ -111,7 +111,7 @@
sm.add(new InfoStatus("Could NOT find resource [" + resourceName + "]",
loggerContext));
} else {
- sm.add(new InfoStatus("Found resource [" + resourceName + "]",
+ sm.add(new InfoStatus("Found resource [" + resourceName + "] at ["+url.toString()+"]",
loggerContext));
}
}
1
0

28 Dec '08
Author: ceki
Date: Sun Dec 28 20:35:24 2008
New Revision: 2107
Modified:
logback/trunk/logback-site/src/site/pages/news.html
Log:
- update news.html file
Modified: logback/trunk/logback-site/src/site/pages/news.html
==============================================================================
--- logback/trunk/logback-site/src/site/pages/news.html (original)
+++ logback/trunk/logback-site/src/site/pages/news.html Sun Dec 28 20:35:24 2008
@@ -60,6 +60,29 @@
reported by Francois Terrier.
</p>
+
+ <p>Evaluators are now wired into an appender automatically
+ (implicit rules) without the help of
+ <code>EvaluatorAction</code>. 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. This change fixes <a
+ href="http://jira.qos.ch/browse/LBCLASSIC-100">LBCLASSIC-100</a>. In
+ addition, <code>EvaluatorAction</code> has been modified to accept
+ evaluators of any type and not just instances of
+ <code>JaninoEvaluator</code>.
+ </p>
+
+ <p><code>HTMLLayout</code> now honors custom conversion words,
+ thus fixing <a
+ href="http://jira.qos.ch/browse/LBCORE-74">LBCORE-74</a> as
+ reported by Natan Cox.</p>
+
+ <p>SMTPAppender im logback-classic now defaults to
+ <code>OnErrorEvaluator</code> instead of a janino-based
+ evaluator. Thus, by default <code>SMTPAppender</code> no longer
+ depends on Janino.</p>
+
<h3>5th of December 2008 - Release of version 0.9.13</h3>
<p>A <code>NullPointerException</code> was being thrown when a the
1
0

28 Dec '08
Converters do not work in all appenders
---------------------------------------
Key: LBCORE-74
URL: http://jira.qos.ch/browse/LBCORE-74
Project: logback-core
Issue Type: Improvement
Components: Pattern
Affects Versions: 0.9.11
Reporter: Natan Cox
Assignee: Logback dev list
I'm trying to use a converter in HtmlLayout but it was not logged correctly. I'm basically getting a "PARSER_ERRER".
I checked the code and found
HTMLLayoutBase.start() does this.head = p.compile(t, getDefaultConverterMap());
where
protected Map<String, String> getDefaultConverterMap() {
return PatternLayout.defaultConverterMap;
}
But PatternLayoutBase.start() does this.head = p.compile(t, getEffectiveConverterMap());
and getEffectiveConverterMap loads the extra converters.
This is probably in issue in other Appenders too. Maybe the solution can be generified to make it work for every appender?
--
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
2
1
Author: ceki
Date: Sun Dec 28 20:31:49 2008
New Revision: 2106
Added:
logback/trunk/logback-classic/src/test/input/joran/conversionRule/
logback/trunk/logback-classic/src/test/input/joran/conversionRule/htmlLayout0.xml
logback/trunk/logback-classic/src/test/input/joran/conversionRule/patternLayout0.xml
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/testUtil/
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/testUtil/SampleConverter.java
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/testUtil/StringListAppender.java
- copied, changed from r2086, /logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/StringListAppender.java
Removed:
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/StringListAppender.java
Modified:
logback/trunk/logback-access/src/main/java/ch/qos/logback/access/html/HTMLLayout.java
logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/PatternLayout.java
logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/html/HTMLLayout.java
logback/trunk/logback-classic/src/test/input/joran/callerData.xml
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/PatternLayoutTest.java
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/html/HTMLLayoutTest.java
logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/joran/JoranConfiguratorTest.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/html/HTMLLayoutBase.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/ConversionRuleAction.java
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/pattern/PatternLayoutBase.java
logback/trunk/logback-examples/src/main/java/chapter6/GoMDC.java
Log:
- Fix LBCORE-74
HTMLLayoutBase now takes into custom conversion words.
- Moved StringListAppender to c.q.l.classic.testUtil package
Modified: logback/trunk/logback-access/src/main/java/ch/qos/logback/access/html/HTMLLayout.java
==============================================================================
--- logback/trunk/logback-access/src/main/java/ch/qos/logback/access/html/HTMLLayout.java (original)
+++ logback/trunk/logback-access/src/main/java/ch/qos/logback/access/html/HTMLLayout.java Sun Dec 28 20:31:49 2008
@@ -10,14 +10,14 @@
package ch.qos.logback.access.html;
+import static ch.qos.logback.core.CoreConstants.LINE_SEPARATOR;
+
import java.util.Map;
import ch.qos.logback.access.PatternLayout;
import ch.qos.logback.access.spi.AccessEvent;
import ch.qos.logback.core.html.HTMLLayoutBase;
-import ch.qos.logback.core.html.NOPThrowableRenderer;
import ch.qos.logback.core.pattern.Converter;
-import static ch.qos.logback.core.CoreConstants.LINE_SEPARATOR;
/**
*
@@ -47,7 +47,6 @@
*/
public HTMLLayout() {
pattern = DEFAULT_CONVERSION_PATTERN;
- throwableRenderer = new NOPThrowableRenderer();
cssBuilder = new DefaultCssBuilder();
}
Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/PatternLayout.java
==============================================================================
--- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/PatternLayout.java (original)
+++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/PatternLayout.java Sun Dec 28 20:31:49 2008
@@ -50,8 +50,6 @@
public class PatternLayout extends PatternLayoutBase<LoggingEvent> {
- // FIXME fix exception handling
-
public static final Map<String, String> defaultConverterMap = new HashMap<String, String>();
static {
Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/html/HTMLLayout.java
==============================================================================
--- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/html/HTMLLayout.java (original)
+++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/html/HTMLLayout.java Sun Dec 28 20:31:49 2008
@@ -16,30 +16,31 @@
import ch.qos.logback.classic.spi.LoggingEvent;
import ch.qos.logback.classic.html.DefaultCssBuilder;
import ch.qos.logback.core.html.HTMLLayoutBase;
+import ch.qos.logback.core.html.IThrowableRenderer;
import ch.qos.logback.core.pattern.Converter;
import static ch.qos.logback.core.CoreConstants.LINE_SEPARATOR;
/**
*
- * HTMLLayout outputs events in an HTML table.
- * <p>
- * The content of the table columns are specified using a conversion pattern.
- * See {@link ch.qos.logback.classic.PatternLayout} for documentation on the
- * available patterns.
- * <p>
- * For more information about this layout, please refer to the online manual at
+ * HTMLLayout outputs events in an HTML table. <p> The content of the table
+ * columns are specified using a conversion pattern. See
+ * {@link ch.qos.logback.classic.PatternLayout} for documentation on the
+ * available patterns. <p> For more information about this layout, please refer
+ * to the online manual at
* http://logback.qos.ch/manual/layouts.html#ClassicHTMLLayout
*
* @author Ceki Gülcü
* @author Sébastien Pennec
*/
public class HTMLLayout extends HTMLLayoutBase<LoggingEvent> {
-
+
/**
* Default pattern string for log output.
*/
static final String DEFAULT_CONVERSION_PATTERN = "%date%thread%level%logger%mdc%msg";
+ IThrowableRenderer throwableRenderer;
+
/**
* Constructs a PatternLayout using the DEFAULT_LAYOUT_PATTERN.
*
@@ -50,7 +51,19 @@
throwableRenderer = new DefaultThrowableRenderer();
cssBuilder = new DefaultCssBuilder();
}
-
+
+ @Override
+ public void start() {
+ int errorCount = 0;
+ if (throwableRenderer == null) {
+ addError("ThrowableRender cannot be null.");
+ errorCount++;
+ }
+ if (errorCount == 0) {
+ super.start();
+ }
+ }
+
protected Map<String, String> getDefaultConverterMap() {
return PatternLayout.defaultConverterMap;
}
@@ -90,8 +103,8 @@
return buf.toString();
}
- private void appendEventToBuffer(StringBuilder buf, Converter<LoggingEvent> c,
- LoggingEvent event) {
+ private void appendEventToBuffer(StringBuilder buf,
+ Converter<LoggingEvent> c, LoggingEvent event) {
buf.append("<td class=\"");
buf.append(computeConverterName(c));
buf.append("\">");
@@ -99,4 +112,12 @@
buf.append("</td>");
buf.append(LINE_SEPARATOR);
}
+
+ public IThrowableRenderer getThrowableRenderer() {
+ return throwableRenderer;
+ }
+
+ public void setThrowableRenderer(IThrowableRenderer throwableRenderer) {
+ this.throwableRenderer = throwableRenderer;
+ }
}
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 Sun Dec 28 20:31:49 2008
@@ -12,7 +12,7 @@
</matcher>
</evaluator>
- <appender name="STR_LIST" class="ch.qos.logback.classic.StringListAppender">
+ <appender name="STR_LIST" class="ch.qos.logback.classic.testUtil.StringListAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%caller{4, helloEval}%d %level - %m%n</Pattern>
</layout>
Added: logback/trunk/logback-classic/src/test/input/joran/conversionRule/htmlLayout0.xml
==============================================================================
--- (empty file)
+++ logback/trunk/logback-classic/src/test/input/joran/conversionRule/htmlLayout0.xml Sun Dec 28 20:31:49 2008
@@ -0,0 +1,15 @@
+<configuration>
+
+ <conversionRule conversionWord="sample"
+ converterClass="ch.qos.logback.classic.testUtil.SampleConverter" />
+
+ <appender name="LIST" class="ch.qos.logback.classic.testUtil.StringListAppender">
+ <layout class="ch.qos.logback.classic.html.HTMLLayout">
+ <Pattern>%sample%msg</Pattern>
+ </layout>
+ </appender>
+
+ <root level="debug">
+ <appender-ref ref="LIST" />
+ </root>
+</configuration>
\ No newline at end of file
Added: logback/trunk/logback-classic/src/test/input/joran/conversionRule/patternLayout0.xml
==============================================================================
--- (empty file)
+++ logback/trunk/logback-classic/src/test/input/joran/conversionRule/patternLayout0.xml Sun Dec 28 20:31:49 2008
@@ -0,0 +1,15 @@
+<configuration>
+
+ <conversionRule conversionWord="sample"
+ converterClass="ch.qos.logback.classic.testUtil.SampleConverter" />
+
+ <appender name="LIST" class="ch.qos.logback.classic.testUtil.StringListAppender">
+ <layout class="ch.qos.logback.classic.PatternLayout">
+ <Pattern>%sample - %msg</Pattern>
+ </layout>
+ </appender>
+
+ <root level="debug">
+ <appender-ref ref="LIST" />
+ </root>
+</configuration>
\ No newline at end of file
Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/PatternLayoutTest.java
==============================================================================
--- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/PatternLayoutTest.java (original)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/PatternLayoutTest.java Sun Dec 28 20:31:49 2008
@@ -1,17 +1,18 @@
/**
- * 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;
import static ch.qos.logback.classic.TestConstants.ISO_REGEX;
import static ch.qos.logback.classic.TestConstants.MAIN_REGEX;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
@@ -20,18 +21,24 @@
import org.junit.Before;
import org.junit.Test;
+import ch.qos.logback.classic.joran.JoranConfigurator;
import ch.qos.logback.classic.pattern.ConverterTest;
import ch.qos.logback.classic.spi.LoggingEvent;
+import ch.qos.logback.classic.testUtil.SampleConverter;
+import ch.qos.logback.classic.testUtil.StringListAppender;
+import ch.qos.logback.classic.util.TeztConstants;
import ch.qos.logback.core.Context;
+import ch.qos.logback.core.joran.spi.JoranException;
import ch.qos.logback.core.pattern.PatternLayoutBase;
import ch.qos.logback.core.pattern.parser.AbstractPatternLayoutBaseTest;
public class PatternLayoutTest extends AbstractPatternLayoutBaseTest {
-
private PatternLayout pl = new PatternLayout();
private LoggerContext lc = new LoggerContext();
Logger logger = lc.getLogger(ConverterTest.class);
+ Logger root = lc.getLogger(LoggerContext.ROOT_NAME);
+
LoggingEvent le;
List optionList = new ArrayList();
@@ -40,22 +47,23 @@
Exception ex = new Exception("Bogus exception");
le = makeLoggingEvent(ex);
}
-
+
@Before
public void setUp() {
pl.setContext(lc);
}
LoggingEvent makeLoggingEvent(Exception ex) {
- return new LoggingEvent(ch.qos.logback.core.pattern.FormattingConverter.class
- .getName(), logger, Level.INFO, "Some message", ex, null);
+ return new LoggingEvent(
+ ch.qos.logback.core.pattern.FormattingConverter.class.getName(),
+ logger, Level.INFO, "Some message", ex, null);
}
@Override
public LoggingEvent getEventObject() {
return makeLoggingEvent(null);
}
-
+
public PatternLayoutBase getPatternLayoutBase() {
return new PatternLayout();
}
@@ -65,8 +73,10 @@
pl.setPattern("%d %le [%t] %lo{30} - %m%n");
pl.start();
String val = pl.doLayout(getEventObject());
- // 2006-02-01 22:38:06,212 INFO [main] c.q.l.pattern.ConverterTest - Some message
- String regex = ISO_REGEX+" INFO "+MAIN_REGEX+" c.q.l.c.pattern.ConverterTest - Some message\\s*";
+ // 2006-02-01 22:38:06,212 INFO [main] c.q.l.pattern.ConverterTest - Some
+ // message
+ String regex = ISO_REGEX + " INFO " + MAIN_REGEX
+ + " c.q.l.c.pattern.ConverterTest - Some message\\s*";
assertTrue(val.matches(regex));
}
@@ -84,12 +94,13 @@
pl.setPattern("%-56(%d %lo{20}) - %m%n");
pl.start();
String val = pl.doLayout(getEventObject());
- // 2008-03-18 21:55:54,250 c.q.l.c.pattern.ConverterTest - Some message
- String regex = ISO_REGEX+" c.q.l.c.p.ConverterTest - Some message\\s*";
+ // 2008-03-18 21:55:54,250 c.q.l.c.pattern.ConverterTest - Some message
+ String regex = ISO_REGEX
+ + " c.q.l.c.p.ConverterTest - Some message\\s*";
assertTrue(val.matches(regex));
}
-
+
@Test
public void testNopExeptionHandler() {
pl.setPattern("%nopex %m%n");
@@ -97,25 +108,27 @@
String val = pl.doLayout(le);
assertTrue(!val.contains("java.lang.Exception: Bogus exception"));
}
-
+
@Test
public void testWithParenthesis() {
pl.setPattern("\\(%msg:%msg\\) %msg");
pl.start();
le = makeLoggingEvent(null);
String val = pl.doLayout(le);
- //System.out.println("VAL == " + val);
+ // System.out.println("VAL == " + val);
assertEquals("(Some message:Some message) Some message", val);
}
-
+
@Test
public void testWithLettersComingFromLog4j() {
- //Letters: p = level and c = logger
+ // Letters: p = level and c = logger
pl.setPattern("%d %p [%t] %c{30} - %m%n");
pl.start();
String val = pl.doLayout(getEventObject());
- // 2006-02-01 22:38:06,212 INFO [main] c.q.l.pattern.ConverterTest - Some message
- String regex = TestConstants.ISO_REGEX+" INFO "+MAIN_REGEX+" c.q.l.c.pattern.ConverterTest - Some message\\s*";
+ // 2006-02-01 22:38:06,212 INFO [main] c.q.l.pattern.ConverterTest - Some
+ // message
+ String regex = TestConstants.ISO_REGEX + " INFO " + MAIN_REGEX
+ + " c.q.l.c.pattern.ConverterTest - Some message\\s*";
assertTrue(val.matches(regex));
}
@@ -127,9 +140,27 @@
String val = pl.doLayout(getEventObject());
assertEquals("aValue", val);
}
-
+
@Override
public Context getContext() {
return lc;
}
+
+ void configure(String file) throws JoranException {
+ JoranConfigurator jc = new JoranConfigurator();
+ jc.setContext(lc);
+ jc.doConfigure(file);
+ }
+
+ @Test
+ public void testConversionRuleSupportInPatternLayout() throws JoranException {
+ configure(TeztConstants.TEST_DIR_PREFIX + "input/joran/conversionRule/patternLayout0.xml");
+ root.getAppender("LIST");
+ String msg = "Simon says";
+ logger.debug(msg);
+ StringListAppender sla = (StringListAppender) root.getAppender("LIST");
+ assertNotNull(sla);
+ assertEquals(1, sla.strList.size());
+ assertEquals(SampleConverter.SAMPLE_STR+" - "+msg, sla.strList.get(0));
+ }
}
Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/html/HTMLLayoutTest.java
==============================================================================
--- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/html/HTMLLayoutTest.java (original)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/html/HTMLLayoutTest.java Sun Dec 28 20:31:49 2008
@@ -1,6 +1,7 @@
package ch.qos.logback.classic.html;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
@@ -20,16 +21,20 @@
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.TestConstants;
+import ch.qos.logback.classic.joran.JoranConfigurator;
import ch.qos.logback.classic.spi.LoggingEvent;
import ch.qos.logback.classic.spi.ThrowableDataPoint;
import ch.qos.logback.classic.spi.ThrowableProxy;
+import ch.qos.logback.classic.testUtil.StringListAppender;
+import ch.qos.logback.classic.util.TeztConstants;
import ch.qos.logback.core.CoreConstants;
+import ch.qos.logback.core.joran.spi.JoranException;
import ch.qos.logback.core.read.ListAppender;
public class HTMLLayoutTest {
LoggerContext lc;
- Logger logger;
+ Logger root;
HTMLLayout layout;
@Before
@@ -45,8 +50,8 @@
layout.setPattern("%level%thread%msg");
layout.start();
appender.setLayout(layout);
- logger = lc.getLogger(LoggerContext.ROOT_NAME);
- logger.addAppender(appender);
+ root = lc.getLogger(LoggerContext.ROOT_NAME);
+ root.addAppender(appender);
appender.start();
}
@@ -89,7 +94,8 @@
@Test
public void testAppendThrowable() throws Exception {
StringBuilder buf = new StringBuilder();
- ThrowableDataPoint[] strArray = { new ThrowableDataPoint("test1"), new ThrowableDataPoint("test2") };
+ ThrowableDataPoint[] strArray = { new ThrowableDataPoint("test1"),
+ new ThrowableDataPoint("test2") };
DefaultThrowableRenderer renderer = (DefaultThrowableRenderer) layout
.getThrowableRenderer();
renderer.render(buf, strArray);
@@ -145,8 +151,7 @@
public void layoutWithException() throws Exception {
layout.setPattern("%level %thread %msg %ex");
LoggingEvent le = createLoggingEvent();
- le.setThrowableProxy(new ThrowableProxy(new Exception(
- "test Exception")));
+ le.setThrowableProxy(new ThrowableProxy(new Exception("test Exception")));
String result = layout.doLayout(le);
String stringToParse = layout.getFileHeader();
@@ -168,18 +173,19 @@
assertTrue(exceptionElement.getText().contains(
"java.lang.Exception: test Exception"));
}
-
+
@Test
@Ignore
public void rawLimit() throws Exception {
StringBuilder sb = new StringBuilder();
String header = layout.getFileHeader();
- assertTrue(header.startsWith("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"));
+ assertTrue(header
+ .startsWith("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"));
sb.append(header);
sb.append(layout.getPresentationHeader());
- for(int i = 0; i < CoreConstants.TABLE_ROW_LIMIT*3; i++) {
- sb.append(layout.doLayout( new LoggingEvent(this.getClass().getName(), logger,
- Level.DEBUG, "test message"+i, null, null)));
+ for (int i = 0; i < CoreConstants.TABLE_ROW_LIMIT * 3; i++) {
+ sb.append(layout.doLayout(new LoggingEvent(this.getClass().getName(),
+ root, Level.DEBUG, "test message" + i, null, null)));
}
sb.append(layout.getPresentationFooter());
sb.append(layout.getFileFooter());
@@ -188,7 +194,7 @@
}
private LoggingEvent createLoggingEvent() {
- LoggingEvent le = new LoggingEvent(this.getClass().getName(), logger,
+ LoggingEvent le = new LoggingEvent(this.getClass().getName(), root,
Level.DEBUG, "test message", null, null);
return le;
}
@@ -200,4 +206,23 @@
reader.setEntityResolver(resolver);
return reader.read(new ByteArrayInputStream(output.getBytes()));
}
+
+ void configure(String file) throws JoranException {
+ JoranConfigurator jc = new JoranConfigurator();
+ jc.setContext(lc);
+ jc.doConfigure(file);
+ }
+
+ @Test
+ public void testConversionRuleSupportInHtmlLayout() throws JoranException {
+ configure(TeztConstants.TEST_DIR_PREFIX
+ + "input/joran/conversionRule/htmlLayout0.xml");
+ root.getAppender("LIST");
+ String msg = "Simon says";
+ root.debug(msg);
+ StringListAppender sla = (StringListAppender) root.getAppender("LIST");
+ assertNotNull(sla);
+ assertEquals(1, sla.strList.size());
+ assertFalse(sla.strList.get(0).contains("PARSER_ERROR"));
+ }
}
Modified: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/joran/JoranConfiguratorTest.java
==============================================================================
--- logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/joran/JoranConfiguratorTest.java (original)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/joran/JoranConfiguratorTest.java Sun Dec 28 20:31:49 2008
@@ -19,8 +19,8 @@
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
-import ch.qos.logback.classic.StringListAppender;
import ch.qos.logback.classic.spi.LoggingEvent;
+import ch.qos.logback.classic.testUtil.StringListAppender;
import ch.qos.logback.classic.turbo.DebugUsersTurboFilter;
import ch.qos.logback.classic.turbo.NOPTurboFilter;
import ch.qos.logback.classic.turbo.TurboFilter;
Added: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/testUtil/SampleConverter.java
==============================================================================
--- (empty file)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/testUtil/SampleConverter.java Sun Dec 28 20:31:49 2008
@@ -0,0 +1,24 @@
+/**
+ * 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.testUtil;
+
+import ch.qos.logback.classic.pattern.ClassicConverter;
+import ch.qos.logback.classic.spi.LoggingEvent;
+
+public class SampleConverter extends ClassicConverter {
+
+ static public final String SAMPLE_STR = "sample";
+
+ @Override
+ public String convert(LoggingEvent event) {
+ return SAMPLE_STR;
+ }
+
+}
Copied: logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/testUtil/StringListAppender.java (from r2086, /logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/StringListAppender.java)
==============================================================================
--- /logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/StringListAppender.java (original)
+++ logback/trunk/logback-classic/src/test/java/ch/qos/logback/classic/testUtil/StringListAppender.java Sun Dec 28 20:31:49 2008
@@ -1,4 +1,4 @@
-package ch.qos.logback.classic;
+package ch.qos.logback.classic.testUtil;
import java.util.ArrayList;
import java.util.List;
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/html/HTMLLayoutBase.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/html/HTMLLayoutBase.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/html/HTMLLayoutBase.java Sun Dec 28 20:31:49 2008
@@ -1,7 +1,18 @@
+/**
+ * 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.html;
+import java.util.HashMap;
import java.util.Map;
+import ch.qos.logback.core.Context;
import ch.qos.logback.core.CoreConstants;
import static ch.qos.logback.core.CoreConstants.LINE_SEPARATOR;
import ch.qos.logback.core.LayoutBase;
@@ -12,7 +23,9 @@
import ch.qos.logback.core.pattern.parser.ScanException;
/**
- * This class is a base class for logback component-specific HTMLLayout classes
+ * This class is a base class for HTMLLayout classes part of
+ * other logback modules such as logback-classic and logback-access.
+ *
*
* @author Sébastien Pennec
*/
@@ -28,9 +41,7 @@
//this variable in their constructor to a default value.
protected CssBuilder cssBuilder;
- protected IThrowableRenderer throwableRenderer; //no more initialization ??????
-
- // counter keeping track of the rows output
+ // counter keeping track of the rows output
protected long counter = 0;
/**
@@ -64,16 +75,11 @@
public void start() {
int errorCount = 0;
- if (throwableRenderer == null) {
- addError("ThrowableRender cannot be null.");
- errorCount++;
- }
-
try {
Parser<E> p = new Parser<E>(pattern);
p.setContext(getContext());
Node t = p.parse();
- this.head = p.compile(t, getDefaultConverterMap());
+ this.head = p.compile(t, getEffectiveConverterMap());
ConverterUtil.startConverters(this.head);
} catch (ScanException ex) {
addError("Incorrect pattern found", ex);
@@ -87,6 +93,33 @@
protected abstract Map<String, String> getDefaultConverterMap();
+
+ /**
+ * Returns a map where the default converter map is merged with the map
+ * contained in the context.
+ */
+ public Map<String, String> getEffectiveConverterMap() {
+ Map<String, String> effectiveMap = new HashMap<String, String>();
+
+ // add the least specific map fist
+ Map<String, String> defaultMap = getDefaultConverterMap();
+ if (defaultMap != null) {
+ effectiveMap.putAll(defaultMap);
+ }
+
+ // contextMap is more specific than the default map
+ Context context = getContext();
+ if (context != null) {
+ @SuppressWarnings("unchecked")
+ Map<String, String> contextMap = (Map<String, String>) context
+ .getObject(CoreConstants.PATTERN_RULE_REGISTRY);
+ if (contextMap != null) {
+ effectiveMap.putAll(contextMap);
+ }
+ }
+ return effectiveMap;
+ }
+
/**
* The <b>Title </b> option takes a String value. This option sets the
* document title of the generated HTML document.
@@ -226,14 +259,4 @@
}
}
- public IThrowableRenderer getThrowableRenderer() {
- return throwableRenderer;
- }
-
- public void setThrowableRenderer(IThrowableRenderer throwableRenderer) {
- this.throwableRenderer = throwableRenderer;
- }
-
-
-
}
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/ConversionRuleAction.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/ConversionRuleAction.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/joran/action/ConversionRuleAction.java Sun Dec 28 20:31:49 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
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/pattern/PatternLayoutBase.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/pattern/PatternLayoutBase.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/pattern/PatternLayoutBase.java Sun Dec 28 20:31:49 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.core.pattern;
@@ -22,15 +22,14 @@
import ch.qos.logback.core.status.ErrorStatus;
import ch.qos.logback.core.status.StatusManager;
-
abstract public class PatternLayoutBase<E> extends LayoutBase<E> {
Converter<E> head;
String pattern;
protected PostCompileProcessor<E> postCompileProcessor;
-
+
Map<String, String> instanceConverterMap = new HashMap<String, String>();
-
+
/**
* Concrete implementations of this class are responsible for elaborating the
* mapping between pattern words and converters.
@@ -43,30 +42,27 @@
* Returns a map where the default converter map is merged with the map
* contained in the context.
*/
- @SuppressWarnings("unchecked")
public Map<String, String> getEffectiveConverterMap() {
-
Map<String, String> effectiveMap = new HashMap<String, String>();
-
// add the least specific map fist
Map<String, String> defaultMap = getDefaultConverterMap();
if (defaultMap != null) {
effectiveMap.putAll(defaultMap);
}
-
+
// contextMap is more specific than the default map
Context context = getContext();
if (context != null) {
- Map<String, String> contextMap = (Map) context.getObject(CoreConstants.PATTERN_RULE_REGISTRY);
+ @SuppressWarnings("unchecked")
+ Map<String, String> contextMap = (Map<String, String>) context
+ .getObject(CoreConstants.PATTERN_RULE_REGISTRY);
if (contextMap != null) {
effectiveMap.putAll(contextMap);
}
}
-
// set the most specific map last
effectiveMap.putAll(instanceConverterMap);
-
return effectiveMap;
}
@@ -78,7 +74,7 @@
}
Node t = p.parse();
this.head = p.compile(t, getEffectiveConverterMap());
- if(postCompileProcessor != null) {
+ if (postCompileProcessor != null) {
postCompileProcessor.process(head);
}
setContextForConverters(head);
@@ -95,7 +91,7 @@
PostCompileProcessor<E> postCompileProcessor) {
this.postCompileProcessor = postCompileProcessor;
}
-
+
protected void setContextForConverters(Converter<E> head) {
Context context = getContext();
Converter c = head;
Modified: logback/trunk/logback-examples/src/main/java/chapter6/GoMDC.java
==============================================================================
--- logback/trunk/logback-examples/src/main/java/chapter6/GoMDC.java (original)
+++ logback/trunk/logback-examples/src/main/java/chapter6/GoMDC.java Sun Dec 28 20:31:49 2008
@@ -1,4 +1,4 @@
-package chapter5;
+package chapter6;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
1
0

[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