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
February 2010
- 8 participants
- 103 discussions

[GIT] Logback: the generic, reliable, fast and flexible logging framework. branch, encoder, updated. v0.9.18-49-g4577cf0
by git-noreply@pixie.qos.ch 27 Feb '10
by git-noreply@pixie.qos.ch 27 Feb '10
27 Feb '10
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Logback: the generic, reliable, fast and flexible logging framework.".
The branch, encoder has been updated
via 4577cf0a7f55e1162d72691951476d9ae876f0f1 (commit)
from b6bb584c8cb7ff7e6ebf9a0eefcfec48f5a8418c (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=4577cf0a7f55e1162d726919…
http://github.com/ceki/logback/commit/4577cf0a7f55e1162d72691951476d9ae876f…
commit 4577cf0a7f55e1162d72691951476d9ae876f0f1
Author: Ceki Gulcu <ceki(a)qos.ch>
Date: Sat Feb 27 10:24:34 2010 +0100
ConsoleAppender must keep the underlying stream open.
The console is not ours to close.
diff --git a/logback-core/src/main/java/ch/qos/logback/core/ConsoleAppender.java b/logback-core/src/main/java/ch/qos/logback/core/ConsoleAppender.java
index 2939510..ccc7cbb 100644
--- a/logback-core/src/main/java/ch/qos/logback/core/ConsoleAppender.java
+++ b/logback-core/src/main/java/ch/qos/logback/core/ConsoleAppender.java
@@ -13,10 +13,6 @@
*/
package ch.qos.logback.core;
-import java.io.IOException;
-import java.io.OutputStream;
-
-import ch.qos.logback.core.status.ErrorStatus;
import ch.qos.logback.core.status.Status;
import ch.qos.logback.core.status.WarnStatus;
@@ -89,12 +85,11 @@ public class ConsoleAppender<E> extends OutputStreamAppender<E> {
* This method overrides the parent {@link OutputStreamAppender#closeOutputStream}
* implementation because the console stream is not ours to close.
*/
-// @Override
-// protected final void closeOutputStream() {
-// encoderClose();
-// }
+ @Override
+ protected final void closeOutputStream() {
+ encoderClose();
+ }
- xxxxxxxxxx
}
diff --git a/logback-core/src/test/java/ch/qos/logback/core/appender/ConsoleAppenderTest.java b/logback-core/src/test/java/ch/qos/logback/core/appender/ConsoleAppenderTest.java
index 2f98da8..bce6931 100644
--- a/logback-core/src/test/java/ch/qos/logback/core/appender/ConsoleAppenderTest.java
+++ b/logback-core/src/test/java/ch/qos/logback/core/appender/ConsoleAppenderTest.java
@@ -14,6 +14,7 @@
package ch.qos.logback.core.appender;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
@@ -28,12 +29,11 @@ import ch.qos.logback.core.CoreConstants;
import ch.qos.logback.core.encoder.DummyEncoder;
import ch.qos.logback.core.encoder.NopEncoder;
import ch.qos.logback.core.layout.DummyLayout;
-import ch.qos.logback.core.util.TeeOutputStream;
public class ConsoleAppenderTest extends AbstractAppenderTest<Object> {
- TeeOutputStream tee;
+ XTeeOutputStream tee;
PrintStream original;
@@ -46,7 +46,7 @@ public class ConsoleAppenderTest extends AbstractAppenderTest<Object> {
// tee = new TeeOutputStream(original);
// keep the console quiet
- tee = new TeeOutputStream(null);
+ tee = new XTeeOutputStream(null);
// redirect System.out to tee
System.setOut(new PrintStream(tee));
@@ -99,6 +99,9 @@ public class ConsoleAppenderTest extends AbstractAppenderTest<Object> {
ca.start();
ca.doAppend(new Object());
ca.stop();
+ // ConsoleAppender must keep the underlying stream open.
+ // The console is not ours to close.
+ assertFalse(tee.isClosed());
assertEquals(DummyLayout.DUMMY + "CLOSED", tee.toString());
}
@@ -113,7 +116,6 @@ public class ConsoleAppenderTest extends AbstractAppenderTest<Object> {
ca.setEncoder(dummyEncoder);
ca.start();
ca.doAppend(new Object());
-
assertEquals(DummyLayout.DUMMY, new String(tee.toByteArray(), encodingName));
}
diff --git a/logback-core/src/test/java/ch/qos/logback/core/appender/XTeeOutputStream.java b/logback-core/src/test/java/ch/qos/logback/core/appender/XTeeOutputStream.java
new file mode 100644
index 0000000..bc707a2
--- /dev/null
+++ b/logback-core/src/test/java/ch/qos/logback/core/appender/XTeeOutputStream.java
@@ -0,0 +1,25 @@
+package ch.qos.logback.core.appender;
+
+import java.io.IOException;
+import java.io.PrintStream;
+
+import ch.qos.logback.core.util.TeeOutputStream;
+
+public class XTeeOutputStream extends TeeOutputStream {
+
+ boolean closed = false;
+ public XTeeOutputStream(PrintStream targetPS) {
+ super(targetPS);
+ }
+
+ @Override
+ public void close() throws IOException {
+ closed = true;
+ super.close();
+ }
+
+
+ public boolean isClosed() {
+ return closed;
+ }
+}
-----------------------------------------------------------------------
Summary of changes:
.../java/ch/qos/logback/core/ConsoleAppender.java | 13 +++-------
.../logback/core/appender/ConsoleAppenderTest.java | 10 ++++---
.../logback/core/appender/XTeeOutputStream.java | 25 ++++++++++++++++++++
3 files changed, 35 insertions(+), 13 deletions(-)
create mode 100644 logback-core/src/test/java/ch/qos/logback/core/appender/XTeeOutputStream.java
hooks/post-receive
--
Logback: the generic, reliable, fast and flexible logging framework.
1
0
http://github.com/ceki/logback/commit/b6bb584c8cb7ff7e6ebf9a0eefcfec48f5a84…
Does not compile, it has some xxxxxx in ConsoleAppender.
Also, I think there's a problem with logback-classic pom.
It overrides logback-core compile dependency with a logback-core test-
dependency.
Regards,
Joern.
2
2
Apologize if this is a duplicate, I tried to send before subscribing
the first time - not sure if it got though.
----
I am using Sybase SQLAnywhere 10 which doesn't support
getGeneratedKeys. Furtunately, the dialect is exactly the same as for
Microsoft SQLServer. I have attached a new SQLDialect, and an update
to
ch.qos.logback.core.db.dialect.DBUtil to recognize the dialect. I
believe this will work with other versions of Sybase SQLAnywhere, but
I don't have any other versions to test.
Can these small changes be integrated into the trunk? If so, what can
I do to help?
http://old.nabble.com/file/p27714558/SybaseSqlAnywhereDialect.java
SybaseSqlAnywhereDialect.java
http://old.nabble.com/file/p27714558/DBUtil.java DBUtil.java
2
1

[GIT] Logback: the generic, reliable, fast and flexible logging framework. branch, encoder, updated. v0.9.18-48-gb6bb584
by git-noreply@pixie.qos.ch 25 Feb '10
by git-noreply@pixie.qos.ch 25 Feb '10
25 Feb '10
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Logback: the generic, reliable, fast and flexible logging framework.".
The branch, encoder has been updated
via b6bb584c8cb7ff7e6ebf9a0eefcfec48f5a8418c (commit)
from 434a8cf298338f202859806243041721de0b32e6 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=b6bb584c8cb7ff7e6ebf9a0e…
http://github.com/ceki/logback/commit/b6bb584c8cb7ff7e6ebf9a0eefcfec48f5a84…
commit b6bb584c8cb7ff7e6ebf9a0eefcfec48f5a8418c
Author: Ceki Gulcu <ceki(a)qos.ch>
Date: Fri Feb 26 00:09:17 2010 +0100
- updating the docs subsequent to the introduction of encoders
diff --git a/logback-core/src/main/java/ch/qos/logback/core/ConsoleAppender.java b/logback-core/src/main/java/ch/qos/logback/core/ConsoleAppender.java
index 48167ac..2939510 100644
--- a/logback-core/src/main/java/ch/qos/logback/core/ConsoleAppender.java
+++ b/logback-core/src/main/java/ch/qos/logback/core/ConsoleAppender.java
@@ -13,6 +13,10 @@
*/
package ch.qos.logback.core;
+import java.io.IOException;
+import java.io.OutputStream;
+
+import ch.qos.logback.core.status.ErrorStatus;
import ch.qos.logback.core.status.Status;
import ch.qos.logback.core.status.WarnStatus;
@@ -82,12 +86,16 @@ public class ConsoleAppender<E> extends OutputStreamAppender<E> {
}
/**
- * This method overrides the parent {@link OutputStreamAppender#closeWriter}
+ * This method overrides the parent {@link OutputStreamAppender#closeOutputStream}
* implementation because the console stream is not ours to close.
*/
- protected final void closeWriter() {
- encoderClose();
- }
+// @Override
+// protected final void closeOutputStream() {
+// encoderClose();
+// }
+
+ xxxxxxxxxx
+
}
diff --git a/logback-examples/src/main/java/chapters/appenders/ConfigurationTester.java b/logback-examples/src/main/java/chapters/appenders/ConfigurationTester.java
index 07ffcf4..d215a04 100644
--- a/logback-examples/src/main/java/chapters/appenders/ConfigurationTester.java
+++ b/logback-examples/src/main/java/chapters/appenders/ConfigurationTester.java
@@ -26,13 +26,6 @@ import chapters.appenders.sub.sample.Bar;
/**
*
* This class can be used to check the result of a configuration file.
- * <p>
- * When all the logback-core, logback-classic, logback-examples and their dependencies have been
- * added to the ClassPath, one can launch this class using the following
- * command:
- * <p>
- * java chapter4.ConfigurationTester
- * chapter4/conf/name_of_the_configuration_file.xml
*
* @author Sébastien Pennec
*/
@@ -42,6 +35,7 @@ public class ConfigurationTester {
Logger logger = (Logger) LoggerFactory.getLogger(ConfigurationTester.class);
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
+ System.out.println("***********"+args[0]);
try {
JoranConfigurator configurator = new JoranConfigurator();
configurator.setContext(lc);
@@ -50,16 +44,16 @@ public class ConfigurationTester {
} catch (JoranException je) {
je.printStackTrace();
}
- // After we've called Joran, let's print information about the
+ // After we've called Joran, let's print information about the
// internal status of logback
- StatusPrinter.print(lc.getStatusManager());
-
+ StatusPrinter.print(lc);
+
logger.debug("**Hello {}", new Bar());
MDC.put("testKey", "testValueFromMDC");
MDC.put("testKey2", "value2");
for (int i = 0; i < 10; i++) {
logger.debug("logging statement " + i);
- Thread.sleep(1000);
+ Thread.sleep(100);
}
Bar bar = new Bar();
bar.createLoggingRequest();
diff --git a/logback-examples/src/main/java/chapters/appenders/conf/logback-Console.xml b/logback-examples/src/main/java/chapters/appenders/conf/logback-Console.xml
index 5c2e94d..68a72ee 100644
--- a/logback-examples/src/main/java/chapters/appenders/conf/logback-Console.xml
+++ b/logback-examples/src/main/java/chapters/appenders/conf/logback-Console.xml
@@ -1,10 +1,11 @@
-<configuration>
+<configuration debug="true">
- <appender name="STDOUT"
- class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%-4relative [%thread] %-5level - %msg %n</Pattern>
- </layout>
+ <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+ <!-- encoders are assigned the type
+ ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
+ <encoder>
+ <pattern>%-4relative [%thread] %-5level - %msg%n</pattern>
+ </encoder>
</appender>
<root level="debug">
diff --git a/logback-examples/src/main/java/chapters/appenders/conf/logback-HtmlToConsole.xml b/logback-examples/src/main/java/chapters/appenders/conf/logback-HtmlToConsole.xml
index c528bb9..a762945 100644
--- a/logback-examples/src/main/java/chapters/appenders/conf/logback-HtmlToConsole.xml
+++ b/logback-examples/src/main/java/chapters/appenders/conf/logback-HtmlToConsole.xml
@@ -1,13 +1,12 @@
<configuration>
- <appender name="STDOUT"
- class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.html.HTMLLayout">
+ <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+ <encoder class="ch.qos.logback.classic.html.HTMLLayout">
<cssBuilder class="ch.qos.logback.core.helpers.CssBuilder">
<url>path_to_StyleFile.css</url>
</cssBuilder>
<Pattern>%-4relative [%thread] %-5level - %msg%n</Pattern>
- </layout>
+ </encoder>
</appender>
<root level="debug">
diff --git a/logback-examples/src/main/java/chapters/appenders/conf/logback-JMSQueue.xml b/logback-examples/src/main/java/chapters/appenders/conf/logback-JMSQueue.xml
index cb5be89..5f08af2 100644
--- a/logback-examples/src/main/java/chapters/appenders/conf/logback-JMSQueue.xml
+++ b/logback-examples/src/main/java/chapters/appenders/conf/logback-JMSQueue.xml
@@ -1,7 +1,6 @@
<configuration>
- <appender name="Queue"
- class="ch.qos.logback.classic.net.JMSQueueAppender">
+ <appender name="Queue" class="ch.qos.logback.classic.net.JMSQueueAppender">
<InitialContextFactoryName>
org.apache.activemq.jndi.ActiveMQInitialContextFactory
</InitialContextFactoryName>
diff --git a/logback-examples/src/main/java/chapters/appenders/conf/logback-JMSTopic.xml b/logback-examples/src/main/java/chapters/appenders/conf/logback-JMSTopic.xml
index b6bb778..d1dcc5d 100644
--- a/logback-examples/src/main/java/chapters/appenders/conf/logback-JMSTopic.xml
+++ b/logback-examples/src/main/java/chapters/appenders/conf/logback-JMSTopic.xml
@@ -1,7 +1,6 @@
<configuration>
- <appender name="Topic"
- class="ch.qos.logback.classic.net.JMSTopicAppender">
+ <appender name="Topic" class="ch.qos.logback.classic.net.JMSTopicAppender">
<InitialContextFactoryName>
org.apache.activemq.jndi.ActiveMQInitialContextFactory
</InitialContextFactoryName>
diff --git a/logback-examples/src/main/java/chapters/appenders/conf/logback-MDC.xml b/logback-examples/src/main/java/chapters/appenders/conf/logback-MDC.xml
index cd26ef2..b8b1f91 100644
--- a/logback-examples/src/main/java/chapters/appenders/conf/logback-MDC.xml
+++ b/logback-examples/src/main/java/chapters/appenders/conf/logback-MDC.xml
@@ -1,10 +1,9 @@
<configuration>
- <appender name="STDOUT"
- class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%-4relative [%thread] %-5level %X{testKey} - %msg%n</Pattern>
- </layout>
+ <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+ <encoder>
+ <pattern>%-4relative [%thread] %-5level %X{testKey} - %msg%n</pattern>
+ </encoder>
</appender>
<root level="debug">
diff --git a/logback-examples/src/main/java/chapters/appenders/conf/logback-PrudentTimeBasedRolling.xml b/logback-examples/src/main/java/chapters/appenders/conf/logback-PrudentTimeBasedRolling.xml
index a8a71ae..54a68b9 100644
--- a/logback-examples/src/main/java/chapters/appenders/conf/logback-PrudentTimeBasedRolling.xml
+++ b/logback-examples/src/main/java/chapters/appenders/conf/logback-PrudentTimeBasedRolling.xml
@@ -2,15 +2,15 @@
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- Support multiple-JVMs writing to the same log file -->
- <Prudent>true</Prudent>
+ <prudent>true</prudent>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <FileNamePattern>logFile.%d{yyyy-MM-dd}.log</FileNamePattern>
- <MaxHistory>30</MaxHistory>
+ <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
+ <maxHistory>30</maxHistory>
</rollingPolicy>
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</Pattern>
- </layout>
+ <encoder>
+ <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
+ </encoder>
</appender>
<root level="debug">
diff --git a/logback-examples/src/main/java/chapters/appenders/conf/logback-RollingFixedWindow.xml b/logback-examples/src/main/java/chapters/appenders/conf/logback-RollingFixedWindow.xml
index 9be0ce0..2315964 100644
--- a/logback-examples/src/main/java/chapters/appenders/conf/logback-RollingFixedWindow.xml
+++ b/logback-examples/src/main/java/chapters/appenders/conf/logback-RollingFixedWindow.xml
@@ -1,18 +1,19 @@
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <File>testFile.log</File>
+
+ <file>testFile.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
- <FileNamePattern>testFile.%i.log.zip</FileNamePattern>
- <MinIndex>1</MinIndex>
- <MaxIndex>3</MaxIndex>
+ <fileNamePattern>testFile.%i.log.zip</fileNamePattern>
+ <minIndex>1</minIndex>
+ <maxIndex>3</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
- <MaxFileSize>5MB</MaxFileSize>
+ <maxFileSize>5MB</maxFileSize>
</triggeringPolicy>
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</Pattern>
- </layout>
+ <encoder>
+ <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
+ </encoder>
</appender>
<root level="debug">
diff --git a/logback-examples/src/main/java/chapters/appenders/conf/logback-RollingSizeBased.xml b/logback-examples/src/main/java/chapters/appenders/conf/logback-RollingSizeBased.xml
index 53d061e..8563e24 100644
--- a/logback-examples/src/main/java/chapters/appenders/conf/logback-RollingSizeBased.xml
+++ b/logback-examples/src/main/java/chapters/appenders/conf/logback-RollingSizeBased.xml
@@ -1,21 +1,20 @@
<configuration>
- <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <File>test.log</File>
- <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
- <FileNamePattern>tests.%i.log.zip</FileNamePattern>
- <MinIndex>1</MinIndex>
- <MaxIndex>3</MaxIndex>
- </rollingPolicy>
+ <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+ <file>test.log</file>
+ <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
+ <fileNamePattern>tests.%i.log.zip</fileNamePattern>
+ <minIndex>1</minIndex>
+ <maxIndex>3</maxIndex>
+ </rollingPolicy>
- <triggeringPolicy
- class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
- <MaxFileSize>1KB</MaxFileSize>
- </triggeringPolicy>
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</Pattern>
- </layout>
- </appender>
+ <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
+ <maxFileSize>1KB</maxFileSize>
+ </triggeringPolicy>
+ <encoder>
+ <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
+ </encoder>
+ </appender>
<root level="debug">
<appender-ref ref="FILE" />
diff --git a/logback-examples/src/main/java/chapters/appenders/conf/logback-RollingTimeBased.xml b/logback-examples/src/main/java/chapters/appenders/conf/logback-RollingTimeBased.xml
index 1155757..f2db600 100644
--- a/logback-examples/src/main/java/chapters/appenders/conf/logback-RollingTimeBased.xml
+++ b/logback-examples/src/main/java/chapters/appenders/conf/logback-RollingTimeBased.xml
@@ -1,15 +1,16 @@
<configuration>
+
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <File>logFile.log</File>
+ <file>logFile.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>logFile.%d{yyyy-MM-dd}.log</FileNamePattern>
<!-- keep 30 days worth of history -->
- <MaxHistory>30</MaxHistory>
+ <maxHistory>30</maxHistory>
</rollingPolicy>
- <layout>
- <Pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</Pattern>
- </layout>
+ <encoder>
+ <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
+ </encoder>
</appender>
<root level="debug">
diff --git a/logback-examples/src/main/java/chapters/appenders/conf/logback-SMTP.xml b/logback-examples/src/main/java/chapters/appenders/conf/logback-SMTP.xml
index f9965e2..2eea43a 100644
--- a/logback-examples/src/main/java/chapters/appenders/conf/logback-SMTP.xml
+++ b/logback-examples/src/main/java/chapters/appenders/conf/logback-SMTP.xml
@@ -1,16 +1,15 @@
<configuration>
- <appender name="SMTP"
- class="ch.qos.logback.classic.net.SMTPAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%-4relative [%thread] %-5level %class - %msg%n</Pattern>
- </layout>
- <From>sender_email(a)host.ch</From>
+ <appender name="SMTP" class="ch.qos.logback.classic.net.SMTPAppender">
+ <encoder>
+ <pattern>%-4relative [%thread] %-5level %class - %msg%n</pattern>
+ </encoder>
+ <from>sender_email(a)host.ch</from>
<SMTPHost>mail.host.ch</SMTPHost>
- <Subject>Last Event: %-10logger %nopex</Subject>
+ <subject>Last Event: %-10logger %nopex</subject>
- <To>recipient_email(a)host.ch</To>
+ <to>recipient_email(a)host.ch</to>
</appender>
<root level="debug">
diff --git a/logback-examples/src/main/java/chapters/appenders/conf/logback-SMTPWithHtml.xml b/logback-examples/src/main/java/chapters/appenders/conf/logback-SMTPWithHtml.xml
index d071845..96ed8f0 100644
--- a/logback-examples/src/main/java/chapters/appenders/conf/logback-SMTPWithHtml.xml
+++ b/logback-examples/src/main/java/chapters/appenders/conf/logback-SMTPWithHtml.xml
@@ -1,17 +1,16 @@
<configuration>
- <appender name="SMTP"
- class="ch.qos.logback.classic.net.SMTPAppender">
+ <appender name="SMTP" class="ch.qos.logback.classic.net.SMTPAppender">
<layout class="ch.qos.logback.classic.html.HTMLLayout">
<pattern>%relative%thread%mdc%level%class%msg</pattern>
<throwableRenderer class="ch.qos.logback.classic.html.DefaultThrowableRenderer" />
</layout>
- <From>sender_email(a)host.ch</From>
+ <from>sender_email(a)host.ch</from>
<SMTPHost>mail.host.ch</SMTPHost>
- <Subject>Last Event: %-10logger %nopex</Subject>
+ <subject>Last Event: %-10logger %nopex</subject>
- <To>recipient_email(a)host.ch</To>
+ <to>recipient_email(a)host.ch</to>
</appender>
<root level="debug">
diff --git a/logback-examples/src/main/java/chapters/appenders/conf/logback-fileAppender.xml b/logback-examples/src/main/java/chapters/appenders/conf/logback-fileAppender.xml
index 06d1663..c67ccda 100644
--- a/logback-examples/src/main/java/chapters/appenders/conf/logback-fileAppender.xml
+++ b/logback-examples/src/main/java/chapters/appenders/conf/logback-fileAppender.xml
@@ -1,12 +1,14 @@
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
- <File>testFile.log</File>
- <Append>true</Append>
+ <file>testFile.log</file>
+ <append>true</append>
- <layout>
- <Pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</Pattern>
- </layout>
+ <!-- encoders are assigned the type
+ ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
+ <encoder>
+ <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
+ </encoder>
</appender>
<root level="debug">
diff --git a/logback-examples/src/main/java/chapters/appenders/conf/logback-syslog.xml b/logback-examples/src/main/java/chapters/appenders/conf/logback-syslog.xml
index 04c564a..e3ce180 100644
--- a/logback-examples/src/main/java/chapters/appenders/conf/logback-syslog.xml
+++ b/logback-examples/src/main/java/chapters/appenders/conf/logback-syslog.xml
@@ -1,10 +1,9 @@
<configuration>
- <appender name="SYSLOG"
- class="ch.qos.logback.classic.net.SyslogAppender">
- <SyslogHost>${syslogHost}</SyslogHost>
- <Facility>${facility}</Facility>
- <SuffixPattern>%-4relative [%thread] %-5level - %msg</SuffixPattern>
+ <appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender">
+ <syslogHost>${syslogHost}</syslogHost>
+ <facility>${facility}</facility>
+ <suffixPattern>%-4relative [%thread] %-5level - %msg</suffixPattern>
</appender>
<root level="DEBUG">
diff --git a/logback-examples/src/main/java/chapters/appenders/conf/logback-timestamp.xml b/logback-examples/src/main/java/chapters/appenders/conf/logback-timestamp.xml
index 1bcc421..340280b 100644
--- a/logback-examples/src/main/java/chapters/appenders/conf/logback-timestamp.xml
+++ b/logback-examples/src/main/java/chapters/appenders/conf/logback-timestamp.xml
@@ -8,10 +8,10 @@
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<!-- use the previously created timestamp to create a uniquely
named log file -->
- <File>log-${bySecond}.txt</File>
- <layout>
- <Pattern>%logger{35} - %msg%n</Pattern>
- </layout>
+ <file>log-${bySecond}.txt</file>
+ <encoder>
+ <pattern>%logger{35} - %msg%n</pattern>
+ </encoder>
</appender>
<root level="debug">
diff --git a/logback-examples/src/main/java/chapters/appenders/conf/logbback-sizeAndTime.xml b/logback-examples/src/main/java/chapters/appenders/conf/logbback-sizeAndTime.xml
index 8e72709..de69021 100644
--- a/logback-examples/src/main/java/chapters/appenders/conf/logbback-sizeAndTime.xml
+++ b/logback-examples/src/main/java/chapters/appenders/conf/logbback-sizeAndTime.xml
@@ -1,21 +1,18 @@
<configuration>
- <appender name="ROLLING"
- class="ch.qos.logback.core.rolling.RollingFileAppender">
- <File>${randomOutputDir}z${testId}</File>
- <rollingPolicy
- class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <FileNamePattern>
+ <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
+ <file>${randomOutputDir}z${testId}</file>
+ <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+ <fileNamePattern>
${randomOutputDir}${testId}-%d{yyyy-MM-dd_HH_mm_ss}.%i
- </FileNamePattern>
- <TimeBasedFileNamingAndTriggeringPolicy
- class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
- <MaxFileSize>${sizeThreshold}</MaxFileSize>
- </TimeBasedFileNamingAndTriggeringPolicy>
+ </fileNamePattern>
+ <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+ <maxFileSize>${sizeThreshold}</maxFileSize>
+ </timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
- <layout>
- <Pattern>%msg%n</Pattern>
- </layout>
+ <encoder>
+ <pattern>%msg%n</pattern>
+ </encoder>
</appender>
diff --git a/logback-examples/src/main/java/chapters/appenders/countingConsole.xml b/logback-examples/src/main/java/chapters/appenders/countingConsole.xml
index 26d3168..3dac3ef 100644
--- a/logback-examples/src/main/java/chapters/appenders/countingConsole.xml
+++ b/logback-examples/src/main/java/chapters/appenders/countingConsole.xml
@@ -3,8 +3,8 @@
<configuration>
- <appender name="CUSTOM" class="chapter4.CountingConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
+ <appender name="CUSTOM" class="chapters.appenders.CountingConsoleAppender">
+ <layout>
<Pattern>%date [%thread] %-5level %logger - %msg%n</Pattern>
</layout>
<limit>5</limit>
diff --git a/logback-site/src/site/pages/manual/appenders.html b/logback-site/src/site/pages/manual/appenders.html
index ef0aaae..f36f1d3 100644
--- a/logback-site/src/site/pages/manual/appenders.html
+++ b/logback-site/src/site/pages/manual/appenders.html
@@ -258,7 +258,7 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
<tr class="a">
<td><b><span class="option">Encoder</span></b></td>
- <td><code>String</code></td>
+ <td><code>Encoder</code></td>
<td>Determines the manner in which an event is written to the
underlying <code>OutputStreamAppender</code>. Encoders are
@@ -268,32 +268,14 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
</table>
- <p>This example creates a <code>OutputStreamAppender</code> that uses an
- <code>OutputStreamWriter</code> wrapping a
- <code>FileOutputStream</code> as its underlying <code>Writer</code>
- object, with immediate flushing disabled. It then proceeds to log a
- single debug message. According to <code>OutputStreamWriter</code>
- javadocs, each invocation of a <code>write()</code> method causes
- the encoding converter to be invoked on the given character(s). The
- resulting bytes are accumulated in a buffer before being written to
- the underlying output stream. As astonishing as this may seem,
- running <code>ExitWoes1</code> will not produce any data in the file
- <em>exitWoes1.log</em> because the Java VM does not flush output
- streams when it exits. Calling the <code>stop()</code>
- method of a <code>LoggerContext</code> ensures that all appenders in
- the hierarchy are closed and their buffers are flushed. The <code><a
- href="../xref/chapter4/ExitWoes2.html">ExitWoes2</a></code> class
- uses this statement and outputs a logging request.
- </p>
-
- <p>The <code>OutputStreamAppender</code> is the superclass of three other
+ <p>The <code>OutputStreamAppender</code> is the superclass of three other
appenders, namely <code>ConsoleAppender</code>,
<code>FileAppender</code> which in turn is the super class of
<code>RollingFileAppender</code>. The next figure illustrates the
class diagram for <code>OutputStreamAppender</code> and its subclasses.
</p>
- <img src="images/chapters/appenders/appenderClassDiagram.jpg" alt="A UML diagram showing FileAppender"/>
+ <img src="images/chapters/appenders/appenderClassDiagram.jpg" alt="A UML diagram showing OutputStreamAppender and sub-classes"/>
<h3>
@@ -320,16 +302,11 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
<th>Description</th>
</tr>
<tr class="b">
- <td><b><span class="option">Encoding</span></b></td>
- <td><code>String</code></td>
+ <td><b><span class="option">Encoder</span></b></td>
+ <td><code>Encoder</code></td>
<td>See <code>OutputStreamAppender</code> properties.</td>
</tr>
<tr class="a">
- <td><b><span class="option">ImmediateFlush</span></b></td>
- <td><code>boolean</code></td>
- <td>See <code>OutputStreamAppender</code> properties.</td>
- </tr>
- <tr class="b">
<td><b><span class="option">Target</span></b></td>
<td><code>String</code></td>
<td>
@@ -343,14 +320,13 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
<code>ConsoleAppender</code>.
</p>
- <em>Example 4.<span class="autoEx"/>: ConsoleAppender configuration (logback-examples/src/main/java/chapter4/conf/logback-Console.xml)</em>
+ <em>Example 4.<span class="autoEx"/>: ConsoleAppender configuration (logback-examples/src/main/java/chapters/appenders/conf/logback-Console.xml)</em>
<pre class="prettyprint source"><configuration>
- <b><appender name="STDOUT"
- class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
+ <b><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+ <encoder class="ch.qos.logback.classic.PatternLayout">
<Pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</Pattern>
- </layout>
+ </encoder>
</appender></b>
<root level="debug">
@@ -364,7 +340,7 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
</p>
<p class="source">java <a
- href="../xref/chapter4/ConfigurationTester.html">chapter4.ConfigurationTester</a> src/main/java/chapter4/conf/logback-Console.xml</p>
+ href="../xref/chapters/appenders/ConfigurationTester.html">chapters.appenders.ConfigurationTester</a> src/main/java/chapters/appenders/conf/logback-Console.xml</p>
<h3>
@@ -409,28 +385,8 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
<td><code>String</code></td>
<td>See <code>OutputStreamAppender</code> properties.</td>
</tr>
- <tr class="alt">
- <td><b><span class="option">BufferedIO</span></b></td>
- <td><code>boolean</code></td>
- <td>The <span class="option">BufferedIO</span> option is set to
- false by default. If set to true, the underlying
- <code>OutputStreamWriter</code> is wrapped by a
- <code>BufferedWriter</code> object. Setting <span
- class="option">BufferedIO</span> to true automatically sets the
- <span class="option">ImmediateFlush</span> option to false.
- The name <span class="option">BufferedIO</span> is slightly
- misleading because buffered I/O is already supported by
- <code>OutputStreamWriter</code>. Setting <span
- class="option">BufferedIO</span> to true has the effect of
- buffering I/O as well as character to raw byte conversions,
- saving a few CPU cycles in the process.
- </td>
- </tr>
- <tr >
- <td><b><span class="option">BufferSize</span></b></td>
- <td><code>int</code></td>
- <td>Size of <code>BufferedWriter</code> buffer. The default value is 8192.</td>
- </tr>
+
+
<tr class="alt">
<td><b><span class="option">File</span></b></td>
<td><code>String</code></td>
@@ -450,30 +406,22 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
</p>
</td>
</tr>
- <tr >
- <td><b><span class="option">ImmediateFlush</span></b></td>
- <td><code>boolean</code></td>
- <td>See <code>OutputStreamAppender</code> properties.</td>
- </tr>
+
- <tr class="alt">
+ <tr >
<td><b><span class="option bold"><a name="prudent"
href="#prudent">Prudent</a></span></b></td>
<td><code>boolean</code></td>
- <td>
- <p>In prudent mode, <code>FileAppeder</code> will safely
+ <td>In prudent mode, <code>FileAppeder</code> will safely
write to the specified file, even in the presence of other
<code>FileAppender</code> instances running in different
JVMs, potentially running on different hosts. The default
value for prudent mode is <code>false</code>.
- </p>
<p>Prudent mode implies that <span
- class="option">Append</span> and <span
- class="option">ImmediateFlush</span> properties are
- automatically set to true and the <span
- class="option">BufferedIO</span> set to false.
+ class="option">Append</span> property is automatically set to
+ true.
</p>
<p>Prudent mode will approximately triple (x3) the cost of
@@ -496,40 +444,21 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
</tr>
</table>
- <p>By default, <code>FileAppender</code> performs a flush on each
- event, ensuring that events are immediately written to disk.
- Setting the <span class="option">ImmediateFlush</span> option to
- false can drastically reduce I/O activity by letting
- <code>OutputStreamWriter</code> buffer bytes before writing them on
- disk. For short messages, we have observed 2 or 3 fold increases in
- logging throughput, i.e. the number of logs output per unit of
- time. For longer messages, the throughput gains are somewhat less
- dramatic, and range between 1.4 and 2 fold. Enabling the <span
- class="option">BufferedIO</span> option, that is buffering
- character to byte conversions, increases performance by an
- additional 10% to 40% compared to only disk I/O buffering (<span
- class="option">ImmediateFlush</span>=false). Performance varies
- somewhat depending on the host machine as well as JDK version.
- Throughput measurements are based on the <code>chapter4.IO</code>
- application. Please refer to <a href="../xref/chapter4/IO.html">
- <em>logback-examples/src/main/java/chapter4/IO.java</em></a> for
- actual source code.
- </p>
-
<p>Below is an example of a configuration file for
<code>FileAppender</code>:
</p>
- <em>Example 4.<span class="autoEx"/>: FileAppender configuration (logback-examples/src/main/java/chapter4/conf/logback-fileAppender.xml)</em>
+ <em>Example 4.<span class="autoEx"/>: FileAppender configuration (logback-examples/src/main/java/chapters/appenders/conf/logback-fileAppender.xml)</em>
<pre class="prettyprint source"><configuration>
<b><appender name="FILE" class="ch.qos.logback.core.FileAppender">
<File>testFile.log</File>
<Append>true</Append>
-
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</Pattern>
- </layout>
+ <!-- encoders are assigned the type
+ ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
+ <encoder>
+ <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
+ </encoder>
</appender></b>
<root level="debug">
@@ -542,7 +471,7 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
following command:
</p>
- <p class="source">java chapter4.ConfigurationTester src/main/java/chapter4/conf/logback-fileAppender.xml</p>
+ <p class="source">java chapters.appenders.ConfigurationTester src/main/java/chapters/appenders/conf/logback-fileAppender.xml</p>
<h3>
@@ -557,7 +486,7 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
element. Here's an example.</p>
- <em>Example 4.<span class="autoEx"/>: Uniquely named FileAppender configuration by timestamp (logback-examples/src/main/java/chapter4/conf/logback-timestamp.xml)</em>
+ <em>Example 4.<span class="autoEx"/>: Uniquely named FileAppender configuration by timestamp (logback-examples/src/main/java/chapters/appenders/conf/logback-timestamp.xml)</em>
<pre class="prettyprint source"><configuration>
<!-- Insert the current time formatted as "yyyyMMdd'T'HHmmss" under
@@ -682,7 +611,7 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
</tr>
<tr class="b">
<td valign="top"><span class="option"><a name="prudentWithRolling"
- href="#prudentWithRolling"><b>Prudent</b></A></span></td>
+ href="#prudentWithRolling"><b>Prudent</b></a></span></td>
<td valign="top"><code>boolean</code></td>
@@ -690,14 +619,15 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
<td valign="top">
- <p><a
+ <a
href="#FixedWindowRollingPolicy"><code>FixedWindowRollingPolicy</code></a>
- is not supported in prudent mode.</p>
+ is not supported in prudent mode.
<p> <code>RollingFileAppender</code> supports the prudent
mode in conjunction with <a
href="#TimeBasedRollingPolicy"><code>TimeBasedRollingPolicy</code></a>
albeit with two restrictions.
+ </p>
<ol>
<li>In prudent mode, file compression is not supported nor
@@ -711,12 +641,8 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
</li>
</ol>
-
- </td>
-
-
- <p>See also <code>FileAppender</code> properties.</p>
+ <p>See also <code>FileAppender</code> properties.</p>
</td>
</tr>
</table>
@@ -906,7 +832,7 @@ public interface RollingPolicy extends LifeCycle {
</p>
<em>Example 4.<span class="autoEx"/>: Sample configuration of a <code>RollingFileAppender</code> using a
- <code>FixedWindowRollingPolicy</code> (logback-examples/src/main/java/chapter4/conf/logback-RollingFixedWindow.xml)</em>
+ <code>FixedWindowRollingPolicy</code> (logback-examples/src/main/java/chapters/appenders/conf/logback-RollingFixedWindow.xml)</em>
<pre class="prettyprint source"><configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
@@ -1196,7 +1122,7 @@ public interface RollingPolicy extends LifeCycle {
</p>
<em>Example 4.<span class="autoEx"/>: Sample configuration of a <code>RollingFileAppender</code> using a
- <code>TimeBasedRollingPolicy</code> (logback-examples/src/main/java/chapter4/conf/logback-RollingTimeBased.xml)</em>
+ <code>TimeBasedRollingPolicy</code> (logback-examples/src/main/java/chapters/appenders/conf/logback-RollingTimeBased.xml)</em>
<pre class="prettyprint source"><configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>logFile.log</File>
@@ -1223,7 +1149,7 @@ public interface RollingPolicy extends LifeCycle {
</p>
<em>Example 4.<span class="autoEx"/>: Sample configuration of a <code>RollingFileAppender</code> using a
- <code>TimeBasedRollingPolicy</code> (logback-examples/src/main/java/chapter4/conf/logback-PrudentTimeBasedRolling.xml)</em>
+ <code>TimeBasedRollingPolicy</code> (logback-examples/src/main/java/chapters/appenders/conf/logback-PrudentTimeBasedRolling.xml)</em>
<pre class="prettyprint source"><configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<b><!-- Support multiple-JVM writing to the same log file --></b>
@@ -1261,7 +1187,7 @@ public interface RollingPolicy extends LifeCycle {
<em>Example 4.<span class="autoEx"/>: Sample configuration for
<code>SizeAndTimeBasedFNATP</code>
- (logback-examples/src/main/java/chapter4/conf/logback-sizeAndTime.xml)</em>
+ (logback-examples/src/main/java/chapters/appenders/conf/logback-sizeAndTime.xml)</em>
<pre class="prettyprint source"><configuration>
<appender name="ROLLING"
class="ch.qos.logback.core.rolling.RollingFileAppender">
@@ -1361,7 +1287,7 @@ public interface TriggeringPolicy<E> extends LifeCycle {
</p>
<em>Example 4.<span class="autoEx"/>: Sample configuration of a <code>RollingFileAppender</code> using a
- <code>SizeBasedTriggeringPolicy</code> (logback-examples/src/main/java/chapter4/conf/logback-RollingSizeBased.xml)</em>
+ <code>SizeBasedTriggeringPolicy</code> (logback-examples/src/main/java/chapters/appenders/conf/logback-RollingSizeBased.xml)</em>
<pre class="prettyprint source"><configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>testFile.log</File>
@@ -1536,7 +1462,7 @@ public interface TriggeringPolicy<E> extends LifeCycle {
</p>
<p class="source">java ch.qos.logback.classic.net.SimpleSocketServer 6000 \
- src/main/java/chapter4/socket/server1.xml</p>
+ src/main/java/chapters/appenders/socket/server1.xml</p>
<p>where 6000 is the port number to listen on and
<em>server1.xml</em> is a configuration script that adds a
@@ -1545,8 +1471,8 @@ public interface TriggeringPolicy<E> extends LifeCycle {
have started <code>SimpleSocketServer</code>, you can send it log
events from multiple clients using <code>SocketAppender</code>.
The examples associated with this manual include two such clients:
- <code>chapter4.SocketClient1</code> and
- <code>chapter4.SocketClient2</code> Both clients wait for the user
+ <code>chapters.appenders.SocketClient1</code> and
+ <code>chapters.appenders.SocketClient2</code> Both clients wait for the user
to type a line of text on the console. The text is encapsulated
in a logging event of level debug and then sent to the remote
server. The two clients differ in the configuration of the
@@ -1559,7 +1485,7 @@ public interface TriggeringPolicy<E> extends LifeCycle {
local host, you connect to it with the following command:
</p>
- <p class="source">java chapter4.socket.SocketClient1 localhost 6000</p>
+ <p class="source">java chapters.appenders.socket.SocketClient1 localhost 6000</p>
<p>Each line that you type should appear on the console of the
<code>SimpleSocketServer</code> launched in the previous step. If
@@ -1579,7 +1505,7 @@ public interface TriggeringPolicy<E> extends LifeCycle {
and attaches it to the root logger.
</p>
- <em>Example 4.<span class="autoEx"/>: SocketAppender configuration (logback-examples/src/main/java/chapter4/socket/client1.xml)</em>
+ <em>Example 4.<span class="autoEx"/>: SocketAppender configuration (logback-examples/src/main/java/chapters/appenders/socket/client1.xml)</em>
<pre class="prettyprint source"><configuration>
<appender name="SOCKET" class="ch.qos.logback.classic.net.SocketAppender">
@@ -1605,7 +1531,7 @@ public interface TriggeringPolicy<E> extends LifeCycle {
</p>
<p class="source">java -Dhost=localhost -Dport=6000 -DincludeCallerData=false \
- chapter4.socket.SocketClient2 src/main/java/chapter4/socket/client1.xml</p>
+ chapters.appenders.socket.SocketClient2 src/main/java/chapters/appenders/socket/client1.xml</p>
<p>This command should give similar results to the previous
<code>SocketClient1</code>
@@ -1622,7 +1548,7 @@ public interface TriggeringPolicy<E> extends LifeCycle {
</p>
<p class="source"> java ch.qos.logback.classic.net.SimpleSocketServer 6000 \
- src/main/java/chapter4/socket/server2.xml</p>
+ src/main/java/chapters/appenders/socket/server2.xml</p>
<p>The configuration file <em>server2.xml</em> creates a
<code>ConsoleAppender</code> whose layout outputs the caller's file
@@ -1634,7 +1560,7 @@ public interface TriggeringPolicy<E> extends LifeCycle {
caller:
</p>
- <p class="source">2006-11-06 17:37:30,968 DEBUG [Thread-0] [?:?] chapter4.socket.SocketClient2 - Hi</p>
+ <p class="source">2006-11-06 17:37:30,968 DEBUG [Thread-0] [?:?] chapters.appenders.socket.SocketClient2 - Hi</p>
<p>
The outcome can be easily changed by instructing the <code>SocketAppender</code>
@@ -1643,7 +1569,7 @@ public interface TriggeringPolicy<E> extends LifeCycle {
</p>
<div class="source"><pre>java -Dhost=localhost -Dport=6000 -DincludeCallerData=true \
- chapter4.socket.SocketClient2 src/main/java/chapter4/socket/client1.xml
+ chapters.appenders.socket.SocketClient2 src/main/java/chapters/appenders/socket/client1.xml
</pre></div>
<p>
@@ -2038,7 +1964,7 @@ Context ctx = new InitialContext(env);</pre>
<code>JMSTopicAppender</code> is rather straightforward to configure:
</p>
- <em>Example 4.<span class="autoEx"/>: JMSTopicAppender configuration (logback-examples/src/main/java/chapter4/conf/logback-JMSTopic.xml)</em>
+ <em>Example 4.<span class="autoEx"/>: JMSTopicAppender configuration (logback-examples/src/main/java/chapters/appenders/conf/logback-JMSTopic.xml)</em>
<pre class="prettyprint source"><configuration>
<appender name="Topic"
@@ -2106,7 +2032,7 @@ Context ctx = new InitialContext(env);</pre>
A typical <code>JMSQueueAppender</code> configuration file looks very
similar to that of a <code>JMSTopicAppender</code>.
</p>
- <em>Example 4.<span class="autoEx"/>: JMSQueueAppender configuration (logback-examples/src/main/java/chapter4/conf/logback-JMSQueue.xml)</em>
+ <em>Example 4.<span class="autoEx"/>: JMSQueueAppender configuration (logback-examples/src/main/java/chapters/appenders/conf/logback-JMSQueue.xml)</em>
<pre class="prettyprint source"><configuration>
<appender name="Queue"
@@ -2307,7 +2233,7 @@ Context ctx = new InitialContext(env);</pre>
<p>A sample application, <a
- href="../xref/chapter4/mail/EMail.html"><code>chapter4.mail.EMail</code></a>
+ href="../xref/chapters/appenders/mail/EMail.html"><code>chapters.appenders.mail.EMail</code></a>
generates a number of log messages messages followed by a single
error message. It takes two parameters. The first parameter is an
integer corresponding to the number of logging events to
@@ -2321,7 +2247,7 @@ Context ctx = new InitialContext(env);</pre>
<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>
+ <em>Example 4.<span class="autoEx"/>: A sample <code>SMTPAppender</code> configuration (logback-examples/src/main/java/chapters/appenders/mail/mail1.xml)</em>
<pre class="prettyprint source"><configuration>
<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
<SMTPHost>ADDRESS-OF-YOUR-SMTP-HOST</SMTPHost>
@@ -2339,7 +2265,7 @@ Context ctx = new InitialContext(env);</pre>
</root>
</configuration></pre>
- <p>Before trying out <code>chapter4.mail.Email</code> application
+ <p>Before trying out <code>chapters.appenders.mail.Email</code> application
with the above configuration file, you must set the <span
class="option">SMTPHost</span>, <span class="option">To</span> and
<span class="option">From</span> properties to values appropriate for
@@ -2347,7 +2273,7 @@ Context ctx = new InitialContext(env);</pre>
configuration file, execute the following command:
</p>
-<div class="source"><pre>java chapter4.mail.EMail 300 src/main/java/chapter4/mail/mail.xml</pre></div>
+<div class="source"><pre>java chapters.appenders.mail.EMail 300 src/main/java/chapters/appenders/mail/mail.xml</pre></div>
<p>The recipient you specified should receive an email message
containing 300 logging events formatted by
@@ -2355,7 +2281,7 @@ Context ctx = new InitialContext(env);</pre>
message as shown by Mozilla Thunderbird.
</p>
- <p><img src="images/chapter4/smtpAppender1.jpg" alt="resulting email"/></p>
+ <p><img src="images/chapters/appenders/smtpAppender1.jpg" alt="resulting email"/></p>
<p>In the next example configuration file <em>mail2.xml</em>, the
values for the <span class="option">SMTPHost</span>, <span
@@ -2374,7 +2300,7 @@ Context ctx = new InitialContext(env);</pre>
<p>You can pass the required parameters on the command line:</p>
<div class="source"><pre>java -Dfrom=source(a)xyz.com -Dto=recipient(a)xyz.com -DsmtpHost=some_smtp_host \
- chapter4.mail.EMail 10000 src/main/java/chapter4/mail/mail2.xml
+ chapters.appenders.mail.EMail 10000 src/main/java/chapters/appenders/mail/mail2.xml
</pre></div>
<p>Be sure to replace with values as appropriate for your
@@ -2392,12 +2318,12 @@ Context ctx = new InitialContext(env);</pre>
<p>Given that the default size of the cyclic buffer is 512, the
recipient should see an email message containing 512 events
conveniently formatted in an HTML table. Note that this run of the
- <code>chapter4.mail.Email</code> application generated 10'000
+ <code>chapters.appenders.mail.Email</code> application generated 10'000
events of which only the last 512 were included in the outgoing
email.
</p>
- <p><img src="images/chapter4/smtpAppender2.jpg" alt="2nd email"/></p>
+ <p><img src="images/chapters/appenders/smtpAppender2.jpg" alt="2nd email"/></p>
<p>Email clients such as Mozilla Thunderbird, Eudora or MS
Outlook, offer reasonably good CSS support for HTML email.
@@ -2437,8 +2363,8 @@ Context ctx = new InitialContext(env);</pre>
</p>
<em>Example 4.<span class="autoEx"/>: A <code>EventEvaluator</code> implementation
-that evaluates to <code>true</code> every 1024th event (<a href="../xref/chapter4/mail/CounterBasedEvaluator.html">logback-examples/src/main/java/chapter4/mail/CounterBasedEvaluator.java</a>)</em>
-<pre class="prettyprint source">package chapter4.mail;
+that evaluates to <code>true</code> every 1024th event (<a href="../xref/chapters/appenders/mail/CounterBasedEvaluator.html">logback-examples/src/main/java/chapters/appenders/mail/CounterBasedEvaluator.java</a>)</em>
+<pre class="prettyprint source">package chapters.appenders.mail;
import ch.qos.logback.core.boolex.EvaluationException;
import ch.qos.logback.core.boolex.EventEvaluator;
@@ -2488,11 +2414,11 @@ public class CounterBasedEvaluator extends ContextAwareBase implements EventEval
</p>
<em>Example 4.<span class="autoEx"/>: <code>SMTPAppender</code> with custom
-<code>Evaluator</code> and buffer size (logback-examples/src/main/java/chapter4/mail/mail3.xml)</em>
+<code>Evaluator</code> and buffer size (logback-examples/src/main/java/chapters/appenders/mail/mail3.xml)</em>
<pre class="prettyprint source"><configuration>
<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
- <b><Evaluator class="chapter4.mail.CounterBasedEvaluator" /></b>
+ <b><Evaluator class="chapters.appenders.mail.CounterBasedEvaluator" /></b>
<BufferSize>1050</BufferSize>
<SMTPHost>${smtpHost}</SMTPHost>
<To>${to}</To>
@@ -2521,7 +2447,7 @@ public class CounterBasedEvaluator extends ContextAwareBase implements EventEval
point clearer.
</p>
- <p>The <a href="../xref/chapter4/mail/Marked_EMail.html">Marked_EMail</a> application contains several logging
+ <p>The <a href="../xref/chapters/appenders/mail/Marked_EMail.html">Marked_EMail</a> application contains several logging
statements some of which are of level ERROR. One noteworthy
statement contains a marker. Here is the relevant code.
</p>
@@ -2537,7 +2463,7 @@ logger.error(<b>notifyAdminMarker</b>,
</p>
<em>Example 4.<span class="autoEx"/>: <code>SMTPAppender</code> with
- <code>OnMarkerEvaluator</code> (logback-examples/src/main/java/chapter4/mail/mailWithMarker.xml)</em>
+ <code>OnMarkerEvaluator</code> (logback-examples/src/main/java/chapters/appenders/mail/mailWithMarker.xml)</em>
<pre class="prettyprint source"><configuration>
<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
@@ -2562,7 +2488,7 @@ logger.error(<b>notifyAdminMarker</b>,
<p>Give it a whirl with the following command:</p>
<pre class="source">java -Dfrom=source(a)xyz.com -Dto=recipient(a)xyz.com -DsmtpHost=some_smtp_host \
- chapter4.mail.Marked_EMail src/main/java/chapter4/mail/mailWithMarker.xml</pre>
+ chapters.appenders.mail.Marked_EMail src/main/java/chapters/appenders/mail/mailWithMarker.xml</pre>
@@ -2584,7 +2510,7 @@ logger.error(<b>notifyAdminMarker</b>,
<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/chapters/appenders/mail/gmailSSL.xml)</em>
<pre class="prettyprint source"><configuration>
<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
@@ -2615,7 +2541,7 @@ logger.error(<b>notifyAdminMarker</b>,
<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>
+ <em>Example 4.<span class="autoEx"/>: <code>SMTPAppender</code> to GMAIL using STARTTLS (logback-examples/src/main/java/chapters/appenders/mail/gmailSTARTTLS.xml)</em>
<pre class="prettyprint source"><configuration>
<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
@@ -2905,15 +2831,15 @@ logger.error(<b>notifyAdminMarker</b>,
<p>The <em>logging_event</em> table:</p>
- <img src="images/chapter4/dbAppenderLE.gif" alt="Logging Event table" />
+ <img src="images/chapters/appenders/dbAppenderLE.gif" alt="Logging Event table" />
<p>The <em>logging_event_exception</em> table:</p>
- <img src="images/chapter4/dbAppenderLEException.gif" alt="Logging Event Exception table" />
+ <img src="images/chapters/appenders/dbAppenderLEException.gif" alt="Logging Event Exception table" />
<p>The <em>logging_event_property</em> table:</p>
- <img src="images/chapter4/dbAppenderLEProperty.gif" alt="Logging Event Property table" />
+ <img src="images/chapters/appenders/dbAppenderLEProperty.gif" alt="Logging Event Property table" />
<h4>ConnectionSource</h4>
@@ -2934,7 +2860,7 @@ logger.error(<b>notifyAdminMarker</b>,
The following configuration file is what one would need.
</p>
-<em>Example 4.<span class="autoEx"/>: <code>DBAppender</code> configuration (logback-examples/src/main/java/chapter4/db/append-toMySQL-with-driverManager.xml)</em>
+<em>Example 4.<span class="autoEx"/>: <code>DBAppender</code> configuration (logback-examples/src/main/java/chapters/appenders/db/append-toMySQL-with-driverManager.xml)</em>
<pre class="prettyprint source"><configuration>
<b><appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
@@ -3012,7 +2938,7 @@ logger.error(<b>notifyAdminMarker</b>,
<code>javax.sql.DataSource</code>.
</p>
-<em>Example 4.<span class="autoEx"/>: <code>DBAppender</code> configuration (logback-examples/src/main/java/chapter4/db/append-with-datasource.xml)</em>
+<em>Example 4.<span class="autoEx"/>: <code>DBAppender</code> configuration (logback-examples/src/main/java/chapters/appenders/db/append-with-datasource.xml)</em>
<pre class="prettyprint source"><configuration>
<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
@@ -3125,7 +3051,7 @@ logger.error(<b>notifyAdminMarker</b>,
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>
+ <em>Example 4.<span class="autoEx"/> <code>DBAppender</code> configuration without pooling (logback-examples/src/main/java/chapters/appenders/db/append-toMySQL-with-datasource.xml)</em>
<pre class="prettyprint source"><configuration>
<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
@@ -3158,7 +3084,7 @@ logger.error(<b>notifyAdminMarker</b>,
<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>
+ <em>Example 4.<span class="autoEx"/>: <code>DBAppender</code> configuration with pooling (logback-examples/src/main/java/chapters/appenders/db/append-toMySQL-with-datasource-and-pooling.xml)</em>
<pre class="prettyprint source"><configuration>
<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
@@ -3293,7 +3219,7 @@ logger.error(<b>notifyAdminMarker</b>,
Here is a sample configuration using a <code>SyslogAppender</code>.
</p>
-<em>Example 4.<span class="autoEx"/>: <code>SyslogAppender</code> configuration (logback-examples/src/main/java/chapter4/conf/logback-syslog.xml)</em>
+<em>Example 4.<span class="autoEx"/>: <code>SyslogAppender</code> configuration (logback-examples/src/main/java/chapters/appenders/conf/logback-syslog.xml)</em>
<pre class="prettyprint source"><configuration>
<appender name="SYSLOG"
@@ -3336,7 +3262,7 @@ logger.error(<b>notifyAdminMarker</b>,
</p>
<p>After configuring logback, the <a
- href="../xref/chapter4/sift/SiftExample.html">SiftExample</a>
+ href="../xref/chapters/appenders/sift/SiftExample.html">SiftExample</a>
application logs a message stating that the application has
started. It then sets the MDC key "userid" to "Alice" and logs a
message. Here is the salient code:</p>
@@ -3351,7 +3277,7 @@ logger.debug("Alice says hello"); </p>
<em>Example 4.<span class="autoEx"/>: <code>SiftingAppender</code>
configuration
- (logback-examples/src/main/java/chapter4/sift/byUserid.xml)</em>
+ (logback-examples/src/main/java/chapters/appenders/sift/byUserid.xml)</em>
<pre class="prettyprint source"><configuration>
@@ -3436,7 +3362,7 @@ logger.debug("Alice says hello"); </p>
<em>Example 4.<span class="autoExec"/>:
<code>CountingConsoleAppender</code>
- (logback-examples/src/main/java/chapter4/CountingConsoleAppender.java)</em>
+ (logback-examples/src/main/java/chapters/appenders/CountingConsoleAppender.java)</em>
<pre class="prettyprint source">package chapter4;
import ch.qos.logback.core.AppenderBase;
@@ -3509,10 +3435,10 @@ public class CountingConsoleAppender extends AppenderBase<ILoggingEvent> {
</ul>
<p>The <a
- href="../xref/chapter4/CountingConsoleAppender.html"><code>CountingConsoleAppender</code></a>
+ href="../xref/chapters/appenders/CountingConsoleAppender.html"><code>CountingConsoleAppender</code></a>
can be configured like any other appender. See sample
configuration file
- <em>logback-examples/src/main/java/chapter4/countingConsole.xml</em>
+ <em>logback-examples/src/main/java/chapters/appenders/countingConsole.xml</em>
for an example.
</p>
@@ -3559,7 +3485,7 @@ public class CountingConsoleAppender extends AppenderBase<ILoggingEvent> {
<p>
Here is a sample configuration of a <code>SMTPAppender</code> in the access environment.
</p>
-<em>Example 4.<span class="autoEx"/>: <code>SMTPAppender</code> configuration (logback-examples/src/main/java/chapter4/conf/access/logback-smtp.xml)</em>
+<em>Example 4.<span class="autoEx"/>: <code>SMTPAppender</code> configuration (logback-examples/src/main/java/chapters/appenders/conf/access/logback-smtp.xml)</em>
<pre class="prettyprint source"><appender name="SMTP"
class="ch.qos.logback.access.net.SMTPAppender">
<layout class="ch.qos.logback.access.html.HTMLLayout">
@@ -3729,7 +3655,7 @@ public class CountingConsoleAppender extends AppenderBase<ILoggingEvent> {
Here is a sample configuration that uses <code>DBAppender</code>.
</p>
- <em>Example 4.<span class="autoEx"/>: DBAppender configuration (logback-examples/src/main/java/chapter4/conf/access/logback-DB.xml)</em>
+ <em>Example 4.<span class="autoEx"/>: DBAppender configuration (logback-examples/src/main/java/chapters/appenders/conf/access/logback-DB.xml)</em>
<pre class="prettyprint source"><configuration>
<appender name="DB" class="ch.qos.logback.access.db.DBAppender">
@@ -3768,7 +3694,7 @@ public class CountingConsoleAppender extends AppenderBase<ILoggingEvent> {
<p>Below is an example configuration file.</p>
- <em>Example 4.<span class="autoEx"/>: SiftingAppender configuration (logback-examples/src/main/java/chapter4/conf/sift/access-siftingFile.xml)</em>
+ <em>Example 4.<span class="autoEx"/>: SiftingAppender configuration (logback-examples/src/main/java/chapters/appenders/conf/sift/access-siftingFile.xml)</em>
<pre class="prettyprint source"><configuration>
<appender name="SIFTING" class="ch.qos.logback.access.sift.SiftingAppender">
diff --git a/logback-site/src/site/pages/manual/configuration.html b/logback-site/src/site/pages/manual/configuration.html
index 1786108..d9f801a 100644
--- a/logback-site/src/site/pages/manual/configuration.html
+++ b/logback-site/src/site/pages/manual/configuration.html
@@ -241,7 +241,6 @@ public class Foo {
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
- <encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
-----------------------------------------------------------------------
Summary of changes:
.../java/ch/qos/logback/core/ConsoleAppender.java | 16 +-
.../chapters/appenders/ConfigurationTester.java | 16 +-
.../chapters/appenders/conf/logback-Console.xml | 13 +-
.../appenders/conf/logback-HtmlToConsole.xml | 7 +-
.../chapters/appenders/conf/logback-JMSQueue.xml | 3 +-
.../chapters/appenders/conf/logback-JMSTopic.xml | 3 +-
.../java/chapters/appenders/conf/logback-MDC.xml | 9 +-
.../conf/logback-PrudentTimeBasedRolling.xml | 12 +-
.../appenders/conf/logback-RollingFixedWindow.xml | 17 +-
.../appenders/conf/logback-RollingSizeBased.xml | 29 ++--
.../appenders/conf/logback-RollingTimeBased.xml | 11 +-
.../java/chapters/appenders/conf/logback-SMTP.xml | 15 +-
.../appenders/conf/logback-SMTPWithHtml.xml | 9 +-
.../appenders/conf/logback-fileAppender.xml | 12 +-
.../chapters/appenders/conf/logback-syslog.xml | 9 +-
.../chapters/appenders/conf/logback-timestamp.xml | 8 +-
.../appenders/conf/logbback-sizeAndTime.xml | 25 +--
.../java/chapters/appenders/countingConsole.xml | 4 +-
logback-site/src/site/pages/manual/appenders.html | 232 +++++++-------------
.../src/site/pages/manual/configuration.html | 1 -
20 files changed, 186 insertions(+), 265 deletions(-)
hooks/post-receive
--
Logback: the generic, reliable, fast and flexible logging framework.
1
0

[GIT] Logback: the generic, reliable, fast and flexible logging framework. branch, encoder, updated. v0.9.18-47-g434a8cf
by git-noreply@pixie.qos.ch 24 Feb '10
by git-noreply@pixie.qos.ch 24 Feb '10
24 Feb '10
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Logback: the generic, reliable, fast and flexible logging framework.".
The branch, encoder has been updated
via 434a8cf298338f202859806243041721de0b32e6 (commit)
from bf2254414040e25408df3b469ea4b6decd01f304 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=434a8cf298338f2028598062…
http://github.com/ceki/logback/commit/434a8cf298338f202859806243041721de0b3…
commit 434a8cf298338f202859806243041721de0b32e6
Author: Ceki Gulcu <ceki(a)qos.ch>
Date: Thu Feb 25 00:09:57 2010 +0100
- ongoing work on the documentation
- renamed WriterAppender as OutputStreamAppender
diff --git a/logback-core/src/main/java/ch/qos/logback/core/ConsoleAppender.java b/logback-core/src/main/java/ch/qos/logback/core/ConsoleAppender.java
index 0a168d9..48167ac 100644
--- a/logback-core/src/main/java/ch/qos/logback/core/ConsoleAppender.java
+++ b/logback-core/src/main/java/ch/qos/logback/core/ConsoleAppender.java
@@ -28,7 +28,7 @@ import ch.qos.logback.core.status.WarnStatus;
* @author Ceki Gülcü
*/
-public class ConsoleAppender<E> extends WriterAppender<E> {
+public class ConsoleAppender<E> extends OutputStreamAppender<E> {
public static final String SYSTEM_OUT = "System.out";
public static final String SYSTEM_ERR = "System.err";
@@ -82,7 +82,7 @@ public class ConsoleAppender<E> extends WriterAppender<E> {
}
/**
- * This method overrides the parent {@link WriterAppender#closeWriter}
+ * This method overrides the parent {@link OutputStreamAppender#closeWriter}
* implementation because the console stream is not ours to close.
*/
protected final void closeWriter() {
diff --git a/logback-core/src/main/java/ch/qos/logback/core/FileAppender.java b/logback-core/src/main/java/ch/qos/logback/core/FileAppender.java
index 418537b..46eae83 100644
--- a/logback-core/src/main/java/ch/qos/logback/core/FileAppender.java
+++ b/logback-core/src/main/java/ch/qos/logback/core/FileAppender.java
@@ -29,7 +29,7 @@ import ch.qos.logback.core.util.FileUtil;
*
* @author Ceki Gülcü
*/
-public class FileAppender<E> extends WriterAppender<E> {
+public class FileAppender<E> extends OutputStreamAppender<E> {
/**
* Append to or truncate the file? The default value for this variable is
@@ -43,11 +43,6 @@ public class FileAppender<E> extends WriterAppender<E> {
*/
protected String fileName = null;
- /**
- * The size of the IO buffer. Default is 8K.
- */
- protected int bufferSize = 8 * 1024;
-
private boolean prudent = false;
/**
@@ -172,16 +167,6 @@ public class FileAppender<E> extends WriterAppender<E> {
}
}
-
-
- public int getBufferSize() {
- return bufferSize;
- }
-
- public void setBufferSize(int bufferSize) {
- this.bufferSize = bufferSize;
- }
-
/**
* @see #setPrudent(boolean)
*
diff --git a/logback-core/src/main/java/ch/qos/logback/core/WriterAppender.java b/logback-core/src/main/java/ch/qos/logback/core/OutputStreamAppender.java
similarity index 90%
rename from logback-core/src/main/java/ch/qos/logback/core/WriterAppender.java
rename to logback-core/src/main/java/ch/qos/logback/core/OutputStreamAppender.java
index e2de82c..1a38cac 100644
--- a/logback-core/src/main/java/ch/qos/logback/core/WriterAppender.java
+++ b/logback-core/src/main/java/ch/qos/logback/core/OutputStreamAppender.java
@@ -21,15 +21,15 @@ import ch.qos.logback.core.spi.DeferredProcessingAware;
import ch.qos.logback.core.status.ErrorStatus;
/**
- * WriterAppender appends events to a hava.io.Writer. This class provides basic
- * services that other appenders build upon.
+ * OutputStreamAppender appends events to a {@link OutputStream}. This class
+ * provides basic services that other appenders build upon.
*
* For more information about this appender, please refer to the online manual
- * at http://logback.qos.ch/manual/appenders.html#WriterAppender
+ * at http://logback.qos.ch/manual/appenders.html#OutputStreamAppender
*
* @author Ceki Gülcü
*/
-public class WriterAppender<E> extends UnsynchronizedAppenderBase<E> {
+public class OutputStreamAppender<E> extends UnsynchronizedAppenderBase<E> {
/**
* It is the encoder which is ultimately responsible for writing the event to
@@ -42,7 +42,6 @@ public class WriterAppender<E> extends UnsynchronizedAppenderBase<E> {
*/
protected Object lock = new Object();
-
/**
* This is the {@link OutputStream outputStream} where output will be written.
*/
@@ -51,10 +50,9 @@ public class WriterAppender<E> extends UnsynchronizedAppenderBase<E> {
/**
* The default constructor does nothing.
*/
- public WriterAppender() {
+ public OutputStreamAppender() {
}
-
/**
* The underlying output stream used by this appender.
*
@@ -122,7 +120,7 @@ public class WriterAppender<E> extends UnsynchronizedAppenderBase<E> {
this.outputStream = null;
} catch (IOException e) {
addStatus(new ErrorStatus(
- "Could not close output stream for WriterAppener.", this, e));
+ "Could not close output stream for OutputStreamAppender.", this, e));
}
}
}
@@ -133,8 +131,9 @@ public class WriterAppender<E> extends UnsynchronizedAppenderBase<E> {
encoder.init(outputStream);
} catch (IOException ioe) {
this.started = false;
- addStatus(new ErrorStatus("Failed to write footer for appender named ["
- + name + "].", this, ioe));
+ addStatus(new ErrorStatus(
+ "Failed to initialize encoder for appender named [" + name + "].",
+ this, ioe));
}
}
}
diff --git a/logback-core/src/test/java/ch/qos/logback/core/WriterAppenderTest.java b/logback-core/src/test/java/ch/qos/logback/core/WriterAppenderTest.java
index eea1422..e5988a7 100644
--- a/logback-core/src/test/java/ch/qos/logback/core/WriterAppenderTest.java
+++ b/logback-core/src/test/java/ch/qos/logback/core/WriterAppenderTest.java
@@ -83,7 +83,7 @@ public class WriterAppenderTest {
}
public void headerFooterCheck(String fileHeader, String presentationHeader, String presentationFooter, String fileFooter) {
- WriterAppender<Object> wa = new WriterAppender<Object>();
+ OutputStreamAppender<Object> wa = new OutputStreamAppender<Object>();
wa.setContext(context);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
diff --git a/logback-core/src/test/java/ch/qos/logback/core/appender/DummyWriterAppender.java b/logback-core/src/test/java/ch/qos/logback/core/appender/DummyWriterAppender.java
index 9321161..2c5ee63 100644
--- a/logback-core/src/test/java/ch/qos/logback/core/appender/DummyWriterAppender.java
+++ b/logback-core/src/test/java/ch/qos/logback/core/appender/DummyWriterAppender.java
@@ -15,10 +15,10 @@ package ch.qos.logback.core.appender;
import java.io.OutputStream;
-import ch.qos.logback.core.WriterAppender;
+import ch.qos.logback.core.OutputStreamAppender;
public class DummyWriterAppender<E> extends
- WriterAppender<E> {
+ OutputStreamAppender<E> {
DummyWriterAppender(OutputStream os) {
this.setOutputStream(os);
diff --git a/logback-examples/src/main/java/chapters/appenders/ExitWoes1.java b/logback-examples/src/main/java/chapters/appenders/ExitWoes1.java
index 9641379..29f5bb2 100644
--- a/logback-examples/src/main/java/chapters/appenders/ExitWoes1.java
+++ b/logback-examples/src/main/java/chapters/appenders/ExitWoes1.java
@@ -21,7 +21,7 @@ import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.spi.ILoggingEvent;
-import ch.qos.logback.core.WriterAppender;
+import ch.qos.logback.core.OutputStreamAppender;
import ch.qos.logback.core.encoder.EchoEncoder;
public class ExitWoes1 {
@@ -29,7 +29,7 @@ public class ExitWoes1 {
public static void main(String[] args) throws Exception {
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
lc.reset(); // we want to override the default-config.
- WriterAppender<ILoggingEvent> writerAppender = new WriterAppender<ILoggingEvent>();
+ OutputStreamAppender<ILoggingEvent> writerAppender = new OutputStreamAppender<ILoggingEvent>();
writerAppender.setContext(lc);
writerAppender.setEncoder(new EchoEncoder<ILoggingEvent>());
diff --git a/logback-examples/src/main/java/chapters/appenders/ExitWoes2.java b/logback-examples/src/main/java/chapters/appenders/ExitWoes2.java
index 09be353..6459cc8 100644
--- a/logback-examples/src/main/java/chapters/appenders/ExitWoes2.java
+++ b/logback-examples/src/main/java/chapters/appenders/ExitWoes2.java
@@ -21,7 +21,7 @@ import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.spi.ILoggingEvent;
-import ch.qos.logback.core.WriterAppender;
+import ch.qos.logback.core.OutputStreamAppender;
import ch.qos.logback.core.encoder.EchoEncoder;
import ch.qos.logback.core.util.StatusPrinter;
@@ -30,7 +30,7 @@ public class ExitWoes2 {
public static void main(String[] args) throws Exception {
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
lc.reset();//this is to cancel default-config.
- WriterAppender<ILoggingEvent> writerAppender = new WriterAppender<ILoggingEvent>();
+ OutputStreamAppender<ILoggingEvent> writerAppender = new OutputStreamAppender<ILoggingEvent>();
writerAppender.setContext(lc);
writerAppender.setEncoder(new EchoEncoder<ILoggingEvent>());
diff --git a/logback-site/src/site/pages/manual/appenders.html b/logback-site/src/site/pages/manual/appenders.html
index fa89892..ef0aaae 100644
--- a/logback-site/src/site/pages/manual/appenders.html
+++ b/logback-site/src/site/pages/manual/appenders.html
@@ -57,10 +57,8 @@ import ch.qos.logback.core.spi.LifeCycle;
public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachable {
public String getName();
- <b>void doAppend(E event);</b>
- public void setLayout(Layout<E> layout);
- public Layout<E> getLayout();
public void setName(String name);
+ <b>void doAppend(E event);</b>
}</pre>
@@ -88,16 +86,16 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
<p>Appenders are ultimately responsible for outputting logging
events. However, they may delegate the actual formatting of the
- event to a <code>Layout</code> object. Each layout is associated
- with one and only one appender, referred to as the owning
- appender. Some appenders have a built-in or fixed event
- format. Consequently, they do not require nor have a layout. For
- example, the <code>SocketAppender</code> simply serializes logging
- events before transmitting them over the wire.
+ event to a <code>Layout</code> or to an <code>Encoder</code> object.
+ Each layout/encoder is associated with one and only one appender,
+ referred to as the owning appender. Some appenders have a built-in
+ or fixed event format. Consequently, they do not require nor have a
+ layout/encoder. For example, the <code>SocketAppender</code> simply
+ serializes logging events before transmitting them over the wire.
</p>
- <a name="AppenderBase"></a>
- <h2>AppenderBase</h2>
+
+ <h2><a name="AppenderBase">AppenderBase</a></h2>
<p>The <a href="../xref/ch/qos/logback/core/AppenderBase.html">
<code>ch.qos.logback.core.AppenderBase</code></a> class is an
@@ -150,7 +148,17 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
<code>doAppend()</code> method, ensuring <em>T</em>'s exclusive
access to the appender.
</p>
-
+
+ <p>Since such syncronization is not always appropriate, logback
+ ships with <a
+ href="../xref/ch/qos/logback/core/UnsynchronizedAppenderBase.html"><code>ch.qos.logback.core.UnsynchronizedAppenderBase</code></a>
+ which is very similar to the <a
+ href="../xref/ch/qos/logback/core/AppenderBase.html"><code>AppenderBase</code></a>
+ class. For the sake of conciseness, we want to be discussing
+ <code>UnsynchronizedAppenderBase</code> in the remainder of this document.
+ </p>
+
+
<p>The first thing the <code>doAppend()</code> method does is to
check whether the guard is set to true. If it is, it immediately
exits. If the guard is not set, it is set to true at the next
@@ -158,7 +166,8 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
will not recursively call itself. Just imagine that a component,
called somewhere beyond the <code>append()</code> method, wants to
log something. Its call could be directed to the very same appender
- that just called it.
+ that just called it resulting in an infinite loop and a stack
+ overflow.
</p>
<p>In the following statement we check whether the
@@ -223,20 +232,21 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
<h3>
- <a name="WriterAppender" href="#WriterAppender">WriterAppender</a>
+ <a name="OutputStreamAppender" href="#OutputStreamAppender">OutputStreamAppender</a>
</h3>
<p><a
- href="../xref/ch/qos/logback/core/WriterAppender.html"><code>WriterAppender</code></a>
- appends events to a <code>java.io.Writer</code>. This class
+ href="../xref/ch/qos/logback/core/OutputStreamAppender.html"><code>OutputStreamAppender</code></a>
+ appends events to a <code>java.io.OutputStream</code>. This class
provides basic services that other appenders build upon. Users do
- not usually instantiate <code>WriterAppender</code> objects
- directly. Since <code>java.io.Writer</code> type cannot be mapped
- to a string, as there is no way to specify the target
- <code>Writer</code> object in a configuration script. Simply put,
- you cannot configure a <code>WriterAppender</code> from a script.
- However, this does not mean that <code>WriterAppender</code> lacks
- configurable properties. These properties are described next.
+ not usually instantiate <code>OutputStreamAppender</code> objects
+ directly. Since in general the <code>java.io.OutputStream</code>
+ type cannot be conveninetly mapped to a string, as there is no way
+ to specify the target <code>OutputStream</code> object in a
+ configuration script. Simply put, you cannot configure a
+ <code>OutputStreamAppender</code> from a configuration file.
+ However, this does not mean that <code>OutputStreamAppender</code>
+ lacks configurable properties. These properties are described next.
</p>
<table class="bodyTable">
@@ -247,90 +257,18 @@ public interface Appender<E> extends LifeCycle, ContextAware, FilterAttachabl
</tr>
<tr class="a">
- <td><b><span class="option">Encoding</span></b></td>
+ <td><b><span class="option">Encoder</span></b></td>
<td><code>String</code></td>
- <td>The encoding specifies the method of conversion between
- Java's internal 16-bit Unicode representation of characters into
- raw 8-bit bytes. This appender will use the local platform's
- default encoding unless you say otherwise by specifying an <span
- class="option">Encoding</span> value. According to the
- <code>java.lang</code> package documentation, acceptable values
- are dependent on the VM implementation although all
- implementations are required to support at least the following
- encodings: <em>US-ASCII</em>, <em>ISO-8859-1</em>,
- <em>UTF-8</em>, <em>UTF-16BE</em>, <em>UTF-16LE</em> and
- <em>UTF-16</em>. As mentioned previously, by default, the <span
- class="option">Encoding</span> option is <code>null</code> such
- that the platform's default encoding is used.
+ <td>Determines the manner in which an event is written to the
+ underlying <code>OutputStreamAppender</code>. Encoders are
+ described in a <a href="encoders.html">dictated chapter</a>.
</td>
</tr>
- <tr class="b">
- <td><b><span class="option">ImmediateFlush</span></b></td>
- <td><code>boolean</code></td>
-
- <td>If the <span class="option">ImmediateFlush</span> option is
- set to true, then each write of a logging event will be followed
- by a flush operation on the underlying <code>Writer</code>
- object. Conversely, if the option is set to false, each write
- will not be followed by a flush. In general, skipping the flush
- operation improves logging throughput by roughly 15%. The
- downside is that if the application exits abruptly, the
- unwritten characters buffered inside the <code>Writer</code>
- might be lost. This can be particularly troublesome as those
- unwritten characters may contain crucial information needed in
- identifying the reasons behind a crash. By default, the <span
- class="option">ImmediateFlush</span> option is set to true.
- </td>
-
- </tr>
- </table>
- <p>In general, if you disable immediate flushing, then make sure to
- flush any output streams when your application exits. Otherwise, log
- messages will be lost as illustrated by the next example.
- </p>
-
- <em>Example 4.<span class="autoEx"/>: Exiting an application without flushing (<a href="../xref/chapter4/ExitWoes1.html">logback-examples/src/main/java/chapter4/ExitWoes1.java</a>)</em>
-
- <pre class="prettyprint source">package chapter4;
-
-import java.io.FileOutputStream;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-
-
-import org.slf4j.LoggerFactory;
-
-import ch.qos.logback.classic.Logger;
-import ch.qos.logback.classic.LoggerContext;
-import ch.qos.logback.classic.spi.ILoggingEvent;
-import ch.qos.logback.core.WriterAppender;
-import ch.qos.logback.core.layout.EchoLayout;
-
-public class ExitWoes1 {
-
- public static void main(String[] args) throws Exception {
- LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
- lc.reset(); // we want to override the default-config.
- WriterAppender<ILoggingEvent> writerAppender = new WriterAppender<ILoggingEvent>();
- writerAppender.setContext(lc);
- writerAppender.setLayout(new EchoLayout<ILoggingEvent>());
-
- OutputStream os = new FileOutputStream("exitWoes1.log");
- writerAppender.setWriter(new OutputStreamWriter(os));
- writerAppender.setImmediateFlush(false);
- writerAppender.start();
- Logger root = lc.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME);
- root.addAppender(writerAppender);
-
- Logger logger = lc.getLogger(ExitWoes1.class);
-
- logger.debug("Hello world.");
- }
-}</pre>
+ </table>
- <p>This example creates a <code>WriterAppender</code> that uses an
+ <p>This example creates a <code>OutputStreamAppender</code> that uses an
<code>OutputStreamWriter</code> wrapping a
<code>FileOutputStream</code> as its underlying <code>Writer</code>
object, with immediate flushing disabled. It then proceeds to log a
@@ -348,18 +286,19 @@ public class ExitWoes1 {
uses this statement and outputs a logging request.
</p>
- <p>The <code>WriterAppender</code> is the superclass of three other
+ <p>The <code>OutputStreamAppender</code> is the superclass of three other
appenders, namely <code>ConsoleAppender</code>,
<code>FileAppender</code> which in turn is the super class of
<code>RollingFileAppender</code>. The next figure illustrates the
- class diagram for <code>WriterAppender</code> and its subclasses.
+ class diagram for <code>OutputStreamAppender</code> and its subclasses.
</p>
- <img src="images/chapter4/fileAppenderUML.png" alt="A UML diagram showing FileAppender"/>
+ <img src="images/chapters/appenders/appenderClassDiagram.jpg" alt="A UML diagram showing FileAppender"/>
<h3>
- <a name="ConsoleAppender" href="#ConsoleAppender">ConsoleAppender</a>
+ <a name="ConsoleAppender"
+ href="#ConsoleAppender">ConsoleAppender</a>
</h3>
<p>The <a href="../xref/ch/qos/logback/core/ConsoleAppender.html">
@@ -383,12 +322,12 @@ public class ExitWoes1 {
<tr class="b">
<td><b><span class="option">Encoding</span></b></td>
<td><code>String</code></td>
- <td>See <code>WriterAppender</code> properties.</td>
+ <td>See <code>OutputStreamAppender</code> properties.</td>
</tr>
<tr class="a">
<td><b><span class="option">ImmediateFlush</span></b></td>
<td><code>boolean</code></td>
- <td>See <code>WriterAppender</code> properties.</td>
+ <td>See <code>OutputStreamAppender</code> properties.</td>
</tr>
<tr class="b">
<td><b><span class="option">Target</span></b></td>
@@ -434,7 +373,7 @@ public class ExitWoes1 {
<p>The <a
href="../xref/ch/qos/logback/core/FileAppender.html"><code>FileAppender</code></a>,
- a subclass of <code>WriterAppender</code>, appends log events into
+ a subclass of <code>OutputStreamAppender</code>, appends log events into
a file. The target file is specified by the <span
class="option">File</span> option. If the file already exists, it
is either appended to, or truncated depending on the value of the
@@ -468,7 +407,7 @@ public class ExitWoes1 {
<tr >
<td><b><span class="option">Encoding</span></b></td>
<td><code>String</code></td>
- <td>See <code>WriterAppender</code> properties.</td>
+ <td>See <code>OutputStreamAppender</code> properties.</td>
</tr>
<tr class="alt">
<td><b><span class="option">BufferedIO</span></b></td>
@@ -514,7 +453,7 @@ public class ExitWoes1 {
<tr >
<td><b><span class="option">ImmediateFlush</span></b></td>
<td><code>boolean</code></td>
- <td>See <code>WriterAppender</code> properties.</td>
+ <td>See <code>OutputStreamAppender</code> properties.</td>
</tr>
<tr class="alt">
@@ -712,7 +651,7 @@ public class ExitWoes1 {
<tr class="a">
<td><b><span class="option">Encoding</span></b></td>
<td><code>String</code></td>
- <td>See <code>WriterAppender</code> properties.</td>
+ <td>See <code>OutputStreamAppender</code> properties.</td>
</tr>
<tr class="b">
<td><b><span class="option">File</span></b></td>
@@ -722,7 +661,7 @@ public class ExitWoes1 {
<tr class="a">
<td><b><span class="option">ImmediateFlush</span></b></td>
<td><code>boolean</code></td>
- <td>See <code>WriterAppender</code> properties.</td>
+ <td>See <code>OutputStreamAppender</code> properties.</td>
</tr>
<tr class="b">
<td><b><span class="option">RollingPolicy</span></b></td>
diff --git a/logback-site/src/site/pages/manual/architecture.html b/logback-site/src/site/pages/manual/architecture.html
index 19ba1f9..f495620 100644
--- a/logback-site/src/site/pages/manual/architecture.html
+++ b/logback-site/src/site/pages/manual/architecture.html
@@ -146,12 +146,18 @@ public interface Logger {
public void error(String message);
}</pre>
+
+
+ <h3><a name="effectiveLevel"
+ href="#effectiveLevel">Effective Level aka Level Inheritance</a>
+ </h3>
+
<p>Loggers may be assigned levels. The set of possible levels,
that is TRACE, DEBUG, INFO, WARN and ERROR are defined in the
<code>ch.qos.logback.classic.Level</code> class. Note that in
- logback, the level class is final and cannot be derived, as a much
- more flexible approach exists in the form of <code>Marker</code>
- objects.
+ logback, the <code>Level</code> class is final and cannot be
+ sub-classed, as a much more flexible approach exists in the form
+ of <code>Marker</code> objects.
</p>
<p>If a given logger is not assigned a level, then it inherits one
@@ -159,8 +165,7 @@ public interface Logger {
</p>
<div class="definition">
- <div class="deftitle"><a name="effectiveLevel"
- href="#effectiveLevel">Effective Level (Level Inheritance)</a></div>
+
<p>The effective level for a given logger <em>L</em>, is equal
to the first non-null level in its hierarchy, starting at
@@ -173,6 +178,7 @@ public interface Logger {
root logger always has an assigned level. By default, this level
is DEBUG.
</p>
+
<p>Below are four examples with various assigned level values and
the resulting effective (inherited) levels according to the level
inheritance rule.
@@ -815,7 +821,10 @@ logger.debug("Value {} was inserted between {} and {}.", paramArray);</pre>
want to click on the image to display its bigger version.
</p>
- <a href="underTheHood.html"><img src="images/manual/architecture/underTheHoodSequence2_small.gif" alt="underTheHoodSequence2_small.gif"/></a>
+ <a href="underTheHood.html">
+ <img src="images/manual/architecture/underTheHoodSequence2_small.gif"
+ alt="underTheHoodSequence2_small.gif"/>
+ </a>
<a name="Performance"></a>
<h3>Performance</h3>
diff --git a/logback-site/src/site/pages/manual/configuration.html b/logback-site/src/site/pages/manual/configuration.html
index b54ab09..1786108 100644
--- a/logback-site/src/site/pages/manual/configuration.html
+++ b/logback-site/src/site/pages/manual/configuration.html
@@ -121,7 +121,7 @@
</p>
- <h3>Automatically configuring logback</h3>
+ <h3><a name="automaticConf" href="#automaticConf">Automatically configuring logback</a></h3>
<p>The simplest way to configure logback is by letting logback
fall back to its default configuration. Let us give a taste of how
@@ -178,8 +178,6 @@ public class Foo {
details.
</p>
-
-
<p>Assuming the configuration files <em>logback-test.xml</em> or
<em>logback.xml</em> are not present, logback will default to
invoking <a
@@ -187,9 +185,9 @@ public class Foo {
which will set up a minimal configuration. This minimal
configuration consists of a <code>ConsoleAppender</code> attached
to the root logger. The output is formatted using a
- <code>PatternLayout</code> set to the pattern <em>%d{HH:mm:ss.SSS}
- [%thread] %-5level %logger{36} - %msg%n</em>. Moreover, by default
- the root logger is assigned the <code>DEBUG</code> level.
+ <code>PatternLayoutEncoder</code> set to the pattern
+ <em>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</em>. Moreover, by default the root logger is assigned the
+ <code>DEBUG</code> level.
</p>
<p>Thus, the output of the command <em>java chapters.configuration.MyApp1</em>
@@ -240,8 +238,9 @@ public class Foo {
<pre class="prettyprint source"><configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <!-- encoders are by default assigned the type
- ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
+ <!-- encoders are assigned the type
+ ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
+ <encoder>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
@@ -257,7 +256,9 @@ public class Foo {
directory accessible from the class path. Running the <em>MyApp1</em>
application should give identical results to its previous run.</p>
- <h4>Automatic printing of status messages in case of warning or errors</h4>
+ <h4><a name="automaticStatusPrinting"
+ href="#automaticStatusPrinting">Automatic printing of status
+ messages in case of warning or errors</a></h4>
<div class="highlight">
<p>If warning or errors occur during the parsing of the
@@ -335,7 +336,7 @@ public class Foo {
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are by default assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
- <layout>
+ <encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
@@ -621,33 +622,34 @@ public class MyApp3 {
<p class="source">java <b>-Dlogback.statusListenerClass</b>=ch.qos.logback.core.status.OnConsoleStatusListener ...</p>
-
-
<h2>
<a name="syntax" href="#syntax">Configuration file Syntax</a>
</h2>
- <p>To obtain these different logging behaviors we do not need to
- recompile code. You can easily configure logback so as to disable
- logging for certain parts of your application, or direct output to a
- UNIX Syslog daemon, to a database, to a log visualizer, or forward
- logging events to a remote logback server, which would log according
- to local server policy, for example by forwarding the log event to a
- second logback server.
- </p>
+ <p>As you have seen thus far in the manual with plenty of examples
+ still to follow, logback allows you to redefine logging behavior
+ without needing to recompile your code. Indeed, you can easily
+ configure logback so as to disable logging for certain parts of
+ your application, or direct output to a UNIX Syslog daemon, to a
+ database, to a log visualizer, or forward logging events to a
+ remote logback server, which would log according to local server
+ policy, for example by forwarding the log event to a second logback
+ server.
+ </p>
- <p>The remainder of this section presents the syntax of
- configuration files.
- </p>
+ <p>The remainder of this section presents the syntax of
+ configuration files.
+ </p>
- <p>As shall become clear, the syntax of logback configuration files
- is extremely flexible. As such, it is not possible to specify the
- allowed syntax with a DTD file or an XML schema. Nevertheless, the
- very basic structure of the configuration file can be described as,
- <configuration> element, followed by zero or more <appender>
- elements, followed by zero or more <logger> elements, followed by
- at most one <root> element. The following diagram illustrates
- this basic structure.</p>
+ <p>As shall be demonstrated over and over, the syntax of logback
+ configuration files is extremely flexible. As such, it is not
+ possible to specify the allowed syntax with a DTD file or an XML
+ schema. Nevertheless, the very basic structure of the configuration
+ file can be described as, <code><configuration></code> element,
+ followed by zero or more <code><appender></code> elements,
+ followed by zero or more <code><logger></code> elements,
+ followed by at most one <code><root></code> element. The
+ following diagram illustrates this basic structure.</p>
<p align="left">
@@ -658,83 +660,98 @@ public class MyApp3 {
<div class="highlight">
<p>If you are unsure which case to use for a given tag name, just
- follow the camelCase convention which should usually be
- corrrect.</p>
- </div>
-
- <p>As of logback version 0.9.17, tag names pertaining to explicit
- rules are case insensitive. For example, both
- <code><logger></code>, <code><Logger></code> and
- <code><LOGGER></code> are valid configuration elements and will
- be interpreted in the same way. Note that XML well-formedness rules
- still apply, if you open a tag as <code><xyz></code> you must
- close it as <code></xyz></code>, <code></XyZ></code> will not
- work. As for <a href="onJoran.html#implicit">implicit rules</a>, tag
- names are case sensitive except for the first letter. Thus,
- <code><xyz></code> and <code><Xyz></code> are equivalent but
- not <code><xYz></code>. Implicit rules usually follow the <a
- href="http://en.wikipedia.org/wiki/CamelCase">camel case</a>
- convention, common in the Java world. Since it is not trivially easy
- tell when a tag is associated with an explicit action and when it is
- associated with an implicit action, it is not trivial to say whether
- an XML tag is totally case-insensitive or case-insensitive with
- respect to the first letter. If you are unsure which case to use for
- a given tag name, just follow the camelCase convention which should
- usually be correct.
- </p>
+ follow the <a
+ href="http://en.wikipedia.org/wiki/CamelCase">camelCase
+ convention</a> which is almost always the corrrect convention.</p>
+ </div>
- <h4>Configuring Loggers, or the <code><logger></code> element</h4>
-
- <p>A logger is configured using the <code>logger</code> element. A
- <em>logger</em> element takes exactly one mandatory <span
- class="attr">name</span> attribute, an optional <span
- class="attr">level</span> attribute, and an optional <span
- class="attr">additivity</span> attribute, which admits the values
- <em>true</em> or <em>false</em>. The value of the <span
- class="attr">level</span> attribute can be one of the
- case-insensitive strings TRACE, DEBUG, INFO, WARN, ERROR, ALL or
- OFF. The special case-insensitive value <em>INHERITED</em>, or its
- synonym <em>NULL</em>, will force the level of the logger to be
- inherited from higher up in the hierarchy. This comes in handy in
- case you set the level of a logger and later decide that it should
- inherit its level.
- </p>
+ <h4><a name="caseSensitivity" href="#caseSensitivity">Case
+ sensitivity of tag names</a></h4>
+
- <p>The <em>logger</em> element may contain zero or more
- <em>appender-ref</em> elements; each appender thus referenced is
- added to the named logger. It is important to keep mind that each
- named logger that is declared with a <logger element first has
- all its appenders removed and only then are the referenced appenders
- attached to it. In particular, if there are no appender references,
- then the named logger will lose all its appenders.
- </p>
+ <p>As of logback version 0.9.17, tag names pertaining to explicit
+ rules are case insensitive. For example, both
+ <code><logger></code>, <code><Logger></code> and
+ <code><LOGGER></code> are valid configuration elements and will
+ be interpreted in the same way. Note that XML well-formedness
+ rules still apply, if you open a tag as <code><xyz></code> you
+ must close it as <code></xyz></code>, <code></XyZ></code>
+ will not work. As for <a href="onJoran.html#implicit">implicit
+ rules</a>, tag names are case sensitive except for the first
+ letter. Thus, <code><xyz></code> and <code><Xyz></code> are
+ equivalent but not <code><xYz></code>. Implicit rules usually
+ follow the <a href="http://en.wikipedia.org/wiki/CamelCase">camel
+ case</a> convention, common in the Java world. Since it is not
+ easy tell when a tag is associated with an explicit action and
+ when it is associated with an implicit action, it is not trivial
+ to say whether an XML tag is case-sensitive or insensitive with
+ respect to the first letter. If you are unsure which case to use
+ for a given tag name, just follow the camelCase convention which
+ is almost always the correct convention.
+ </p>
+ <h4><a name="loggerElement"
+ href="#loggerElement">Configuring loggers, or the
+ <code><logger></code> element</a></h4>
+ <p>At this point should have at least some understanding of <a
+ href="architecture.html#effectiveLevel">level inherirance</a> and
+ the <a href="architecture.html#basic_selection">basic selection
+ rule</a>. Otherwise, and unless you are an egyptologist, logback
+ configuration will be no more meaningful to you than
+ are hieroglyphics.
+ </p>
- <h4>Configuring the root logger, or the <code><root></code>
- element</h4>
+ <p>A logger is configured using the <code><logger></code>
+ element. A <code><logger></code> element takes exactly one
+ mandatory <span class="attr">name</span> attribute, an optional
+ <span class="attr">level</span> attribute, and an optional <span
+ class="attr">additivity</span> attribute, admitting the values
+ <em>true</em> or <em>false</em>. The value of the <span
+ class="attr">level</span> attribute admitting the one of the
+ case-insensitive string values TRACE, DEBUG, INFO, WARN, ERROR,
+ ALL or OFF. The special case-insensitive value <em>INHERITED</em>,
+ or its synonym <em>NULL</em>, will force the level of the logger
+ to be inherited from higher up in the hierarchy. This comes in
+ handy in case you set the level of a logger and later decide that
+ it should inherit its level.
+ </p>
+
+ <p>The <code><logger></code> element may contain zero or more
+ <code><appender-ref></code> elements; each appender thus
+ referenced is added to the named logger. It is important to keep
+ mind that each named logger that is declared with a
+ <code><logger></code> element first has all its appenders
+ removed and only then are the referenced appenders attached to it.
+ In particular, if there are no appender references, then the named
+ logger will lose all its appenders.
+ </p>
- <p>The <root> element configures the root logger. It admits a
- single attribute, namely the <span class="attr">level</span>
- attribute. It does not admit any other attributes because the
- additivity flag does not apply to the root logger. Moreover, since
- the root logger is already named as "ROOT", it does not admit a name
- attribute either. The value of the level attribute can be set to one
- of the case-insensitive strings TRACE, DEBUG, INFO, WARN, ERROR, ALL
- or OFF. Note that the level of the root logger cannot be set to
- INHERITED or NULL.
+ <h4><a name="rootElement" href="#rootElement">Configuring the root
+ logger, or the <code><root></code> element</a></h4>
+
+ <p>The <code><root></code> element configures the root logger. It
+ admits a single attribute, namely the <span
+ class="attr">level</span> attribute. It does not admit any other
+ attributes because the additivity flag does not apply to the root
+ logger. Moreover, since the root logger is already named as "ROOT",
+ it does not admit a name attribute either. The value of the level
+ attribute can be one of the case-insensitive strings TRACE, DEBUG,
+ INFO, WARN, ERROR, ALL or OFF. Note that the level of the root
+ logger cannot be set to INHERITED or NULL.
</p>
- <p>The <root> element admits zero or more <appender-ref>
- elements. Similar to the <logger element, declaring a <root
+ <p>The <code><root></code> element admits zero or more
+ <code><appender-ref></code> elements. Similar to the
+ <code><logger></code> element, declaring a <code><root></code>
element will have the effect of first closing and then detaching all
its current appenders and only subsequently will referenced
- appenders, if any, will be added. In particular, if it has no
- appender references, then the root logger will lose all its
- appenders.
+ appenders, if any, will be added. In particular, if the
+ <code><root></code> element contains no appender references, then
+ the root logger will lose all its appenders.
</p>
<h4>Example</h4>
@@ -750,8 +767,8 @@ public class MyApp3 {
<pre class="prettyprint source"><configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <!-- encoders are by default assigned the type
- ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
+ <!-- encoders are assigned the type
+ ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
@@ -767,13 +784,17 @@ public class MyApp3 {
</configuration></pre>
- <p>This new configuration will yield the following output, when
- invoked with the <em>MyApp3</em> application.
+ <p>When the above configuration file is given as argument to the
+ <em>MyApp3</em> application, it will yield the following output:
</p>
<pre class="source">17:34:07.578 [main] INFO chapters.configuration.MyApp3 - Entering application.
17:34:07.578 [main] INFO chapters.configuration.MyApp3 - Exiting application.</pre>
+ <p>Note that the message of level DEBUG generated by the <a
+ href="../xref/chapters/configuration/Foo.html">"chapters.configuration.Foo"</a>
+ logger has been supressed. See also the Foo class.</p>
+
<p>You can configure the levels of as many loggers as you wish. In
the next configuration file, we set the level of the
<em>chapters.configuration</em> logger to INFO but at the same time set the level
@@ -846,7 +867,7 @@ public class MyApp3 {
<code>INFO</code> in the <code>MyApp3</code> class as well as the
DEBUG messages in <code>Foo.doIt()</code> are all enabled. Note that
the level of the root logger is always set to a non-null value,
- which is DEBUG by default.
+ DEBUG by default.
</p>
<p>Let us note that the <a
@@ -931,21 +952,24 @@ public class MyApp3 {
- even if the Java source code does not directly refer to it.
</p>
- <h4>Configuring Appenders</h4>
+ <h4><a name="configuringAppenders"
+ href="#configuringAppenders">Configuring Appenders</a></h4>
- <p>Appenders are configured using <code><appender></code>
- elements, taking two attributes <span class="attr">name</span> and
- <span class="attr">class</span>, both of which are mandatory. The
+ <p>An appenders is configured with the <code><appender></code>
+ element, which takes two mandatroy attributes <span
+ class="attr">name</span> and <span class="attr">class</span>. The
<span class="attr">name</span> attribute specifies the name of the
appender whereas the <span class="attr">class</span> attribute
- specifies the fully qualified name of the class of which the named
- appender will be an instance. The <code><appender></code>
- element may contain zero or one <code><layout></code> elements
- and zero or more <code><filter></code> elements. Appart from
- these two common elements, <code><appender></code> elements may
- contain any number of element corresponding to javabean properties
- of the appender class. Seamlessly supporting any property of a given
- logback component is one of the major strengths of Joran. The
+ specifies the fully qualified name of the appender class to
+ instantiate. The <code><appender></code> element may contain zero
+ or one <code><layout></code> elements, zero or more
+ <code><encoder></code> elements and zero or more
+ <code><filter></code> elements. Appart from these three common
+ elements, <code><appender></code> elements may contain any number
+ of elements corresponding to javabean properties of the appender
+ class. Seamlessly supporting any property of a given logback
+ component is one of the major strengths of <a
+ href="onJoran.html">Joran</a> as discussed in a later chapter. The
following diagram illustrates the common structure. Note that
support for properties is not visible.
</p>
@@ -956,10 +980,23 @@ public class MyApp3 {
</p>
<p>The <code><layout></code> element takes a mandatory class
- attribute specifying the fully qualified name of the class of which
- the associated layout should be an instance. Like the
- <code><appender></code> element, it may contain other elements
- corresponding to properties of the layout class.
+ attribute specifying the fully qualified name of the layout class to
+ instantiate. As with the the <code><appender></code> element,
+ <code><layout></code> may contain other elements corresponding to
+ properties of the layout instance. Since it's such a common case, if
+ the layout class is <code>PatternLayout</code>, then the class
+ attribute can be omitted as specified by <a
+ href="onJoran.html#defaultClassMapping">default class mapping</a>
+ rules.
+ </p>
+
+ <p>The <code><encoder></code> element takes a mandatory class
+ attribute specifying the fully qualified name of the encoder class
+ to instantiate. Since it's such a common case, if the encoder class
+ is <code>PatternLayoutEncoder</code>, then the class attribute can
+ be omitted as specified by <a
+ href="onJoran.html#defaultClassMapping">default class mapping</a>
+ rules.
</p>
<p>Logging to multiple appenders is as easy as defining the various
@@ -992,22 +1029,26 @@ public class MyApp3 {
<p>This configuration scripts defines two appenders called
<em>FILE</em> and <em>STDOUT</em>. The <em>FILE</em> appender logs
- to a file called <em>myApp.log</em>. The layout for this appender is
- a <code>PatternLayout</code> that outputs the date, level, thread
- name, logger name, file name and line number where the log request
- is located, the message and line separator character(s). The second
- appender called <code>STDOUT</code> outputs to the console. The
- layout for this appender outputs only the message string followed by
- a line separator.
+ to a file called <em>myApp.log</em>. The encoder for this appender
+ is a <code>PatternLayoutEncoder</code> that outputs the date, level,
+ thread name, logger name, file name and line number where the log
+ request is located, the message and line separator character(s).
+ The second appender called <code>STDOUT</code> outputs to the
+ console. The encoder for this appender outputs only the message
+ string followed by a line separator.
</p>
<p>The appenders are attached to the root logger by referencing them
by name within an <em>appender-ref</em> element. Note that each
- appender has its own layout. Layouts are usually not designed to be
- shared by multiple appenders. As such, logback configuration files
- do not provide any syntactical means for sharing layouts.
+ appender has its own encoder. Encoders are usually not designed to
+ be shared by multiple appenders. The same is true for layouts. As
+ such, logback configuration files do not provide any syntactical
+ means for sharing encoders or layouts.
</p>
+ <h4><a name="cumulative" href="#cumulative">Appenders accumulate</a>
+ </h4>
+
<p>By default, <b>appenders are cumulative</b>: a logger will log to
the appenders attached to itself (if any) as well as all the
appenders attached to its ancestors. Thus, attaching the same
@@ -1093,7 +1134,11 @@ public class MyApp3 {
<em>myApp.log</em> file.
</p>
- <h4>Overriding the default cumulative behaviour</h4>
+ <h4>
+ <a name="overrridingCumulativity" href="#overrridingCumulativity">
+ Overriding the default cumulative behaviour
+ </a>
+ </h4>
<p>In case the default cumulative behavior turns out to be
unsuitable for your needs, you can override it by setting the
@@ -1178,8 +1223,7 @@ public class MyApp3 {
<b><property name="USER_HOME" value="/home/sebastien" /></b>
- <appender name="FILE"
- class="ch.qos.logback.core.FileAppender">
+ <appender name="FILE" class="ch.qos.logback.core.FileAppender">
<b><file>${USER_HOME}/myApp.log</file></b>
<encoder>
<pattern>%msg%n</pattern>
@@ -1206,8 +1250,7 @@ public class MyApp3 {
<pre class="prettyprint source"><configuration>
- <appender name="FILE"
- class="ch.qos.logback.core.FileAppender">
+ <appender name="FILE" class="ch.qos.logback.core.FileAppender">
<b><file>${USER_HOME}/myApp.log</file></b>
<encoder>
<pattern>%msg%n</pattern>
@@ -1234,8 +1277,7 @@ public class MyApp3 {
<b><property file="src/main/java/chapters/configuration/variables1.properties" /></b>
- <appender name="FILE"
- class="ch.qos.logback.core.FileAppender">
+ <appender name="FILE" class="ch.qos.logback.core.FileAppender">
<b><file>${USER_HOME}/myApp.log</file></b>
<encoder>
<pattern>%msg%n</pattern>
@@ -1266,8 +1308,7 @@ public class MyApp3 {
<b><property resource="resource1.properties" /></b>
- <appender name="FILE"
- class="ch.qos.logback.core.FileAppender">
+ <appender name="FILE" class="ch.qos.logback.core.FileAppender">
<b><file>${USER_HOME}/myApp.log</file></b>
<encoder>
<pattern>%msg%n</pattern>
@@ -1310,8 +1351,7 @@ fileName=myApp.log
<property file="variables2.properties" />
- <appender name="FILE"
- class="ch.qos.logback.core.FileAppender">
+ <appender name="FILE" class="ch.qos.logback.core.FileAppender">
<b><file>${destination}</file></b>
<encoder>
<pattern>%msg%n</pattern>
diff --git a/logback-site/src/site/pages/manual/onJoran.html b/logback-site/src/site/pages/manual/onJoran.html
index 386c54d..eab4c87 100644
--- a/logback-site/src/site/pages/manual/onJoran.html
+++ b/logback-site/src/site/pages/manual/onJoran.html
@@ -636,6 +636,18 @@ Element [abc] asked to be printed.
<tr >
<td>ch.qos.logback.core.AppenderBase</td>
+ <td>encoder</td>
+ <td>ch.qos.logback.classic.encoder.PatternLayoutEncoder</td>
+ </tr>
+
+ <tr class="alt">
+ <td>ch.qos.logback.core.UnsynchronizedAppenderBase</td>
+ <td>encoder</td>
+ <td>ch.qos.logback.classic.encoder.PatternLayoutEncoder</td>
+ </tr>
+
+ <tr >
+ <td>ch.qos.logback.core.AppenderBase</td>
<td>layout</td>
<td>ch.qos.logback.classic.PatternLayout</td>
</tr>
diff --git a/logback-site/src/site/resources/manual/images/chapters/appenders/appender.uml b/logback-site/src/site/resources/manual/images/chapters/appenders/appender.uml
new file mode 100644
index 0000000..20ff4cf
--- /dev/null
+++ b/logback-site/src/site/resources/manual/images/chapters/appenders/appender.uml
@@ -0,0 +1,1179 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<XPD:PROJECT xmlns:XPD="http://www.staruml.com" version="1">
+<XPD:HEADER>
+<XPD:SUBUNITS>
+</XPD:SUBUNITS>
+<XPD:PROFILES>
+<XPD:PROFILE>UMLStandard</XPD:PROFILE>
+</XPD:PROFILES>
+</XPD:HEADER>
+<XPD:BODY>
+<XPD:OBJ name="DocumentElement" type="UMLProject" guid="JEGKOL0wwE6O2Emy29kFuwAA">
+<XPD:ATTR name="Title" type="string">Untitled</XPD:ATTR>
+<XPD:ATTR name="#OwnedElements" type="integer">6</XPD:ATTR>
+<XPD:OBJ name="OwnedElements[0]" type="UMLModel" guid="Nu7ucmhxa0aC5WTL/Hl5qgAA">
+<XPD:ATTR name="Name" type="string">Use Case Model</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">useCaseModel</XPD:ATTR>
+<XPD:REF name="Namespace">JEGKOL0wwE6O2Emy29kFuwAA</XPD:REF>
+<XPD:ATTR name="#OwnedDiagrams" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="OwnedDiagrams[0]" type="UMLUseCaseDiagram" guid="AOpe9EpUuEqbJkhPg6UN+wAA">
+<XPD:ATTR name="Name" type="string">Main</XPD:ATTR>
+<XPD:REF name="DiagramOwner">Nu7ucmhxa0aC5WTL/Hl5qgAA</XPD:REF>
+<XPD:OBJ name="DiagramView" type="UMLUseCaseDiagramView" guid="jha7HHI2JEmss41Kcx5rmAAA">
+<XPD:REF name="Diagram">AOpe9EpUuEqbJkhPg6UN+wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[1]" type="UMLModel" guid="nzHC5ZSub0yOmXzqddVh7QAA">
+<XPD:ATTR name="Name" type="string">Analysis Model</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">analysisModel</XPD:ATTR>
+<XPD:REF name="Namespace">JEGKOL0wwE6O2Emy29kFuwAA</XPD:REF>
+<XPD:ATTR name="#OwnedDiagrams" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="OwnedDiagrams[0]" type="UMLClassDiagram" guid="ucvrQjCCHEOMfGCAAc5zPQAA">
+<XPD:ATTR name="Name" type="string">Main</XPD:ATTR>
+<XPD:ATTR name="DefaultDiagram" type="boolean">True</XPD:ATTR>
+<XPD:ATTR name="DiagramType" type="string">RobustnessDiagram</XPD:ATTR>
+<XPD:REF name="DiagramOwner">nzHC5ZSub0yOmXzqddVh7QAA</XPD:REF>
+<XPD:OBJ name="DiagramView" type="UMLClassDiagramView" guid="sxIjWZ8eT0KTmxDhcr84UAAA">
+<XPD:REF name="Diagram">ucvrQjCCHEOMfGCAAc5zPQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[2]" type="UMLModel" guid="dQlYoesWY0yxg2VJCxHxOQAA">
+<XPD:ATTR name="Name" type="string">Design Model</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">designModel</XPD:ATTR>
+<XPD:REF name="Namespace">JEGKOL0wwE6O2Emy29kFuwAA</XPD:REF>
+<XPD:ATTR name="#OwnedDiagrams" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="OwnedDiagrams[0]" type="UMLClassDiagram" guid="jdoFPKplx0W53YpEZi95TAAA">
+<XPD:ATTR name="Name" type="string">Main</XPD:ATTR>
+<XPD:ATTR name="DefaultDiagram" type="boolean">True</XPD:ATTR>
+<XPD:REF name="DiagramOwner">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:OBJ name="DiagramView" type="UMLClassDiagramView" guid="oWGUMKWgOEus+/3Jqk/tpAAA">
+<XPD:REF name="Diagram">jdoFPKplx0W53YpEZi95TAAA</XPD:REF>
+<XPD:ATTR name="#OwnedViews" type="integer">15</XPD:ATTR>
+<XPD:OBJ name="OwnedViews[0]" type="UMLClassView" guid="tSxGyrwfEkSgp1EcheSXaAAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">496</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">140</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">161</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">69</XPD:ATTR>
+<XPD:ATTR name="ShowProperty" type="boolean">True</XPD:ATTR>
+<XPD:REF name="Model">Ec4V6xlK5USBInAfRT+kBgAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="4OJodmUjvU6Oqy3fe+ZfuQAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="nTnCIikI3UOMxs9QtoE1sgAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">Appender</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="iOfigC5hM06553UhkG3o4gAA">
+<XPD:ATTR name="Text" type="string"><<interface>></XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="gAAMY35/8kO92uV18LmCWAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="m+f/Nz96gEqfQeHGgfAxjwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">Ec4V6xlK5USBInAfRT+kBgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="ViAxcLeYxEC/QDB9dCuwagAA">
+<XPD:REF name="Model">Ec4V6xlK5USBInAfRT+kBgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="gvxeAhX+WkGcvqw6KjlA7wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">Ec4V6xlK5USBInAfRT+kBgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[1]" type="UMLClassView" guid="NaiNuZ1qLUu+5nZq2pgoJgAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">448</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">384</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">257</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">69</XPD:ATTR>
+<XPD:REF name="Model">rzT262Z1jEeiLPfjq8YXAQAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="3Qx0O28WLEC1wlpntM/QWQAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="gLLmeDlS+Ua9NL1IKkZqBgAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">OutputStreamAppender</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="7awZOkK3cUS1dBI9YKP2TwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="LtVVLfcmbkq7TWeA6T7S4AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="H/1viIm6yE20XaYIV5XQmgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">rzT262Z1jEeiLPfjq8YXAQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="/LiIyuskqE6jkbei5roLSgAA">
+<XPD:REF name="Model">rzT262Z1jEeiLPfjq8YXAQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="LFUOQyCzKkODyDltdenqSQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">rzT262Z1jEeiLPfjq8YXAQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[2]" type="UMLClassView" guid="82N1NUXIMU2s0JVvIgA33wAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">460</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">248</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">233</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">95</XPD:ATTR>
+<XPD:REF name="Model">xVL+I0ePyEKePe2ybmIZqQAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="MEOstStI0EC0RQoiT5DFLQAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="CDkuaYXZDEC5+cMzdHsl8wAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">UnsynchronizedAppenderBase</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="N/VzkXk9vkGTb/Gq05Hm4gAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="Wbq2KwFqq0uOx2yShkE49QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="MbkisNcJq06fy8rfNf//qgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">xVL+I0ePyEKePe2ybmIZqQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="bHWlSSp0L0KsF9iS2K/VuAAA">
+<XPD:REF name="Model">xVL+I0ePyEKePe2ybmIZqQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="A3o0HBZQP0+GUAIDarVM5AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">xVL+I0ePyEKePe2ybmIZqQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[3]" type="UMLClassView" guid="uk+yKXVJ4kGbJp9tS5jKTwAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">348</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">500</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">205</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">56</XPD:ATTR>
+<XPD:REF name="Model">yqvs3sZ9DUGqcZqP0JhEYQAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="pd1JNpNdxkm4N3mMjABxcgAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="Jfgvt5uhf0aDXP4fvB8FuAAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">ConsoleAppender</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="x915MlraB0+hK5agb0HxVwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="o72CPBdC2UGyraSt4vxsHQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="nH6UBhoeX0KbQRIkAzLiWAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">yqvs3sZ9DUGqcZqP0JhEYQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="Jb94kigpgUqu4dlcc+CGdAAA">
+<XPD:REF name="Model">yqvs3sZ9DUGqcZqP0JhEYQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="QxduxAxohEmCZQGHeQsZcgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">yqvs3sZ9DUGqcZqP0JhEYQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[4]" type="UMLRealizationView" guid="lL0hvfNl1UCp0ZckmzYqAAAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">576,248;576,208</XPD:ATTR>
+<XPD:REF name="Model">MLMgV5lk30+73KeQUlkJ1AAA</XPD:REF>
+<XPD:REF name="Head">tSxGyrwfEkSgp1EcheSXaAAA</XPD:REF>
+<XPD:REF name="Tail">82N1NUXIMU2s0JVvIgA33wAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="R+yIkrw1xkGRRmxo6cIv7AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">MLMgV5lk30+73KeQUlkJ1AAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="MHt2cHh8nkq4xztkXeNA1AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">MLMgV5lk30+73KeQUlkJ1AAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="1cFzyVYsZUexhz9n3LRU9AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">MLMgV5lk30+73KeQUlkJ1AAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[5]" type="UMLGeneralizationView" guid="fqotcKjEKUu0dHy5krCbbgAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">576,384;576,342</XPD:ATTR>
+<XPD:REF name="Model">iGZQWONRSkmUZXwA2ctTYAAA</XPD:REF>
+<XPD:REF name="Head">82N1NUXIMU2s0JVvIgA33wAA</XPD:REF>
+<XPD:REF name="Tail">NaiNuZ1qLUu+5nZq2pgoJgAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="a5TKNXnsu0Cm1O3vWK2A5QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">iGZQWONRSkmUZXwA2ctTYAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="lfapsg0nvkOzLtKq21jKcQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">iGZQWONRSkmUZXwA2ctTYAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="J/CqIqCm4k64OiOc5XyUFgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">iGZQWONRSkmUZXwA2ctTYAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[6]" type="UMLGeneralizationView" guid="Byj7ulJD9UmN+tawKGwCEgAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">481,500;537,452</XPD:ATTR>
+<XPD:REF name="Model">AjD3odwWRkqn7DLLtsqSMQAA</XPD:REF>
+<XPD:REF name="Head">NaiNuZ1qLUu+5nZq2pgoJgAA</XPD:REF>
+<XPD:REF name="Tail">uk+yKXVJ4kGbJp9tS5jKTwAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="HQiDhC6IA0iqlMhf1tdcJQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">AjD3odwWRkqn7DLLtsqSMQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="npCChlHvbECPkeBWStHdGwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">AjD3odwWRkqn7DLLtsqSMQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="DNi8lqQWi0GHkNrHlB+wdAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">AjD3odwWRkqn7DLLtsqSMQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[7]" type="UMLClassView" guid="umRYCn2dek6PVCutQ7EHjgAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">612</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">500</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">181</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">82</XPD:ATTR>
+<XPD:REF name="Model">fbO+5cdSPEmSXuXSqE8gXgAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="IY/ehYDmxki8kSqbCHHCfQAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="lcA4v9eDHUugTZoPU740LAAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">FileAppender</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="OVAuCrBMykaCfcii7gDdCwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="xiHCrB3qu0yBBg0U/q3EawAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="XJMRRQ4IvEKN76PkDbMKOQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">fbO+5cdSPEmSXuXSqE8gXgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="wZmHw439VE+zuefCYQQqVAAA">
+<XPD:REF name="Model">fbO+5cdSPEmSXuXSqE8gXgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="PHqgEBQhpEmlVKbjkRedkAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">fbO+5cdSPEmSXuXSqE8gXgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[8]" type="UMLGeneralizationView" guid="xnvee9U5202YS/ztrwJSRAAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">661,500;611,452</XPD:ATTR>
+<XPD:REF name="Model">DwI/SvxrPEa+xlJeUNknVQAA</XPD:REF>
+<XPD:REF name="Head">NaiNuZ1qLUu+5nZq2pgoJgAA</XPD:REF>
+<XPD:REF name="Tail">umRYCn2dek6PVCutQ7EHjgAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="oASzcKN58EuYmztjk4WiEwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">DwI/SvxrPEa+xlJeUNknVQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="O0OgQK6n40urO6JVc74njgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">DwI/SvxrPEa+xlJeUNknVQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="bgKTOidFkEeRLn6bk0KEEgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">DwI/SvxrPEa+xlJeUNknVQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[9]" type="UMLClassView" guid="rHFGD6C9T0y5SMWPFgS09QAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">596</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">628</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">213</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">69</XPD:ATTR>
+<XPD:REF name="Model">V4xOMUpxokyB4fxrQNJPxQAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="OuAPH3aKlk2rg4cWgwv2BQAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="BEu6SCte7E6fslLxmD8brgAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">RollingFileAppender</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="diAZdqUjrUSnaEkyvki5HwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="HpL3GnQOO0KyNABCTyAsRwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="1hKuFZUojkuzeqX9AiWUlwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">V4xOMUpxokyB4fxrQNJPxQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="g+GUofZEmU2lEM1VL3vLIQAA">
+<XPD:REF name="Model">V4xOMUpxokyB4fxrQNJPxQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="4HSOp+H3/ECJnOpzcIo3jwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">V4xOMUpxokyB4fxrQNJPxQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[10]" type="UMLClassView" guid="0AQ8gdYUKk2Ms7nTdCyd3QAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">788</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">372</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">137</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">95</XPD:ATTR>
+<XPD:REF name="Model">F1lk6TogWUGfYFH4FvBLOAAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="h/ce/kieOUyyxRZ6c71fTQAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="UZy1Qq+RWUWzR+BkMD2qBwAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">Encoder</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="A/4/paNKfEeyuIjaeXDosAAA">
+<XPD:ATTR name="Text" type="string"><<interface>></XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="Y950eaGp5kKS5JcixC2pLAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="lyHSH0gj5USAm8DDiVvc1AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">F1lk6TogWUGfYFH4FvBLOAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="A7cLwlK4RESapHusUAalugAA">
+<XPD:REF name="Model">F1lk6TogWUGfYFH4FvBLOAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="qQCEnWeXyUaictLrSH/4IgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">F1lk6TogWUGfYFH4FvBLOAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[11]" type="UMLAssociationView" guid="lMmxZJude0e4iK5TJK4KmwAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">788,419;704,419</XPD:ATTR>
+<XPD:REF name="Model">kXyf6+RLrki8M9yh9qd9JwAA</XPD:REF>
+<XPD:REF name="Head">NaiNuZ1qLUu+5nZq2pgoJgAA</XPD:REF>
+<XPD:REF name="Tail">0AQ8gdYUKk2Ms7nTdCyd3QAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="Lpxx+3J+D0S223D5ODQq4wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">kXyf6+RLrki8M9yh9qd9JwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="rhfNbKEGWUaK9KPGeno2AAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">kXyf6+RLrki8M9yh9qd9JwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="5lfzJsxzLkS60zCpNz5+twAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">kXyf6+RLrki8M9yh9qd9JwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="w+U1pR05XkeMT1rnnS2TcgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">KNPa5jL8m0SnxCPJDiLPEwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="G2JYoZaOKku0lwIKN7cKRQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">JFP7YnD8ak2COLWe8jfBSwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="Wzm+qJkDL0+jgE0ioVsNvwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">KNPa5jL8m0SnxCPJDiLPEwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="h/GU+p9gHkyMIIzW5Tap4wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">JFP7YnD8ak2COLWe8jfBSwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="MLngpvqsdU+i4Djdsali7wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">KNPa5jL8m0SnxCPJDiLPEwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="yN2upZx6REeZpBi/IRMnlgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">JFP7YnD8ak2COLWe8jfBSwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="ZVjULz2utUKwdUcoGweZkgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">KNPa5jL8m0SnxCPJDiLPEwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="4leicQixUEWISYBF6P8LSgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">JFP7YnD8ak2COLWe8jfBSwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[12]" type="UMLGeneralizationView" guid="VGws4gb7FEGKDPIpXKW13QAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">702,628;702,581</XPD:ATTR>
+<XPD:REF name="Model">MAm8gr3YDE+lxocsUB9afAAA</XPD:REF>
+<XPD:REF name="Head">umRYCn2dek6PVCutQ7EHjgAA</XPD:REF>
+<XPD:REF name="Tail">rHFGD6C9T0y5SMWPFgS09QAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="2t9xQX0DaECER1G841x4ggAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">MAm8gr3YDE+lxocsUB9afAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="ZJ+e5yqWkkyJmgI5NCe9qQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">MAm8gr3YDE+lxocsUB9afAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="uWFySM7Jq026r7z2lz9/TgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">MAm8gr3YDE+lxocsUB9afAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[13]" type="UMLClassView" guid="XnLeT4tUAUivKFCoAi8mCgAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">240</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">392</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">152</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">56</XPD:ATTR>
+<XPD:REF name="Model">ObD18j8uiUuqWEEES+U7VwAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="w2rmuF62nUmUAhOhrmqOyQAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="irr7mImnC0OIf0QeBwSo3AAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">Filter</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="/ZkI9RE/EkCmMYBYxW9vSgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="/Seh5JPXJ0WqIDeUCCMxGQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="Y+K3bBi2DEiJlBzf/w+degAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">ObD18j8uiUuqWEEES+U7VwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="x12I7wVJHkKX8s9N/bVWLQAA">
+<XPD:REF name="Model">ObD18j8uiUuqWEEES+U7VwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="ybd6Chc7bUaikqpMu2gydwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">ObD18j8uiUuqWEEES+U7VwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[14]" type="UMLAssociationView" guid="1GuVB976AUueN1l11+x/9AAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">391,419;448,419</XPD:ATTR>
+<XPD:REF name="Model">uh4HvYt2ZECJHo2VN0YtPwAA</XPD:REF>
+<XPD:REF name="Head">NaiNuZ1qLUu+5nZq2pgoJgAA</XPD:REF>
+<XPD:REF name="Tail">XnLeT4tUAUivKFCoAi8mCgAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="rvc1lZzjJkyWMr6P/IPRnQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">uh4HvYt2ZECJHo2VN0YtPwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="bCA0jUpnukKQFQdvrUXC5gAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">uh4HvYt2ZECJHo2VN0YtPwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="okxxVKfDiESE7wFAiHiTwQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">uh4HvYt2ZECJHo2VN0YtPwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="IPgYB1C27EyGv2x09901MgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">IA0uuG/DqUSPP93NTt7KPwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="mdaJom9Aq0CCnF2E8j5mfgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">rtqCfaDNzE6xCSqNvsGQmAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="QVrq+D0yCke4xdkp2ecVFgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">IA0uuG/DqUSPP93NTt7KPwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="u6QeWosm+0GF06B6oeoA3AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">rtqCfaDNzE6xCSqNvsGQmAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="YoNg+kiZ/0Kk9BC8Hs4jBgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">IA0uuG/DqUSPP93NTt7KPwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="TwLu6YMezke1PLwCqD9EKwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">rtqCfaDNzE6xCSqNvsGQmAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="j3F8XkYCU0K+Wb/6ACwHmAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">IA0uuG/DqUSPP93NTt7KPwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="5M6UkF5vREiYn4A49eajJAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">rtqCfaDNzE6xCSqNvsGQmAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:ATTR name="#OwnedElements" type="integer">28</XPD:ATTR>
+<XPD:OBJ name="OwnedElements[0]" type="UMLInterface" guid="bL5DGTE1wkqFiYq+yJuTRAAA">
+<XPD:ATTR name="Name" type="string">Bae, Rankyoung</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[1]" type="UMLInterface" guid="PfW7flMvskqKmFDofejCYQAA">
+<XPD:ATTR name="Name" type="string">Jung, Yoontae</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[2]" type="UMLInterface" guid="XthOkDh0rk67+FyPgXCRgAAA">
+<XPD:ATTR name="Name" type="string">Kim, Hyunsoo</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[3]" type="UMLInterface" guid="WhfjywuM1kqS7RtEmuvAlgAA">
+<XPD:ATTR name="Name" type="string">Kim, Jeongil</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[4]" type="UMLClass" guid="Ec4V6xlK5USBInAfRT+kBgAA">
+<XPD:ATTR name="Name" type="string">Appender</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">interface</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">tSxGyrwfEkSgp1EcheSXaAAA</XPD:REF>
+<XPD:REF name="Views[1]">m+f/Nz96gEqfQeHGgfAxjwAA</XPD:REF>
+<XPD:REF name="Views[2]">ViAxcLeYxEC/QDB9dCuwagAA</XPD:REF>
+<XPD:REF name="Views[3]">gvxeAhX+WkGcvqw6KjlA7wAA</XPD:REF>
+<XPD:ATTR name="#ClientDependencies" type="integer">1</XPD:ATTR>
+<XPD:REF name="ClientDependencies[0]">kjMmekdMhUCZp7nT1+7m5QAA</XPD:REF>
+<XPD:ATTR name="#SupplierDependencies" type="integer">2</XPD:ATTR>
+<XPD:REF name="SupplierDependencies[0]">MLMgV5lk30+73KeQUlkJ1AAA</XPD:REF>
+<XPD:REF name="SupplierDependencies[1]">kjMmekdMhUCZp7nT1+7m5QAA</XPD:REF>
+<XPD:ATTR name="#Operations" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Operations[0]" type="UMLOperation" guid="FRx7C/jgm0uUQ2KJbSES0QAA">
+<XPD:ATTR name="Name" type="string">doAppend</XPD:ATTR>
+<XPD:REF name="Owner">Ec4V6xlK5USBInAfRT+kBgAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="HEOzMeB7hUCVhMMCFiMU/QAA">
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">void</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">FRx7C/jgm0uUQ2KJbSES0QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="/QxGe2nRTke4OPZr6B8DjwAA">
+<XPD:ATTR name="Name" type="string">E event</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">FRx7C/jgm0uUQ2KJbSES0QAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[5]" type="UMLClass" guid="wrUqRmysaUaTNG+EIldTAgAA">
+<XPD:ATTR name="Name" type="string">Lee, Jangwoo</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[6]" type="UMLClass" guid="R4ueGs13U0uU7uA7GfQuwgAA">
+<XPD:ATTR name="Name" type="string">Lee, Minkyu</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[7]" type="UMLClass" guid="cZJpDMIhLkaN+6380nTjCgAA">
+<XPD:ATTR name="Name" type="string">Lim, Heejin</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[8]" type="UMLInterface" guid="KkLGJmfcO0y7keuSLh3xpQAA">
+<XPD:ATTR name="Name" type="string">Bae, Rankyoung1</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[9]" type="UMLClass" guid="rzT262Z1jEeiLPfjq8YXAQAA">
+<XPD:ATTR name="Name" type="string">OutputStreamAppender</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">NaiNuZ1qLUu+5nZq2pgoJgAA</XPD:REF>
+<XPD:REF name="Views[1]">H/1viIm6yE20XaYIV5XQmgAA</XPD:REF>
+<XPD:REF name="Views[2]">/LiIyuskqE6jkbei5roLSgAA</XPD:REF>
+<XPD:REF name="Views[3]">LFUOQyCzKkODyDltdenqSQAA</XPD:REF>
+<XPD:ATTR name="#Generalizations" type="integer">1</XPD:ATTR>
+<XPD:REF name="Generalizations[0]">iGZQWONRSkmUZXwA2ctTYAAA</XPD:REF>
+<XPD:ATTR name="#Specializations" type="integer">2</XPD:ATTR>
+<XPD:REF name="Specializations[0]">AjD3odwWRkqn7DLLtsqSMQAA</XPD:REF>
+<XPD:REF name="Specializations[1]">DwI/SvxrPEa+xlJeUNknVQAA</XPD:REF>
+<XPD:ATTR name="#Operations" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Operations[0]" type="UMLOperation" guid="Y/8ny1CDlUmGw7XO+p1IVAAA">
+<XPD:ATTR name="Name" type="string">setOutputStream</XPD:ATTR>
+<XPD:REF name="Owner">rzT262Z1jEeiLPfjq8YXAQAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="o7mxtv1VFUuGMzTZ/PzpJQAA">
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">void</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">Y/8ny1CDlUmGw7XO+p1IVAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="WiQnBPlZNUKAb1kDr8rYMAAA">
+<XPD:ATTR name="Name" type="string">OutputStream</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">Y/8ny1CDlUmGw7XO+p1IVAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[1]" type="UMLOperation" guid="LBTffoJKpkuteoCZOKUnaQAA">
+<XPD:ATTR name="Name" type="string">setEncoder</XPD:ATTR>
+<XPD:REF name="Owner">rzT262Z1jEeiLPfjq8YXAQAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="QBbT8+accEGiDOyIxemC6gAA">
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">void</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">LBTffoJKpkuteoCZOKUnaQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="euJK1npBAkKQLyA/ixyf4gAA">
+<XPD:ATTR name="Name" type="string">Encoder<E></XPD:ATTR>
+<XPD:REF name="BehavioralFeature">LBTffoJKpkuteoCZOKUnaQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:ATTR name="#Associations" type="integer">3</XPD:ATTR>
+<XPD:REF name="Associations[0]">CNBYSz/4s0OUBwR3Ujj7qAAA</XPD:REF>
+<XPD:REF name="Associations[1]">KNPa5jL8m0SnxCPJDiLPEwAA</XPD:REF>
+<XPD:REF name="Associations[2]">IA0uuG/DqUSPP93NTt7KPwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[10]" type="UMLClass" guid="xVL+I0ePyEKePe2ybmIZqQAA">
+<XPD:ATTR name="Name" type="string">UnsynchronizedAppenderBase</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">82N1NUXIMU2s0JVvIgA33wAA</XPD:REF>
+<XPD:REF name="Views[1]">MbkisNcJq06fy8rfNf//qgAA</XPD:REF>
+<XPD:REF name="Views[2]">bHWlSSp0L0KsF9iS2K/VuAAA</XPD:REF>
+<XPD:REF name="Views[3]">A3o0HBZQP0+GUAIDarVM5AAA</XPD:REF>
+<XPD:ATTR name="#ClientDependencies" type="integer">1</XPD:ATTR>
+<XPD:REF name="ClientDependencies[0]">MLMgV5lk30+73KeQUlkJ1AAA</XPD:REF>
+<XPD:ATTR name="#Generalizations" type="integer">1</XPD:ATTR>
+<XPD:REF name="Generalizations[0]">mt8sHMuW6k6vvkswchHN9AAA</XPD:REF>
+<XPD:ATTR name="#Specializations" type="integer">2</XPD:ATTR>
+<XPD:REF name="Specializations[0]">mt8sHMuW6k6vvkswchHN9AAA</XPD:REF>
+<XPD:REF name="Specializations[1]">iGZQWONRSkmUZXwA2ctTYAAA</XPD:REF>
+<XPD:ATTR name="#Operations" type="integer">4</XPD:ATTR>
+<XPD:OBJ name="Operations[0]" type="UMLOperation" guid="QrizX1w8Uk+lWkr80819WAAA">
+<XPD:ATTR name="Name" type="string">doAppend</XPD:ATTR>
+<XPD:REF name="Owner">xVL+I0ePyEKePe2ybmIZqQAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="i3SFY3XjzkqfjCdeRItB0AAA">
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">void</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">QrizX1w8Uk+lWkr80819WAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="rcsyT8SmtEaJWAgOu29ifgAA">
+<XPD:ATTR name="Name" type="string">E event</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">QrizX1w8Uk+lWkr80819WAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[1]" type="UMLOperation" guid="G5EvR3IAqUWyIUSQT5iKfAAA">
+<XPD:ATTR name="Name" type="string">append</XPD:ATTR>
+<XPD:ATTR name="Visibility" type="UMLVisibilityKind">vkProtected</XPD:ATTR>
+<XPD:REF name="Owner">xVL+I0ePyEKePe2ybmIZqQAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="BZo+omwID0Op8lvSMhrmCAAA">
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">void</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">G5EvR3IAqUWyIUSQT5iKfAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="0mhi1Re0mUaekyTApQtYKgAA">
+<XPD:ATTR name="Name" type="string">E event</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">G5EvR3IAqUWyIUSQT5iKfAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[2]" type="UMLOperation" guid="noZlW3WOpUSNYP7MIP2dIAAA">
+<XPD:ATTR name="Name" type="string">addFilter</XPD:ATTR>
+<XPD:REF name="Owner">xVL+I0ePyEKePe2ybmIZqQAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="7JBY4nyhIES1n0jpwFzs0wAA">
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">void</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">noZlW3WOpUSNYP7MIP2dIAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="Zd/8hSZIgUuOnnlNuMOW3QAA">
+<XPD:ATTR name="Name" type="string">Filter<E> filter</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">noZlW3WOpUSNYP7MIP2dIAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[3]" type="UMLOperation" guid="+Hda0J6VTEGM7V6+m3aW7QAA">
+<XPD:ATTR name="Name" type="string">getFilterChainDecision</XPD:ATTR>
+<XPD:REF name="Owner">xVL+I0ePyEKePe2ybmIZqQAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="b7Oh8zbH6kKEeryzkMlLQgAA">
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">FilterReply</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">+Hda0J6VTEGM7V6+m3aW7QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="QFIz2saC3kK9QRns9gVVIwAA">
+<XPD:ATTR name="Name" type="string">E event</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">+Hda0J6VTEGM7V6+m3aW7QAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[11]" type="UMLClass" guid="yqvs3sZ9DUGqcZqP0JhEYQAA">
+<XPD:ATTR name="Name" type="string">ConsoleAppender</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">uk+yKXVJ4kGbJp9tS5jKTwAA</XPD:REF>
+<XPD:REF name="Views[1]">nH6UBhoeX0KbQRIkAzLiWAAA</XPD:REF>
+<XPD:REF name="Views[2]">Jb94kigpgUqu4dlcc+CGdAAA</XPD:REF>
+<XPD:REF name="Views[3]">QxduxAxohEmCZQGHeQsZcgAA</XPD:REF>
+<XPD:ATTR name="#Generalizations" type="integer">3</XPD:ATTR>
+<XPD:REF name="Generalizations[0]">KECSr2IcSEKuUekqxWFfQQAA</XPD:REF>
+<XPD:REF name="Generalizations[1]">jfTGxiHUzUynYKDudsAtlgAA</XPD:REF>
+<XPD:REF name="Generalizations[2]">AjD3odwWRkqn7DLLtsqSMQAA</XPD:REF>
+<XPD:ATTR name="#Specializations" type="integer">2</XPD:ATTR>
+<XPD:REF name="Specializations[0]">KECSr2IcSEKuUekqxWFfQQAA</XPD:REF>
+<XPD:REF name="Specializations[1]">jfTGxiHUzUynYKDudsAtlgAA</XPD:REF>
+<XPD:ATTR name="#Operations" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Operations[0]" type="UMLOperation" guid="QBjgNn4eI0Gb0Lu8uW8RgQAA">
+<XPD:ATTR name="Name" type="string">setTarget</XPD:ATTR>
+<XPD:REF name="Owner">yqvs3sZ9DUGqcZqP0JhEYQAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="D6Tvg4B6zk2nDCrvCSXiogAA">
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">void</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">QBjgNn4eI0Gb0Lu8uW8RgQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="5HN4co7SEkGYIIXb9P4IcwAA">
+<XPD:ATTR name="Name" type="string">String</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">QBjgNn4eI0Gb0Lu8uW8RgQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[12]" type="UMLRealization" guid="MLMgV5lk30+73KeQUlkJ1AAA">
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:REF name="Client">xVL+I0ePyEKePe2ybmIZqQAA</XPD:REF>
+<XPD:REF name="Supplier">Ec4V6xlK5USBInAfRT+kBgAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">lL0hvfNl1UCp0ZckmzYqAAAA</XPD:REF>
+<XPD:REF name="Views[1]">R+yIkrw1xkGRRmxo6cIv7AAA</XPD:REF>
+<XPD:REF name="Views[2]">MHt2cHh8nkq4xztkXeNA1AAA</XPD:REF>
+<XPD:REF name="Views[3]">1cFzyVYsZUexhz9n3LRU9AAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[13]" type="UMLRealization" guid="kjMmekdMhUCZp7nT1+7m5QAA">
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:REF name="Client">Ec4V6xlK5USBInAfRT+kBgAA</XPD:REF>
+<XPD:REF name="Supplier">Ec4V6xlK5USBInAfRT+kBgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[14]" type="UMLGeneralization" guid="mt8sHMuW6k6vvkswchHN9AAA">
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:REF name="Child">xVL+I0ePyEKePe2ybmIZqQAA</XPD:REF>
+<XPD:REF name="Parent">xVL+I0ePyEKePe2ybmIZqQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[15]" type="UMLGeneralization" guid="iGZQWONRSkmUZXwA2ctTYAAA">
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:REF name="Child">rzT262Z1jEeiLPfjq8YXAQAA</XPD:REF>
+<XPD:REF name="Parent">xVL+I0ePyEKePe2ybmIZqQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">fqotcKjEKUu0dHy5krCbbgAA</XPD:REF>
+<XPD:REF name="Views[1]">a5TKNXnsu0Cm1O3vWK2A5QAA</XPD:REF>
+<XPD:REF name="Views[2]">lfapsg0nvkOzLtKq21jKcQAA</XPD:REF>
+<XPD:REF name="Views[3]">J/CqIqCm4k64OiOc5XyUFgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[16]" type="UMLGeneralization" guid="KECSr2IcSEKuUekqxWFfQQAA">
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:REF name="Child">yqvs3sZ9DUGqcZqP0JhEYQAA</XPD:REF>
+<XPD:REF name="Parent">yqvs3sZ9DUGqcZqP0JhEYQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[17]" type="UMLGeneralization" guid="jfTGxiHUzUynYKDudsAtlgAA">
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:REF name="Child">yqvs3sZ9DUGqcZqP0JhEYQAA</XPD:REF>
+<XPD:REF name="Parent">yqvs3sZ9DUGqcZqP0JhEYQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[18]" type="UMLGeneralization" guid="AjD3odwWRkqn7DLLtsqSMQAA">
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:REF name="Child">yqvs3sZ9DUGqcZqP0JhEYQAA</XPD:REF>
+<XPD:REF name="Parent">rzT262Z1jEeiLPfjq8YXAQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">Byj7ulJD9UmN+tawKGwCEgAA</XPD:REF>
+<XPD:REF name="Views[1]">HQiDhC6IA0iqlMhf1tdcJQAA</XPD:REF>
+<XPD:REF name="Views[2]">npCChlHvbECPkeBWStHdGwAA</XPD:REF>
+<XPD:REF name="Views[3]">DNi8lqQWi0GHkNrHlB+wdAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[19]" type="UMLClass" guid="fbO+5cdSPEmSXuXSqE8gXgAA">
+<XPD:ATTR name="Name" type="string">FileAppender</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">umRYCn2dek6PVCutQ7EHjgAA</XPD:REF>
+<XPD:REF name="Views[1]">XJMRRQ4IvEKN76PkDbMKOQAA</XPD:REF>
+<XPD:REF name="Views[2]">wZmHw439VE+zuefCYQQqVAAA</XPD:REF>
+<XPD:REF name="Views[3]">PHqgEBQhpEmlVKbjkRedkAAA</XPD:REF>
+<XPD:ATTR name="#Generalizations" type="integer">1</XPD:ATTR>
+<XPD:REF name="Generalizations[0]">DwI/SvxrPEa+xlJeUNknVQAA</XPD:REF>
+<XPD:ATTR name="#Specializations" type="integer">1</XPD:ATTR>
+<XPD:REF name="Specializations[0]">MAm8gr3YDE+lxocsUB9afAAA</XPD:REF>
+<XPD:ATTR name="#Operations" type="integer">3</XPD:ATTR>
+<XPD:OBJ name="Operations[0]" type="UMLOperation" guid="RGzx8sTCQ0+SvjEhj3FCpwAA">
+<XPD:ATTR name="Name" type="string">setFile</XPD:ATTR>
+<XPD:REF name="Owner">fbO+5cdSPEmSXuXSqE8gXgAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="uxSNpKmGV0+K54EwgffqpgAA">
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">void</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">RGzx8sTCQ0+SvjEhj3FCpwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="i90wHpacOEiHseZIDnpZAAAA">
+<XPD:ATTR name="Name" type="string">String</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">RGzx8sTCQ0+SvjEhj3FCpwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[1]" type="UMLOperation" guid="emxKAOn2sEGODzlrBwfBDQAA">
+<XPD:ATTR name="Name" type="string">setPrudent</XPD:ATTR>
+<XPD:REF name="Owner">fbO+5cdSPEmSXuXSqE8gXgAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="Qzhwjji8FkawThwNpGWYlAAA">
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">void</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">emxKAOn2sEGODzlrBwfBDQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="/c5zBe26tkWrpTH8RQJKDgAA">
+<XPD:ATTR name="Name" type="string">boolean</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">emxKAOn2sEGODzlrBwfBDQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[2]" type="UMLOperation" guid="pzOru1aa1kKBEpPdw/x8HwAA">
+<XPD:ATTR name="Name" type="string">setAppend</XPD:ATTR>
+<XPD:REF name="Owner">fbO+5cdSPEmSXuXSqE8gXgAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="xfe5Kz7eGUGt/qsdAVz1nwAA">
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">void</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">pzOru1aa1kKBEpPdw/x8HwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="byGZtqglLkSMXqHvyAwzXQAA">
+<XPD:ATTR name="Name" type="string">boolean</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">pzOru1aa1kKBEpPdw/x8HwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[20]" type="UMLGeneralization" guid="DwI/SvxrPEa+xlJeUNknVQAA">
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:REF name="Child">fbO+5cdSPEmSXuXSqE8gXgAA</XPD:REF>
+<XPD:REF name="Parent">rzT262Z1jEeiLPfjq8YXAQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">xnvee9U5202YS/ztrwJSRAAA</XPD:REF>
+<XPD:REF name="Views[1]">oASzcKN58EuYmztjk4WiEwAA</XPD:REF>
+<XPD:REF name="Views[2]">O0OgQK6n40urO6JVc74njgAA</XPD:REF>
+<XPD:REF name="Views[3]">bgKTOidFkEeRLn6bk0KEEgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[21]" type="UMLClass" guid="V4xOMUpxokyB4fxrQNJPxQAA">
+<XPD:ATTR name="Name" type="string">RollingFileAppender</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">rHFGD6C9T0y5SMWPFgS09QAA</XPD:REF>
+<XPD:REF name="Views[1]">1hKuFZUojkuzeqX9AiWUlwAA</XPD:REF>
+<XPD:REF name="Views[2]">g+GUofZEmU2lEM1VL3vLIQAA</XPD:REF>
+<XPD:REF name="Views[3]">4HSOp+H3/ECJnOpzcIo3jwAA</XPD:REF>
+<XPD:ATTR name="#Generalizations" type="integer">1</XPD:ATTR>
+<XPD:REF name="Generalizations[0]">MAm8gr3YDE+lxocsUB9afAAA</XPD:REF>
+<XPD:ATTR name="#Operations" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Operations[0]" type="UMLOperation" guid="zJE7QEhOYkGwavHKRi/e1gAA">
+<XPD:ATTR name="Name" type="string">setRollingPolicy</XPD:ATTR>
+<XPD:REF name="Owner">V4xOMUpxokyB4fxrQNJPxQAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="fBG8X0xpiU2QG4VhcArHXwAA">
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">void</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">zJE7QEhOYkGwavHKRi/e1gAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="pokyvx+ik0yawdfYXl/EHQAA">
+<XPD:ATTR name="Name" type="string">RollingPolicy</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">zJE7QEhOYkGwavHKRi/e1gAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[1]" type="UMLOperation" guid="90I+pA0XnkiDcK8Um95kDwAA">
+<XPD:ATTR name="Name" type="string">setTriggeringPolicy</XPD:ATTR>
+<XPD:REF name="Owner">V4xOMUpxokyB4fxrQNJPxQAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="/rKEm7ax1kOVmGAMDsfXRgAA">
+<XPD:ATTR name="Name" type="string">TriggeringPolicy<E></XPD:ATTR>
+<XPD:REF name="BehavioralFeature">90I+pA0XnkiDcK8Um95kDwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[22]" type="UMLClass" guid="F1lk6TogWUGfYFH4FvBLOAAA">
+<XPD:ATTR name="Name" type="string">Encoder</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">interface</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">0AQ8gdYUKk2Ms7nTdCyd3QAA</XPD:REF>
+<XPD:REF name="Views[1]">lyHSH0gj5USAm8DDiVvc1AAA</XPD:REF>
+<XPD:REF name="Views[2]">A7cLwlK4RESapHusUAalugAA</XPD:REF>
+<XPD:REF name="Views[3]">qQCEnWeXyUaictLrSH/4IgAA</XPD:REF>
+<XPD:ATTR name="#Operations" type="integer">3</XPD:ATTR>
+<XPD:OBJ name="Operations[0]" type="UMLOperation" guid="KTkAdBDG1k6vBX6/3VDh3wAA">
+<XPD:ATTR name="Name" type="string">init</XPD:ATTR>
+<XPD:REF name="Owner">F1lk6TogWUGfYFH4FvBLOAAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="K1xInu1IW06VU8RAornDFgAA">
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">void</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">KTkAdBDG1k6vBX6/3VDh3wAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="q0oNOzYnwkC00CgD5grrpgAA">
+<XPD:ATTR name="Name" type="string">OutputStream</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">KTkAdBDG1k6vBX6/3VDh3wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[1]" type="UMLOperation" guid="0OIKQj9lz0epLF4VThStRgAA">
+<XPD:ATTR name="Name" type="string">doEncode</XPD:ATTR>
+<XPD:REF name="Owner">F1lk6TogWUGfYFH4FvBLOAAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="DMbvra8Y4E+d/ziodIGqyQAA">
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">void</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">0OIKQj9lz0epLF4VThStRgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="v+KY7Q4t4kak92z8YJ0K7AAA">
+<XPD:ATTR name="Name" type="string">E event</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">0OIKQj9lz0epLF4VThStRgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[2]" type="UMLOperation" guid="I6ieXuGhMkCcbz9MDCy1uAAA">
+<XPD:ATTR name="Name" type="string">close</XPD:ATTR>
+<XPD:REF name="Owner">F1lk6TogWUGfYFH4FvBLOAAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="XyFkApGcmESs4dwJgM1s8AAA">
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">void</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">I6ieXuGhMkCcbz9MDCy1uAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:ATTR name="#Associations" type="integer">2</XPD:ATTR>
+<XPD:REF name="Associations[0]">1RTpKQO+4U+uqZahckvNEwAA</XPD:REF>
+<XPD:REF name="Associations[1]">JFP7YnD8ak2COLWe8jfBSwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[23]" type="UMLAssociation" guid="u9/9xY5vOU2kSfX9AmlMAwAA">
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="CNBYSz/4s0OUBwR3Ujj7qAAA">
+<XPD:REF name="Association">u9/9xY5vOU2kSfX9AmlMAwAA</XPD:REF>
+<XPD:REF name="Participant">rzT262Z1jEeiLPfjq8YXAQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="1RTpKQO+4U+uqZahckvNEwAA">
+<XPD:ATTR name="Aggregation" type="UMLAggregationKind">akComposite</XPD:ATTR>
+<XPD:REF name="Association">u9/9xY5vOU2kSfX9AmlMAwAA</XPD:REF>
+<XPD:REF name="Participant">F1lk6TogWUGfYFH4FvBLOAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[24]" type="UMLAssociation" guid="kXyf6+RLrki8M9yh9qd9JwAA">
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">lMmxZJude0e4iK5TJK4KmwAA</XPD:REF>
+<XPD:REF name="Views[1]">Lpxx+3J+D0S223D5ODQq4wAA</XPD:REF>
+<XPD:REF name="Views[2]">rhfNbKEGWUaK9KPGeno2AAAA</XPD:REF>
+<XPD:REF name="Views[3]">5lfzJsxzLkS60zCpNz5+twAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="JFP7YnD8ak2COLWe8jfBSwAA">
+<XPD:REF name="Association">kXyf6+RLrki8M9yh9qd9JwAA</XPD:REF>
+<XPD:REF name="Participant">F1lk6TogWUGfYFH4FvBLOAAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">G2JYoZaOKku0lwIKN7cKRQAA</XPD:REF>
+<XPD:REF name="Views[1]">h/GU+p9gHkyMIIzW5Tap4wAA</XPD:REF>
+<XPD:REF name="Views[2]">yN2upZx6REeZpBi/IRMnlgAA</XPD:REF>
+<XPD:REF name="Views[3]">4leicQixUEWISYBF6P8LSgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="KNPa5jL8m0SnxCPJDiLPEwAA">
+<XPD:ATTR name="Aggregation" type="UMLAggregationKind">akComposite</XPD:ATTR>
+<XPD:REF name="Association">kXyf6+RLrki8M9yh9qd9JwAA</XPD:REF>
+<XPD:REF name="Participant">rzT262Z1jEeiLPfjq8YXAQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">w+U1pR05XkeMT1rnnS2TcgAA</XPD:REF>
+<XPD:REF name="Views[1]">Wzm+qJkDL0+jgE0ioVsNvwAA</XPD:REF>
+<XPD:REF name="Views[2]">MLngpvqsdU+i4Djdsali7wAA</XPD:REF>
+<XPD:REF name="Views[3]">ZVjULz2utUKwdUcoGweZkgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[25]" type="UMLGeneralization" guid="MAm8gr3YDE+lxocsUB9afAAA">
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:REF name="Child">V4xOMUpxokyB4fxrQNJPxQAA</XPD:REF>
+<XPD:REF name="Parent">fbO+5cdSPEmSXuXSqE8gXgAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">VGws4gb7FEGKDPIpXKW13QAA</XPD:REF>
+<XPD:REF name="Views[1]">2t9xQX0DaECER1G841x4ggAA</XPD:REF>
+<XPD:REF name="Views[2]">ZJ+e5yqWkkyJmgI5NCe9qQAA</XPD:REF>
+<XPD:REF name="Views[3]">uWFySM7Jq026r7z2lz9/TgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[26]" type="UMLClass" guid="ObD18j8uiUuqWEEES+U7VwAA">
+<XPD:ATTR name="Name" type="string">Filter</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">XnLeT4tUAUivKFCoAi8mCgAA</XPD:REF>
+<XPD:REF name="Views[1]">Y+K3bBi2DEiJlBzf/w+degAA</XPD:REF>
+<XPD:REF name="Views[2]">x12I7wVJHkKX8s9N/bVWLQAA</XPD:REF>
+<XPD:REF name="Views[3]">ybd6Chc7bUaikqpMu2gydwAA</XPD:REF>
+<XPD:ATTR name="#Operations" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Operations[0]" type="UMLOperation" guid="h2ChKW0gZES/JuZQuxznnwAA">
+<XPD:ATTR name="Name" type="string">decide</XPD:ATTR>
+<XPD:REF name="Owner">ObD18j8uiUuqWEEES+U7VwAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="en+rpIVeCkSoJAa812PoLwAA">
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">FilterReply</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">h2ChKW0gZES/JuZQuxznnwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="uNlc9FZz80ancniLw7/8MgAA">
+<XPD:ATTR name="Name" type="string">E event</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">h2ChKW0gZES/JuZQuxznnwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:ATTR name="#Associations" type="integer">1</XPD:ATTR>
+<XPD:REF name="Associations[0]">rtqCfaDNzE6xCSqNvsGQmAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[27]" type="UMLAssociation" guid="uh4HvYt2ZECJHo2VN0YtPwAA">
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">1GuVB976AUueN1l11+x/9AAA</XPD:REF>
+<XPD:REF name="Views[1]">rvc1lZzjJkyWMr6P/IPRnQAA</XPD:REF>
+<XPD:REF name="Views[2]">bCA0jUpnukKQFQdvrUXC5gAA</XPD:REF>
+<XPD:REF name="Views[3]">okxxVKfDiESE7wFAiHiTwQAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="rtqCfaDNzE6xCSqNvsGQmAAA">
+<XPD:REF name="Association">uh4HvYt2ZECJHo2VN0YtPwAA</XPD:REF>
+<XPD:REF name="Participant">ObD18j8uiUuqWEEES+U7VwAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">mdaJom9Aq0CCnF2E8j5mfgAA</XPD:REF>
+<XPD:REF name="Views[1]">TwLu6YMezke1PLwCqD9EKwAA</XPD:REF>
+<XPD:REF name="Views[2]">u6QeWosm+0GF06B6oeoA3AAA</XPD:REF>
+<XPD:REF name="Views[3]">5M6UkF5vREiYn4A49eajJAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="IA0uuG/DqUSPP93NTt7KPwAA">
+<XPD:ATTR name="Aggregation" type="UMLAggregationKind">akAggregate</XPD:ATTR>
+<XPD:REF name="Association">uh4HvYt2ZECJHo2VN0YtPwAA</XPD:REF>
+<XPD:REF name="Participant">rzT262Z1jEeiLPfjq8YXAQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">IPgYB1C27EyGv2x09901MgAA</XPD:REF>
+<XPD:REF name="Views[1]">YoNg+kiZ/0Kk9BC8Hs4jBgAA</XPD:REF>
+<XPD:REF name="Views[2]">QVrq+D0yCke4xdkp2ecVFgAA</XPD:REF>
+<XPD:REF name="Views[3]">j3F8XkYCU0K+Wb/6ACwHmAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[3]" type="UMLModel" guid="UTbE66PthkuXloDrctmmwwAA">
+<XPD:ATTR name="Name" type="string">Implementation Model</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">implementationModel</XPD:ATTR>
+<XPD:REF name="Namespace">JEGKOL0wwE6O2Emy29kFuwAA</XPD:REF>
+<XPD:ATTR name="#OwnedDiagrams" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="OwnedDiagrams[0]" type="UMLComponentDiagram" guid="UJbtRzsKuEa7sZAmr/tDGAAA">
+<XPD:ATTR name="Name" type="string">Main</XPD:ATTR>
+<XPD:REF name="DiagramOwner">UTbE66PthkuXloDrctmmwwAA</XPD:REF>
+<XPD:OBJ name="DiagramView" type="UMLComponentDiagramView" guid="vo5SIJcJIUWJz7mqomMr4wAA">
+<XPD:REF name="Diagram">UJbtRzsKuEa7sZAmr/tDGAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:ATTR name="#OwnedElements" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="OwnedElements[0]" type="UMLInterface" guid="naDG3jNwKEqkpiKwcQF/xgAA">
+<XPD:ATTR name="Name" type="string">dsd</XPD:ATTR>
+<XPD:REF name="Namespace">UTbE66PthkuXloDrctmmwwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[4]" type="UMLModel" guid="sbAEE91CXU+VbUQcRp4FwgAA">
+<XPD:ATTR name="Name" type="string">Deployment Model</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">deploymentModel</XPD:ATTR>
+<XPD:REF name="Namespace">JEGKOL0wwE6O2Emy29kFuwAA</XPD:REF>
+<XPD:ATTR name="#OwnedDiagrams" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="OwnedDiagrams[0]" type="UMLDeploymentDiagram" guid="tzrsCrrbjka5umz88mdzIAAA">
+<XPD:ATTR name="Name" type="string">Main</XPD:ATTR>
+<XPD:REF name="DiagramOwner">sbAEE91CXU+VbUQcRp4FwgAA</XPD:REF>
+<XPD:OBJ name="DiagramView" type="UMLDeploymentDiagramView" guid="OlRAEhzdxkCw+mUnxs9v2wAA">
+<XPD:REF name="Diagram">tzrsCrrbjka5umz88mdzIAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[5]" type="UMLModel" guid="mC0A50UCikqRZT73f5NgTgAA">
+<XPD:ATTR name="Name" type="string">Analysis Model1</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">analysisModel</XPD:ATTR>
+<XPD:REF name="Namespace">JEGKOL0wwE6O2Emy29kFuwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:BODY>
+</XPD:PROJECT>
diff --git a/logback-site/src/site/resources/manual/images/chapters/appenders/appender.~ml b/logback-site/src/site/resources/manual/images/chapters/appenders/appender.~ml
new file mode 100644
index 0000000..6533149
--- /dev/null
+++ b/logback-site/src/site/resources/manual/images/chapters/appenders/appender.~ml
@@ -0,0 +1,865 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<XPD:PROJECT xmlns:XPD="http://www.staruml.com" version="1">
+<XPD:HEADER>
+<XPD:SUBUNITS>
+</XPD:SUBUNITS>
+<XPD:PROFILES>
+<XPD:PROFILE>UMLStandard</XPD:PROFILE>
+</XPD:PROFILES>
+</XPD:HEADER>
+<XPD:BODY>
+<XPD:OBJ name="DocumentElement" type="UMLProject" guid="JEGKOL0wwE6O2Emy29kFuwAA">
+<XPD:ATTR name="Title" type="string">Untitled</XPD:ATTR>
+<XPD:ATTR name="#OwnedElements" type="integer">6</XPD:ATTR>
+<XPD:OBJ name="OwnedElements[0]" type="UMLModel" guid="Nu7ucmhxa0aC5WTL/Hl5qgAA">
+<XPD:ATTR name="Name" type="string">Use Case Model</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">useCaseModel</XPD:ATTR>
+<XPD:REF name="Namespace">JEGKOL0wwE6O2Emy29kFuwAA</XPD:REF>
+<XPD:ATTR name="#OwnedDiagrams" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="OwnedDiagrams[0]" type="UMLUseCaseDiagram" guid="AOpe9EpUuEqbJkhPg6UN+wAA">
+<XPD:ATTR name="Name" type="string">Main</XPD:ATTR>
+<XPD:REF name="DiagramOwner">Nu7ucmhxa0aC5WTL/Hl5qgAA</XPD:REF>
+<XPD:OBJ name="DiagramView" type="UMLUseCaseDiagramView" guid="jha7HHI2JEmss41Kcx5rmAAA">
+<XPD:REF name="Diagram">AOpe9EpUuEqbJkhPg6UN+wAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[1]" type="UMLModel" guid="nzHC5ZSub0yOmXzqddVh7QAA">
+<XPD:ATTR name="Name" type="string">Analysis Model</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">analysisModel</XPD:ATTR>
+<XPD:REF name="Namespace">JEGKOL0wwE6O2Emy29kFuwAA</XPD:REF>
+<XPD:ATTR name="#OwnedDiagrams" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="OwnedDiagrams[0]" type="UMLClassDiagram" guid="ucvrQjCCHEOMfGCAAc5zPQAA">
+<XPD:ATTR name="Name" type="string">Main</XPD:ATTR>
+<XPD:ATTR name="DefaultDiagram" type="boolean">True</XPD:ATTR>
+<XPD:ATTR name="DiagramType" type="string">RobustnessDiagram</XPD:ATTR>
+<XPD:REF name="DiagramOwner">nzHC5ZSub0yOmXzqddVh7QAA</XPD:REF>
+<XPD:OBJ name="DiagramView" type="UMLClassDiagramView" guid="sxIjWZ8eT0KTmxDhcr84UAAA">
+<XPD:REF name="Diagram">ucvrQjCCHEOMfGCAAc5zPQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[2]" type="UMLModel" guid="dQlYoesWY0yxg2VJCxHxOQAA">
+<XPD:ATTR name="Name" type="string">Design Model</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">designModel</XPD:ATTR>
+<XPD:REF name="Namespace">JEGKOL0wwE6O2Emy29kFuwAA</XPD:REF>
+<XPD:ATTR name="#OwnedDiagrams" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="OwnedDiagrams[0]" type="UMLClassDiagram" guid="jdoFPKplx0W53YpEZi95TAAA">
+<XPD:ATTR name="Name" type="string">Main</XPD:ATTR>
+<XPD:ATTR name="DefaultDiagram" type="boolean">True</XPD:ATTR>
+<XPD:REF name="DiagramOwner">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:OBJ name="DiagramView" type="UMLClassDiagramView" guid="oWGUMKWgOEus+/3Jqk/tpAAA">
+<XPD:REF name="Diagram">jdoFPKplx0W53YpEZi95TAAA</XPD:REF>
+<XPD:ATTR name="#OwnedViews" type="integer">13</XPD:ATTR>
+<XPD:OBJ name="OwnedViews[0]" type="UMLClassView" guid="tSxGyrwfEkSgp1EcheSXaAAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">464</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">76</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">161</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">93</XPD:ATTR>
+<XPD:REF name="Model">Ec4V6xlK5USBInAfRT+kBgAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="4OJodmUjvU6Oqy3fe+ZfuQAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="nTnCIikI3UOMxs9QtoE1sgAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">Appender</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="iOfigC5hM06553UhkG3o4gAA">
+<XPD:ATTR name="Text" type="string"><<interface>></XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="gAAMY35/8kO92uV18LmCWAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="m+f/Nz96gEqfQeHGgfAxjwAA">
+<XPD:REF name="Model">Ec4V6xlK5USBInAfRT+kBgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="ViAxcLeYxEC/QDB9dCuwagAA">
+<XPD:REF name="Model">Ec4V6xlK5USBInAfRT+kBgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="gvxeAhX+WkGcvqw6KjlA7wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">Ec4V6xlK5USBInAfRT+kBgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[1]" type="UMLClassView" guid="NaiNuZ1qLUu+5nZq2pgoJgAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">364</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">384</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">361</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">56</XPD:ATTR>
+<XPD:REF name="Model">rzT262Z1jEeiLPfjq8YXAQAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="3Qx0O28WLEC1wlpntM/QWQAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="gLLmeDlS+Ua9NL1IKkZqBgAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">OutputStreamAppender</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="7awZOkK3cUS1dBI9YKP2TwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="LtVVLfcmbkq7TWeA6T7S4AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="H/1viIm6yE20XaYIV5XQmgAA">
+<XPD:REF name="Model">rzT262Z1jEeiLPfjq8YXAQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="/LiIyuskqE6jkbei5roLSgAA">
+<XPD:REF name="Model">rzT262Z1jEeiLPfjq8YXAQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="LFUOQyCzKkODyDltdenqSQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">rzT262Z1jEeiLPfjq8YXAQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[2]" type="UMLClassView" guid="82N1NUXIMU2s0JVvIgA33wAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">428</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">240</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">228</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">95</XPD:ATTR>
+<XPD:REF name="Model">xVL+I0ePyEKePe2ybmIZqQAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="MEOstStI0EC0RQoiT5DFLQAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="CDkuaYXZDEC5+cMzdHsl8wAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">UnsynchronizedAppenderBase</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="N/VzkXk9vkGTb/Gq05Hm4gAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="Wbq2KwFqq0uOx2yShkE49QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="MbkisNcJq06fy8rfNf//qgAA">
+<XPD:REF name="Model">xVL+I0ePyEKePe2ybmIZqQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="bHWlSSp0L0KsF9iS2K/VuAAA">
+<XPD:REF name="Model">xVL+I0ePyEKePe2ybmIZqQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="A3o0HBZQP0+GUAIDarVM5AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">xVL+I0ePyEKePe2ybmIZqQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[3]" type="UMLClassView" guid="uk+yKXVJ4kGbJp9tS5jKTwAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">308</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">548</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">205</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">43</XPD:ATTR>
+<XPD:REF name="Model">yqvs3sZ9DUGqcZqP0JhEYQAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="pd1JNpNdxkm4N3mMjABxcgAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="Jfgvt5uhf0aDXP4fvB8FuAAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">ConsoleAppender</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="x915MlraB0+hK5agb0HxVwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="o72CPBdC2UGyraSt4vxsHQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="nH6UBhoeX0KbQRIkAzLiWAAA">
+<XPD:REF name="Model">yqvs3sZ9DUGqcZqP0JhEYQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="Jb94kigpgUqu4dlcc+CGdAAA">
+<XPD:REF name="Model">yqvs3sZ9DUGqcZqP0JhEYQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="QxduxAxohEmCZQGHeQsZcgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">yqvs3sZ9DUGqcZqP0JhEYQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[4]" type="UMLRealizationView" guid="lL0hvfNl1UCp0ZckmzYqAAAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">542,240;543,168</XPD:ATTR>
+<XPD:REF name="Model">MLMgV5lk30+73KeQUlkJ1AAA</XPD:REF>
+<XPD:REF name="Head">tSxGyrwfEkSgp1EcheSXaAAA</XPD:REF>
+<XPD:REF name="Tail">82N1NUXIMU2s0JVvIgA33wAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="R+yIkrw1xkGRRmxo6cIv7AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">MLMgV5lk30+73KeQUlkJ1AAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="MHt2cHh8nkq4xztkXeNA1AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">MLMgV5lk30+73KeQUlkJ1AAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="1cFzyVYsZUexhz9n3LRU9AAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">MLMgV5lk30+73KeQUlkJ1AAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[5]" type="UMLGeneralizationView" guid="fqotcKjEKUu0dHy5krCbbgAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">543,384;542,334</XPD:ATTR>
+<XPD:REF name="Model">iGZQWONRSkmUZXwA2ctTYAAA</XPD:REF>
+<XPD:REF name="Head">82N1NUXIMU2s0JVvIgA33wAA</XPD:REF>
+<XPD:REF name="Tail">NaiNuZ1qLUu+5nZq2pgoJgAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="a5TKNXnsu0Cm1O3vWK2A5QAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">iGZQWONRSkmUZXwA2ctTYAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="lfapsg0nvkOzLtKq21jKcQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">iGZQWONRSkmUZXwA2ctTYAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="J/CqIqCm4k64OiOc5XyUFgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">iGZQWONRSkmUZXwA2ctTYAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[6]" type="UMLGeneralizationView" guid="Byj7ulJD9UmN+tawKGwCEgAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">428,548;520,439</XPD:ATTR>
+<XPD:REF name="Model">AjD3odwWRkqn7DLLtsqSMQAA</XPD:REF>
+<XPD:REF name="Head">NaiNuZ1qLUu+5nZq2pgoJgAA</XPD:REF>
+<XPD:REF name="Tail">uk+yKXVJ4kGbJp9tS5jKTwAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="HQiDhC6IA0iqlMhf1tdcJQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">AjD3odwWRkqn7DLLtsqSMQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="npCChlHvbECPkeBWStHdGwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">AjD3odwWRkqn7DLLtsqSMQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="DNi8lqQWi0GHkNrHlB+wdAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">AjD3odwWRkqn7DLLtsqSMQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[7]" type="UMLClassView" guid="umRYCn2dek6PVCutQ7EHjgAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">628</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">552</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">181</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">43</XPD:ATTR>
+<XPD:REF name="Model">fbO+5cdSPEmSXuXSqE8gXgAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="IY/ehYDmxki8kSqbCHHCfQAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="lcA4v9eDHUugTZoPU740LAAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">FileAppender</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="OVAuCrBMykaCfcii7gDdCwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="xiHCrB3qu0yBBg0U/q3EawAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="XJMRRQ4IvEKN76PkDbMKOQAA">
+<XPD:REF name="Model">fbO+5cdSPEmSXuXSqE8gXgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="wZmHw439VE+zuefCYQQqVAAA">
+<XPD:REF name="Model">fbO+5cdSPEmSXuXSqE8gXgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="PHqgEBQhpEmlVKbjkRedkAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">fbO+5cdSPEmSXuXSqE8gXgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[8]" type="UMLGeneralizationView" guid="xnvee9U5202YS/ztrwJSRAAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">695,552;574,439</XPD:ATTR>
+<XPD:REF name="Model">DwI/SvxrPEa+xlJeUNknVQAA</XPD:REF>
+<XPD:REF name="Head">NaiNuZ1qLUu+5nZq2pgoJgAA</XPD:REF>
+<XPD:REF name="Tail">umRYCn2dek6PVCutQ7EHjgAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="oASzcKN58EuYmztjk4WiEwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">DwI/SvxrPEa+xlJeUNknVQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="O0OgQK6n40urO6JVc74njgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">DwI/SvxrPEa+xlJeUNknVQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="bgKTOidFkEeRLn6bk0KEEgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">DwI/SvxrPEa+xlJeUNknVQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[9]" type="UMLClassView" guid="rHFGD6C9T0y5SMWPFgS09QAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">628</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">704</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">181</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">43</XPD:ATTR>
+<XPD:REF name="Model">V4xOMUpxokyB4fxrQNJPxQAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="OuAPH3aKlk2rg4cWgwv2BQAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="BEu6SCte7E6fslLxmD8brgAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">RollingFileAppender</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="diAZdqUjrUSnaEkyvki5HwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="HpL3GnQOO0KyNABCTyAsRwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="1hKuFZUojkuzeqX9AiWUlwAA">
+<XPD:REF name="Model">V4xOMUpxokyB4fxrQNJPxQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="g+GUofZEmU2lEM1VL3vLIQAA">
+<XPD:REF name="Model">V4xOMUpxokyB4fxrQNJPxQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="4HSOp+H3/ECJnOpzcIo3jwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">V4xOMUpxokyB4fxrQNJPxQAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[10]" type="UMLClassView" guid="0AQ8gdYUKk2Ms7nTdCyd3QAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">820</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">380</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">85</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">56</XPD:ATTR>
+<XPD:REF name="Model">F1lk6TogWUGfYFH4FvBLOAAA</XPD:REF>
+<XPD:OBJ name="NameCompartment" type="UMLNameCompartmentView" guid="h/ce/kieOUyyxRZ6c71fTQAA">
+<XPD:OBJ name="NameLabel" type="LabelView" guid="UZy1Qq+RWUWzR+BkMD2qBwAA">
+<XPD:ATTR name="FontStyle" type="integer">1</XPD:ATTR>
+<XPD:ATTR name="Text" type="string">Encoder</XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="LabelView" guid="A/4/paNKfEeyuIjaeXDosAAA">
+<XPD:ATTR name="Text" type="string"><<interface>></XPD:ATTR>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="LabelView" guid="Y950eaGp5kKS5JcixC2pLAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="AttributeCompartment" type="UMLAttributeCompartmentView" guid="lyHSH0gj5USAm8DDiVvc1AAA">
+<XPD:REF name="Model">F1lk6TogWUGfYFH4FvBLOAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OperationCompartment" type="UMLOperationCompartmentView" guid="A7cLwlK4RESapHusUAalugAA">
+<XPD:REF name="Model">F1lk6TogWUGfYFH4FvBLOAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TemplateParameterCompartment" type="UMLTemplateParameterCompartmentView" guid="qQCEnWeXyUaictLrSH/4IgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:REF name="Model">F1lk6TogWUGfYFH4FvBLOAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[11]" type="UMLAssociationView" guid="lMmxZJude0e4iK5TJK4KmwAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">820,408;724,409</XPD:ATTR>
+<XPD:REF name="Model">kXyf6+RLrki8M9yh9qd9JwAA</XPD:REF>
+<XPD:REF name="Head">NaiNuZ1qLUu+5nZq2pgoJgAA</XPD:REF>
+<XPD:REF name="Tail">0AQ8gdYUKk2Ms7nTdCyd3QAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="Lpxx+3J+D0S223D5ODQq4wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">kXyf6+RLrki8M9yh9qd9JwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="rhfNbKEGWUaK9KPGeno2AAAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">kXyf6+RLrki8M9yh9qd9JwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="5lfzJsxzLkS60zCpNz5+twAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">kXyf6+RLrki8M9yh9qd9JwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadRoleNameLabel" type="EdgeLabelView" guid="w+U1pR05XkeMT1rnnS2TcgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">KNPa5jL8m0SnxCPJDiLPEwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailRoleNameLabel" type="EdgeLabelView" guid="G2JYoZaOKku0lwIKN7cKRQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">JFP7YnD8ak2COLWe8jfBSwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadMultiplicityLabel" type="EdgeLabelView" guid="Wzm+qJkDL0+jgE0ioVsNvwAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">KNPa5jL8m0SnxCPJDiLPEwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailMultiplicityLabel" type="EdgeLabelView" guid="h/GU+p9gHkyMIIzW5Tap4wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.523598775598299</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">25</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">JFP7YnD8ak2COLWe8jfBSwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadPropertyLabel" type="EdgeLabelView" guid="MLngpvqsdU+i4Djdsali7wAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epHead</XPD:ATTR>
+<XPD:REF name="Model">KNPa5jL8m0SnxCPJDiLPEwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailPropertyLabel" type="EdgeLabelView" guid="yN2upZx6REeZpBi/IRMnlgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">0.785398163397448</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">40</XPD:ATTR>
+<XPD:ATTR name="EdgePosition" type="EdgePositionKind">epTail</XPD:ATTR>
+<XPD:REF name="Model">JFP7YnD8ak2COLWe8jfBSwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="HeadQualifierCompartment" type="UMLQualifierCompartmentView" guid="ZVjULz2utUKwdUcoGweZkgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">KNPa5jL8m0SnxCPJDiLPEwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="TailQualifierCompartment" type="UMLQualifierCompartmentView" guid="4leicQixUEWISYBF6P8LSgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Left" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Top" type="integer">-1000</XPD:ATTR>
+<XPD:ATTR name="Width" type="integer">50</XPD:ATTR>
+<XPD:ATTR name="Height" type="integer">8</XPD:ATTR>
+<XPD:REF name="Model">JFP7YnD8ak2COLWe8jfBSwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedViews[12]" type="UMLGeneralizationView" guid="VGws4gb7FEGKDPIpXKW13QAA">
+<XPD:ATTR name="LineColor" type="string">clMaroon</XPD:ATTR>
+<XPD:ATTR name="FillColor" type="string">$00B9FFFF</XPD:ATTR>
+<XPD:ATTR name="Points" type="Points">718,704;718,594</XPD:ATTR>
+<XPD:REF name="Model">MAm8gr3YDE+lxocsUB9afAAA</XPD:REF>
+<XPD:REF name="Head">umRYCn2dek6PVCutQ7EHjgAA</XPD:REF>
+<XPD:REF name="Tail">rHFGD6C9T0y5SMWPFgS09QAA</XPD:REF>
+<XPD:OBJ name="NameLabel" type="EdgeLabelView" guid="2t9xQX0DaECER1G841x4ggAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">MAm8gr3YDE+lxocsUB9afAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="StereotypeLabel" type="EdgeLabelView" guid="ZJ+e5yqWkkyJmgI5NCe9qQAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">30</XPD:ATTR>
+<XPD:REF name="Model">MAm8gr3YDE+lxocsUB9afAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="PropertyLabel" type="EdgeLabelView" guid="uWFySM7Jq026r7z2lz9/TgAA">
+<XPD:ATTR name="Visible" type="boolean">False</XPD:ATTR>
+<XPD:ATTR name="Alpha" type="real">-1.5707963267949</XPD:ATTR>
+<XPD:ATTR name="Distance" type="real">15</XPD:ATTR>
+<XPD:REF name="Model">MAm8gr3YDE+lxocsUB9afAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:ATTR name="#OwnedElements" type="integer">26</XPD:ATTR>
+<XPD:OBJ name="OwnedElements[0]" type="UMLInterface" guid="bL5DGTE1wkqFiYq+yJuTRAAA">
+<XPD:ATTR name="Name" type="string">Bae, Rankyoung</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[1]" type="UMLInterface" guid="PfW7flMvskqKmFDofejCYQAA">
+<XPD:ATTR name="Name" type="string">Jung, Yoontae</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[2]" type="UMLInterface" guid="XthOkDh0rk67+FyPgXCRgAAA">
+<XPD:ATTR name="Name" type="string">Kim, Hyunsoo</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[3]" type="UMLInterface" guid="WhfjywuM1kqS7RtEmuvAlgAA">
+<XPD:ATTR name="Name" type="string">Kim, Jeongil</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[4]" type="UMLClass" guid="Ec4V6xlK5USBInAfRT+kBgAA">
+<XPD:ATTR name="Name" type="string">Appender</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">interface</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">tSxGyrwfEkSgp1EcheSXaAAA</XPD:REF>
+<XPD:REF name="Views[1]">m+f/Nz96gEqfQeHGgfAxjwAA</XPD:REF>
+<XPD:REF name="Views[2]">ViAxcLeYxEC/QDB9dCuwagAA</XPD:REF>
+<XPD:REF name="Views[3]">gvxeAhX+WkGcvqw6KjlA7wAA</XPD:REF>
+<XPD:ATTR name="#ClientDependencies" type="integer">1</XPD:ATTR>
+<XPD:REF name="ClientDependencies[0]">kjMmekdMhUCZp7nT1+7m5QAA</XPD:REF>
+<XPD:ATTR name="#SupplierDependencies" type="integer">2</XPD:ATTR>
+<XPD:REF name="SupplierDependencies[0]">MLMgV5lk30+73KeQUlkJ1AAA</XPD:REF>
+<XPD:REF name="SupplierDependencies[1]">kjMmekdMhUCZp7nT1+7m5QAA</XPD:REF>
+<XPD:ATTR name="#Operations" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Operations[0]" type="UMLOperation" guid="FRx7C/jgm0uUQ2KJbSES0QAA">
+<XPD:ATTR name="Name" type="string">doAppend</XPD:ATTR>
+<XPD:REF name="Owner">Ec4V6xlK5USBInAfRT+kBgAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="HEOzMeB7hUCVhMMCFiMU/QAA">
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">void</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">FRx7C/jgm0uUQ2KJbSES0QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="/QxGe2nRTke4OPZr6B8DjwAA">
+<XPD:ATTR name="Name" type="string">E event</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">FRx7C/jgm0uUQ2KJbSES0QAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[5]" type="UMLClass" guid="wrUqRmysaUaTNG+EIldTAgAA">
+<XPD:ATTR name="Name" type="string">Lee, Jangwoo</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[6]" type="UMLClass" guid="R4ueGs13U0uU7uA7GfQuwgAA">
+<XPD:ATTR name="Name" type="string">Lee, Minkyu</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[7]" type="UMLClass" guid="cZJpDMIhLkaN+6380nTjCgAA">
+<XPD:ATTR name="Name" type="string">Lim, Heejin</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[8]" type="UMLInterface" guid="KkLGJmfcO0y7keuSLh3xpQAA">
+<XPD:ATTR name="Name" type="string">Bae, Rankyoung1</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[9]" type="UMLClass" guid="rzT262Z1jEeiLPfjq8YXAQAA">
+<XPD:ATTR name="Name" type="string">OutputStreamAppender</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">NaiNuZ1qLUu+5nZq2pgoJgAA</XPD:REF>
+<XPD:REF name="Views[1]">H/1viIm6yE20XaYIV5XQmgAA</XPD:REF>
+<XPD:REF name="Views[2]">/LiIyuskqE6jkbei5roLSgAA</XPD:REF>
+<XPD:REF name="Views[3]">LFUOQyCzKkODyDltdenqSQAA</XPD:REF>
+<XPD:ATTR name="#Generalizations" type="integer">1</XPD:ATTR>
+<XPD:REF name="Generalizations[0]">iGZQWONRSkmUZXwA2ctTYAAA</XPD:REF>
+<XPD:ATTR name="#Specializations" type="integer">2</XPD:ATTR>
+<XPD:REF name="Specializations[0]">AjD3odwWRkqn7DLLtsqSMQAA</XPD:REF>
+<XPD:REF name="Specializations[1]">DwI/SvxrPEa+xlJeUNknVQAA</XPD:REF>
+<XPD:ATTR name="#Operations" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="Operations[0]" type="UMLOperation" guid="Y/8ny1CDlUmGw7XO+p1IVAAA">
+<XPD:ATTR name="Name" type="string">setOutputStream</XPD:ATTR>
+<XPD:REF name="Owner">rzT262Z1jEeiLPfjq8YXAQAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="o7mxtv1VFUuGMzTZ/PzpJQAA">
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">void</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">Y/8ny1CDlUmGw7XO+p1IVAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="WiQnBPlZNUKAb1kDr8rYMAAA">
+<XPD:ATTR name="Name" type="string">OutputStream</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">Y/8ny1CDlUmGw7XO+p1IVAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:ATTR name="#Associations" type="integer">2</XPD:ATTR>
+<XPD:REF name="Associations[0]">CNBYSz/4s0OUBwR3Ujj7qAAA</XPD:REF>
+<XPD:REF name="Associations[1]">KNPa5jL8m0SnxCPJDiLPEwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[10]" type="UMLClass" guid="xVL+I0ePyEKePe2ybmIZqQAA">
+<XPD:ATTR name="Name" type="string">UnsynchronizedAppenderBase</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">82N1NUXIMU2s0JVvIgA33wAA</XPD:REF>
+<XPD:REF name="Views[1]">MbkisNcJq06fy8rfNf//qgAA</XPD:REF>
+<XPD:REF name="Views[2]">bHWlSSp0L0KsF9iS2K/VuAAA</XPD:REF>
+<XPD:REF name="Views[3]">A3o0HBZQP0+GUAIDarVM5AAA</XPD:REF>
+<XPD:ATTR name="#ClientDependencies" type="integer">1</XPD:ATTR>
+<XPD:REF name="ClientDependencies[0]">MLMgV5lk30+73KeQUlkJ1AAA</XPD:REF>
+<XPD:ATTR name="#Generalizations" type="integer">1</XPD:ATTR>
+<XPD:REF name="Generalizations[0]">mt8sHMuW6k6vvkswchHN9AAA</XPD:REF>
+<XPD:ATTR name="#Specializations" type="integer">2</XPD:ATTR>
+<XPD:REF name="Specializations[0]">mt8sHMuW6k6vvkswchHN9AAA</XPD:REF>
+<XPD:REF name="Specializations[1]">iGZQWONRSkmUZXwA2ctTYAAA</XPD:REF>
+<XPD:ATTR name="#Operations" type="integer">4</XPD:ATTR>
+<XPD:OBJ name="Operations[0]" type="UMLOperation" guid="QrizX1w8Uk+lWkr80819WAAA">
+<XPD:ATTR name="Name" type="string">doAppend</XPD:ATTR>
+<XPD:REF name="Owner">xVL+I0ePyEKePe2ybmIZqQAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="i3SFY3XjzkqfjCdeRItB0AAA">
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">void</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">QrizX1w8Uk+lWkr80819WAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="rcsyT8SmtEaJWAgOu29ifgAA">
+<XPD:ATTR name="Name" type="string">E event</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">QrizX1w8Uk+lWkr80819WAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[1]" type="UMLOperation" guid="G5EvR3IAqUWyIUSQT5iKfAAA">
+<XPD:ATTR name="Name" type="string">append</XPD:ATTR>
+<XPD:ATTR name="Visibility" type="UMLVisibilityKind">vkProtected</XPD:ATTR>
+<XPD:REF name="Owner">xVL+I0ePyEKePe2ybmIZqQAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="BZo+omwID0Op8lvSMhrmCAAA">
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">void</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">G5EvR3IAqUWyIUSQT5iKfAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="0mhi1Re0mUaekyTApQtYKgAA">
+<XPD:ATTR name="Name" type="string">E event</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">G5EvR3IAqUWyIUSQT5iKfAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[2]" type="UMLOperation" guid="noZlW3WOpUSNYP7MIP2dIAAA">
+<XPD:ATTR name="Name" type="string">addFilter</XPD:ATTR>
+<XPD:REF name="Owner">xVL+I0ePyEKePe2ybmIZqQAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="7JBY4nyhIES1n0jpwFzs0wAA">
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">void</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">noZlW3WOpUSNYP7MIP2dIAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="Zd/8hSZIgUuOnnlNuMOW3QAA">
+<XPD:ATTR name="Name" type="string">Filter<E> filter</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">noZlW3WOpUSNYP7MIP2dIAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="Operations[3]" type="UMLOperation" guid="+Hda0J6VTEGM7V6+m3aW7QAA">
+<XPD:ATTR name="Name" type="string">getFilterChainDecision</XPD:ATTR>
+<XPD:REF name="Owner">xVL+I0ePyEKePe2ybmIZqQAA</XPD:REF>
+<XPD:ATTR name="#Parameters" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Parameters[0]" type="UMLParameter" guid="b7Oh8zbH6kKEeryzkMlLQgAA">
+<XPD:ATTR name="DirectionKind" type="UMLParameterDirectionKind">pdkReturn</XPD:ATTR>
+<XPD:ATTR name="TypeExpression" type="string">FilterReply</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">+Hda0J6VTEGM7V6+m3aW7QAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Parameters[1]" type="UMLParameter" guid="QFIz2saC3kK9QRns9gVVIwAA">
+<XPD:ATTR name="Name" type="string">E event</XPD:ATTR>
+<XPD:REF name="BehavioralFeature">+Hda0J6VTEGM7V6+m3aW7QAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[11]" type="UMLClass" guid="yqvs3sZ9DUGqcZqP0JhEYQAA">
+<XPD:ATTR name="Name" type="string">ConsoleAppender</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">uk+yKXVJ4kGbJp9tS5jKTwAA</XPD:REF>
+<XPD:REF name="Views[1]">nH6UBhoeX0KbQRIkAzLiWAAA</XPD:REF>
+<XPD:REF name="Views[2]">Jb94kigpgUqu4dlcc+CGdAAA</XPD:REF>
+<XPD:REF name="Views[3]">QxduxAxohEmCZQGHeQsZcgAA</XPD:REF>
+<XPD:ATTR name="#Generalizations" type="integer">3</XPD:ATTR>
+<XPD:REF name="Generalizations[0]">KECSr2IcSEKuUekqxWFfQQAA</XPD:REF>
+<XPD:REF name="Generalizations[1]">jfTGxiHUzUynYKDudsAtlgAA</XPD:REF>
+<XPD:REF name="Generalizations[2]">AjD3odwWRkqn7DLLtsqSMQAA</XPD:REF>
+<XPD:ATTR name="#Specializations" type="integer">2</XPD:ATTR>
+<XPD:REF name="Specializations[0]">KECSr2IcSEKuUekqxWFfQQAA</XPD:REF>
+<XPD:REF name="Specializations[1]">jfTGxiHUzUynYKDudsAtlgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[12]" type="UMLRealization" guid="MLMgV5lk30+73KeQUlkJ1AAA">
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:REF name="Client">xVL+I0ePyEKePe2ybmIZqQAA</XPD:REF>
+<XPD:REF name="Supplier">Ec4V6xlK5USBInAfRT+kBgAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">lL0hvfNl1UCp0ZckmzYqAAAA</XPD:REF>
+<XPD:REF name="Views[1]">R+yIkrw1xkGRRmxo6cIv7AAA</XPD:REF>
+<XPD:REF name="Views[2]">MHt2cHh8nkq4xztkXeNA1AAA</XPD:REF>
+<XPD:REF name="Views[3]">1cFzyVYsZUexhz9n3LRU9AAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[13]" type="UMLRealization" guid="kjMmekdMhUCZp7nT1+7m5QAA">
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:REF name="Client">Ec4V6xlK5USBInAfRT+kBgAA</XPD:REF>
+<XPD:REF name="Supplier">Ec4V6xlK5USBInAfRT+kBgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[14]" type="UMLGeneralization" guid="mt8sHMuW6k6vvkswchHN9AAA">
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:REF name="Child">xVL+I0ePyEKePe2ybmIZqQAA</XPD:REF>
+<XPD:REF name="Parent">xVL+I0ePyEKePe2ybmIZqQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[15]" type="UMLGeneralization" guid="iGZQWONRSkmUZXwA2ctTYAAA">
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:REF name="Child">rzT262Z1jEeiLPfjq8YXAQAA</XPD:REF>
+<XPD:REF name="Parent">xVL+I0ePyEKePe2ybmIZqQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">fqotcKjEKUu0dHy5krCbbgAA</XPD:REF>
+<XPD:REF name="Views[1]">a5TKNXnsu0Cm1O3vWK2A5QAA</XPD:REF>
+<XPD:REF name="Views[2]">lfapsg0nvkOzLtKq21jKcQAA</XPD:REF>
+<XPD:REF name="Views[3]">J/CqIqCm4k64OiOc5XyUFgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[16]" type="UMLGeneralization" guid="KECSr2IcSEKuUekqxWFfQQAA">
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:REF name="Child">yqvs3sZ9DUGqcZqP0JhEYQAA</XPD:REF>
+<XPD:REF name="Parent">yqvs3sZ9DUGqcZqP0JhEYQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[17]" type="UMLGeneralization" guid="jfTGxiHUzUynYKDudsAtlgAA">
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:REF name="Child">yqvs3sZ9DUGqcZqP0JhEYQAA</XPD:REF>
+<XPD:REF name="Parent">yqvs3sZ9DUGqcZqP0JhEYQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[18]" type="UMLGeneralization" guid="AjD3odwWRkqn7DLLtsqSMQAA">
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:REF name="Child">yqvs3sZ9DUGqcZqP0JhEYQAA</XPD:REF>
+<XPD:REF name="Parent">rzT262Z1jEeiLPfjq8YXAQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">Byj7ulJD9UmN+tawKGwCEgAA</XPD:REF>
+<XPD:REF name="Views[1]">HQiDhC6IA0iqlMhf1tdcJQAA</XPD:REF>
+<XPD:REF name="Views[2]">npCChlHvbECPkeBWStHdGwAA</XPD:REF>
+<XPD:REF name="Views[3]">DNi8lqQWi0GHkNrHlB+wdAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[19]" type="UMLClass" guid="fbO+5cdSPEmSXuXSqE8gXgAA">
+<XPD:ATTR name="Name" type="string">FileAppender</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">umRYCn2dek6PVCutQ7EHjgAA</XPD:REF>
+<XPD:REF name="Views[1]">XJMRRQ4IvEKN76PkDbMKOQAA</XPD:REF>
+<XPD:REF name="Views[2]">wZmHw439VE+zuefCYQQqVAAA</XPD:REF>
+<XPD:REF name="Views[3]">PHqgEBQhpEmlVKbjkRedkAAA</XPD:REF>
+<XPD:ATTR name="#Generalizations" type="integer">1</XPD:ATTR>
+<XPD:REF name="Generalizations[0]">DwI/SvxrPEa+xlJeUNknVQAA</XPD:REF>
+<XPD:ATTR name="#Specializations" type="integer">1</XPD:ATTR>
+<XPD:REF name="Specializations[0]">MAm8gr3YDE+lxocsUB9afAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[20]" type="UMLGeneralization" guid="DwI/SvxrPEa+xlJeUNknVQAA">
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:REF name="Child">fbO+5cdSPEmSXuXSqE8gXgAA</XPD:REF>
+<XPD:REF name="Parent">rzT262Z1jEeiLPfjq8YXAQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">xnvee9U5202YS/ztrwJSRAAA</XPD:REF>
+<XPD:REF name="Views[1]">oASzcKN58EuYmztjk4WiEwAA</XPD:REF>
+<XPD:REF name="Views[2]">O0OgQK6n40urO6JVc74njgAA</XPD:REF>
+<XPD:REF name="Views[3]">bgKTOidFkEeRLn6bk0KEEgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[21]" type="UMLClass" guid="V4xOMUpxokyB4fxrQNJPxQAA">
+<XPD:ATTR name="Name" type="string">RollingFileAppender</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">rHFGD6C9T0y5SMWPFgS09QAA</XPD:REF>
+<XPD:REF name="Views[1]">1hKuFZUojkuzeqX9AiWUlwAA</XPD:REF>
+<XPD:REF name="Views[2]">g+GUofZEmU2lEM1VL3vLIQAA</XPD:REF>
+<XPD:REF name="Views[3]">4HSOp+H3/ECJnOpzcIo3jwAA</XPD:REF>
+<XPD:ATTR name="#Generalizations" type="integer">1</XPD:ATTR>
+<XPD:REF name="Generalizations[0]">MAm8gr3YDE+lxocsUB9afAAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[22]" type="UMLClass" guid="F1lk6TogWUGfYFH4FvBLOAAA">
+<XPD:ATTR name="Name" type="string">Encoder</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">interface</XPD:ATTR>
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">0AQ8gdYUKk2Ms7nTdCyd3QAA</XPD:REF>
+<XPD:REF name="Views[1]">lyHSH0gj5USAm8DDiVvc1AAA</XPD:REF>
+<XPD:REF name="Views[2]">A7cLwlK4RESapHusUAalugAA</XPD:REF>
+<XPD:REF name="Views[3]">qQCEnWeXyUaictLrSH/4IgAA</XPD:REF>
+<XPD:ATTR name="#Associations" type="integer">2</XPD:ATTR>
+<XPD:REF name="Associations[0]">1RTpKQO+4U+uqZahckvNEwAA</XPD:REF>
+<XPD:REF name="Associations[1]">JFP7YnD8ak2COLWe8jfBSwAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[23]" type="UMLAssociation" guid="u9/9xY5vOU2kSfX9AmlMAwAA">
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="CNBYSz/4s0OUBwR3Ujj7qAAA">
+<XPD:REF name="Association">u9/9xY5vOU2kSfX9AmlMAwAA</XPD:REF>
+<XPD:REF name="Participant">rzT262Z1jEeiLPfjq8YXAQAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="1RTpKQO+4U+uqZahckvNEwAA">
+<XPD:ATTR name="Aggregation" type="UMLAggregationKind">akComposite</XPD:ATTR>
+<XPD:REF name="Association">u9/9xY5vOU2kSfX9AmlMAwAA</XPD:REF>
+<XPD:REF name="Participant">F1lk6TogWUGfYFH4FvBLOAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[24]" type="UMLAssociation" guid="kXyf6+RLrki8M9yh9qd9JwAA">
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">lMmxZJude0e4iK5TJK4KmwAA</XPD:REF>
+<XPD:REF name="Views[1]">Lpxx+3J+D0S223D5ODQq4wAA</XPD:REF>
+<XPD:REF name="Views[2]">rhfNbKEGWUaK9KPGeno2AAAA</XPD:REF>
+<XPD:REF name="Views[3]">5lfzJsxzLkS60zCpNz5+twAA</XPD:REF>
+<XPD:ATTR name="#Connections" type="integer">2</XPD:ATTR>
+<XPD:OBJ name="Connections[0]" type="UMLAssociationEnd" guid="JFP7YnD8ak2COLWe8jfBSwAA">
+<XPD:REF name="Association">kXyf6+RLrki8M9yh9qd9JwAA</XPD:REF>
+<XPD:REF name="Participant">F1lk6TogWUGfYFH4FvBLOAAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">G2JYoZaOKku0lwIKN7cKRQAA</XPD:REF>
+<XPD:REF name="Views[1]">h/GU+p9gHkyMIIzW5Tap4wAA</XPD:REF>
+<XPD:REF name="Views[2]">yN2upZx6REeZpBi/IRMnlgAA</XPD:REF>
+<XPD:REF name="Views[3]">4leicQixUEWISYBF6P8LSgAA</XPD:REF>
+</XPD:OBJ>
+<XPD:OBJ name="Connections[1]" type="UMLAssociationEnd" guid="KNPa5jL8m0SnxCPJDiLPEwAA">
+<XPD:ATTR name="Aggregation" type="UMLAggregationKind">akComposite</XPD:ATTR>
+<XPD:REF name="Association">kXyf6+RLrki8M9yh9qd9JwAA</XPD:REF>
+<XPD:REF name="Participant">rzT262Z1jEeiLPfjq8YXAQAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">w+U1pR05XkeMT1rnnS2TcgAA</XPD:REF>
+<XPD:REF name="Views[1]">Wzm+qJkDL0+jgE0ioVsNvwAA</XPD:REF>
+<XPD:REF name="Views[2]">MLngpvqsdU+i4Djdsali7wAA</XPD:REF>
+<XPD:REF name="Views[3]">ZVjULz2utUKwdUcoGweZkgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[25]" type="UMLGeneralization" guid="MAm8gr3YDE+lxocsUB9afAAA">
+<XPD:REF name="Namespace">dQlYoesWY0yxg2VJCxHxOQAA</XPD:REF>
+<XPD:REF name="Child">V4xOMUpxokyB4fxrQNJPxQAA</XPD:REF>
+<XPD:REF name="Parent">fbO+5cdSPEmSXuXSqE8gXgAA</XPD:REF>
+<XPD:ATTR name="#Views" type="integer">4</XPD:ATTR>
+<XPD:REF name="Views[0]">VGws4gb7FEGKDPIpXKW13QAA</XPD:REF>
+<XPD:REF name="Views[1]">2t9xQX0DaECER1G841x4ggAA</XPD:REF>
+<XPD:REF name="Views[2]">ZJ+e5yqWkkyJmgI5NCe9qQAA</XPD:REF>
+<XPD:REF name="Views[3]">uWFySM7Jq026r7z2lz9/TgAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[3]" type="UMLModel" guid="UTbE66PthkuXloDrctmmwwAA">
+<XPD:ATTR name="Name" type="string">Implementation Model</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">implementationModel</XPD:ATTR>
+<XPD:REF name="Namespace">JEGKOL0wwE6O2Emy29kFuwAA</XPD:REF>
+<XPD:ATTR name="#OwnedDiagrams" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="OwnedDiagrams[0]" type="UMLComponentDiagram" guid="UJbtRzsKuEa7sZAmr/tDGAAA">
+<XPD:ATTR name="Name" type="string">Main</XPD:ATTR>
+<XPD:REF name="DiagramOwner">UTbE66PthkuXloDrctmmwwAA</XPD:REF>
+<XPD:OBJ name="DiagramView" type="UMLComponentDiagramView" guid="vo5SIJcJIUWJz7mqomMr4wAA">
+<XPD:REF name="Diagram">UJbtRzsKuEa7sZAmr/tDGAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:ATTR name="#OwnedElements" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="OwnedElements[0]" type="UMLInterface" guid="naDG3jNwKEqkpiKwcQF/xgAA">
+<XPD:ATTR name="Name" type="string">dsd</XPD:ATTR>
+<XPD:REF name="Namespace">UTbE66PthkuXloDrctmmwwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[4]" type="UMLModel" guid="sbAEE91CXU+VbUQcRp4FwgAA">
+<XPD:ATTR name="Name" type="string">Deployment Model</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">deploymentModel</XPD:ATTR>
+<XPD:REF name="Namespace">JEGKOL0wwE6O2Emy29kFuwAA</XPD:REF>
+<XPD:ATTR name="#OwnedDiagrams" type="integer">1</XPD:ATTR>
+<XPD:OBJ name="OwnedDiagrams[0]" type="UMLDeploymentDiagram" guid="tzrsCrrbjka5umz88mdzIAAA">
+<XPD:ATTR name="Name" type="string">Main</XPD:ATTR>
+<XPD:REF name="DiagramOwner">sbAEE91CXU+VbUQcRp4FwgAA</XPD:REF>
+<XPD:OBJ name="DiagramView" type="UMLDeploymentDiagramView" guid="OlRAEhzdxkCw+mUnxs9v2wAA">
+<XPD:REF name="Diagram">tzrsCrrbjka5umz88mdzIAAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:OBJ>
+<XPD:OBJ name="OwnedElements[5]" type="UMLModel" guid="mC0A50UCikqRZT73f5NgTgAA">
+<XPD:ATTR name="Name" type="string">Analysis Model1</XPD:ATTR>
+<XPD:ATTR name="StereotypeProfile" type="string">UMLStandard</XPD:ATTR>
+<XPD:ATTR name="StereotypeName" type="string">analysisModel</XPD:ATTR>
+<XPD:REF name="Namespace">JEGKOL0wwE6O2Emy29kFuwAA</XPD:REF>
+</XPD:OBJ>
+</XPD:OBJ>
+</XPD:BODY>
+</XPD:PROJECT>
diff --git a/logback-site/src/site/resources/manual/images/chapters/appenders/appenderClassDiagram.jpg b/logback-site/src/site/resources/manual/images/chapters/appenders/appenderClassDiagram.jpg
new file mode 100644
index 0000000..cb65782
Binary files /dev/null and b/logback-site/src/site/resources/manual/images/chapters/appenders/appenderClassDiagram.jpg differ
diff --git a/logback-site/src/site/resources/manual/images/chapter4/dbAppenderLE.gif b/logback-site/src/site/resources/manual/images/chapters/appenders/dbAppenderLE.gif
similarity index 100%
rename from logback-site/src/site/resources/manual/images/chapter4/dbAppenderLE.gif
rename to logback-site/src/site/resources/manual/images/chapters/appenders/dbAppenderLE.gif
diff --git a/logback-site/src/site/resources/manual/images/chapter4/dbAppenderLEException.gif b/logback-site/src/site/resources/manual/images/chapters/appenders/dbAppenderLEException.gif
similarity index 100%
rename from logback-site/src/site/resources/manual/images/chapter4/dbAppenderLEException.gif
rename to logback-site/src/site/resources/manual/images/chapters/appenders/dbAppenderLEException.gif
diff --git a/logback-site/src/site/resources/manual/images/chapter4/dbAppenderLEProperty.gif b/logback-site/src/site/resources/manual/images/chapters/appenders/dbAppenderLEProperty.gif
similarity index 100%
rename from logback-site/src/site/resources/manual/images/chapter4/dbAppenderLEProperty.gif
rename to logback-site/src/site/resources/manual/images/chapters/appenders/dbAppenderLEProperty.gif
diff --git a/logback-site/src/site/resources/manual/images/chapter4/fileAppenderUML.png b/logback-site/src/site/resources/manual/images/chapters/appenders/fileAppenderUML.png
similarity index 100%
rename from logback-site/src/site/resources/manual/images/chapter4/fileAppenderUML.png
rename to logback-site/src/site/resources/manual/images/chapters/appenders/fileAppenderUML.png
diff --git a/logback-site/src/site/resources/manual/images/chapter4/smtpAppender1.jpg b/logback-site/src/site/resources/manual/images/chapters/appenders/smtpAppender1.jpg
similarity index 100%
rename from logback-site/src/site/resources/manual/images/chapter4/smtpAppender1.jpg
rename to logback-site/src/site/resources/manual/images/chapters/appenders/smtpAppender1.jpg
diff --git a/logback-site/src/site/resources/manual/images/chapter4/smtpAppender2.jpg b/logback-site/src/site/resources/manual/images/chapters/appenders/smtpAppender2.jpg
similarity index 100%
rename from logback-site/src/site/resources/manual/images/chapter4/smtpAppender2.jpg
rename to logback-site/src/site/resources/manual/images/chapters/appenders/smtpAppender2.jpg
diff --git a/logback-site/src/site/resources/manual/images/chapter6/filterChain.gif b/logback-site/src/site/resources/manual/images/chapters/filters/filterChain.gif
similarity index 100%
rename from logback-site/src/site/resources/manual/images/chapter6/filterChain.gif
rename to logback-site/src/site/resources/manual/images/chapters/filters/filterChain.gif
diff --git a/logback-site/src/site/resources/manual/images/chapter9/jconsole15_jetty.gif b/logback-site/src/site/resources/manual/images/chapters/jmxConfigurator/jconsole15_jetty.gif
similarity index 100%
rename from logback-site/src/site/resources/manual/images/chapter9/jconsole15_jetty.gif
rename to logback-site/src/site/resources/manual/images/chapters/jmxConfigurator/jconsole15_jetty.gif
diff --git a/logback-site/src/site/resources/manual/images/chapter9/jconsole15_tomcat.gif b/logback-site/src/site/resources/manual/images/chapters/jmxConfigurator/jconsole15_tomcat.gif
similarity index 100%
rename from logback-site/src/site/resources/manual/images/chapter9/jconsole15_tomcat.gif
rename to logback-site/src/site/resources/manual/images/chapters/jmxConfigurator/jconsole15_tomcat.gif
diff --git a/logback-site/src/site/resources/manual/images/chapter9/jmxConfigurator.gif b/logback-site/src/site/resources/manual/images/chapters/jmxConfigurator/jmxConfigurator.gif
similarity index 100%
rename from logback-site/src/site/resources/manual/images/chapter9/jmxConfigurator.gif
rename to logback-site/src/site/resources/manual/images/chapters/jmxConfigurator/jmxConfigurator.gif
diff --git a/logback-site/src/site/resources/manual/images/chapter9/multiple.gif b/logback-site/src/site/resources/manual/images/chapters/jmxConfigurator/multiple.gif
similarity index 100%
rename from logback-site/src/site/resources/manual/images/chapter9/multiple.gif
rename to logback-site/src/site/resources/manual/images/chapters/jmxConfigurator/multiple.gif
diff --git a/logback-site/src/site/resources/manual/images/chapter9/mx4j_jetty.gif b/logback-site/src/site/resources/manual/images/chapters/jmxConfigurator/mx4j_jetty.gif
similarity index 100%
rename from logback-site/src/site/resources/manual/images/chapter9/mx4j_jetty.gif
rename to logback-site/src/site/resources/manual/images/chapters/jmxConfigurator/mx4j_jetty.gif
diff --git a/logback-site/src/site/resources/manual/images/chapter9/mx4j_tomcat.gif b/logback-site/src/site/resources/manual/images/chapters/jmxConfigurator/mx4j_tomcat.gif
similarity index 100%
rename from logback-site/src/site/resources/manual/images/chapter9/mx4j_tomcat.gif
rename to logback-site/src/site/resources/manual/images/chapters/jmxConfigurator/mx4j_tomcat.gif
diff --git a/logback-site/src/site/resources/manual/images/chapter9/statusList.gif b/logback-site/src/site/resources/manual/images/chapters/jmxConfigurator/statusList.gif
similarity index 100%
rename from logback-site/src/site/resources/manual/images/chapter9/statusList.gif
rename to logback-site/src/site/resources/manual/images/chapters/jmxConfigurator/statusList.gif
-----------------------------------------------------------------------
Summary of changes:
.../java/ch/qos/logback/core/ConsoleAppender.java | 4 +-
.../java/ch/qos/logback/core/FileAppender.java | 17 +-
...iterAppender.java => OutputStreamAppender.java} | 19 +-
.../ch/qos/logback/core/WriterAppenderTest.java | 2 +-
.../logback/core/appender/DummyWriterAppender.java | 4 +-
.../main/java/chapters/appenders/ExitWoes1.java | 4 +-
.../main/java/chapters/appenders/ExitWoes2.java | 4 +-
logback-site/src/site/pages/manual/appenders.html | 163 +--
.../src/site/pages/manual/architecture.html | 21 +-
.../src/site/pages/manual/configuration.html | 314 +++---
logback-site/src/site/pages/manual/onJoran.html | 12 +
.../manual/images/chapters/appenders/appender.uml | 1179 ++++++++++++++++++++
.../manual/images/chapters/appenders/appender.~ml | 865 ++++++++++++++
.../chapters/appenders/appenderClassDiagram.jpg | Bin 0 -> 71199 bytes
.../appenders}/dbAppenderLE.gif | Bin 31272 -> 31272 bytes
.../appenders}/dbAppenderLEException.gif | Bin 3861 -> 3861 bytes
.../appenders}/dbAppenderLEProperty.gif | Bin 3820 -> 3820 bytes
.../appenders}/fileAppenderUML.png | Bin 6684 -> 6684 bytes
.../appenders}/smtpAppender1.jpg | Bin 226207 -> 226207 bytes
.../appenders}/smtpAppender2.jpg | Bin 244223 -> 244223 bytes
.../{chapter6 => chapters/filters}/filterChain.gif | Bin 1226 -> 1226 bytes
.../jmxConfigurator}/jconsole15_jetty.gif | Bin 9796 -> 9796 bytes
.../jmxConfigurator}/jconsole15_tomcat.gif | Bin 9741 -> 9741 bytes
.../jmxConfigurator}/jmxConfigurator.gif | Bin 33445 -> 33445 bytes
.../jmxConfigurator}/multiple.gif | Bin 22501 -> 22501 bytes
.../jmxConfigurator}/mx4j_jetty.gif | Bin 26973 -> 26973 bytes
.../jmxConfigurator}/mx4j_tomcat.gif | Bin 27657 -> 27657 bytes
.../jmxConfigurator}/statusList.gif | Bin 36223 -> 36223 bytes
28 files changed, 2318 insertions(+), 290 deletions(-)
rename logback-core/src/main/java/ch/qos/logback/core/{WriterAppender.java => OutputStreamAppender.java} (90%)
create mode 100644 logback-site/src/site/resources/manual/images/chapters/appenders/appender.uml
create mode 100644 logback-site/src/site/resources/manual/images/chapters/appenders/appender.~ml
create mode 100644 logback-site/src/site/resources/manual/images/chapters/appenders/appenderClassDiagram.jpg
rename logback-site/src/site/resources/manual/images/{chapter4 => chapters/appenders}/dbAppenderLE.gif (100%)
rename logback-site/src/site/resources/manual/images/{chapter4 => chapters/appenders}/dbAppenderLEException.gif (100%)
rename logback-site/src/site/resources/manual/images/{chapter4 => chapters/appenders}/dbAppenderLEProperty.gif (100%)
rename logback-site/src/site/resources/manual/images/{chapter4 => chapters/appenders}/fileAppenderUML.png (100%)
rename logback-site/src/site/resources/manual/images/{chapter4 => chapters/appenders}/smtpAppender1.jpg (100%)
rename logback-site/src/site/resources/manual/images/{chapter4 => chapters/appenders}/smtpAppender2.jpg (100%)
rename logback-site/src/site/resources/manual/images/{chapter6 => chapters/filters}/filterChain.gif (100%)
rename logback-site/src/site/resources/manual/images/{chapter9 => chapters/jmxConfigurator}/jconsole15_jetty.gif (100%)
rename logback-site/src/site/resources/manual/images/{chapter9 => chapters/jmxConfigurator}/jconsole15_tomcat.gif (100%)
rename logback-site/src/site/resources/manual/images/{chapter9 => chapters/jmxConfigurator}/jmxConfigurator.gif (100%)
rename logback-site/src/site/resources/manual/images/{chapter9 => chapters/jmxConfigurator}/multiple.gif (100%)
rename logback-site/src/site/resources/manual/images/{chapter9 => chapters/jmxConfigurator}/mx4j_jetty.gif (100%)
rename logback-site/src/site/resources/manual/images/{chapter9 => chapters/jmxConfigurator}/mx4j_tomcat.gif (100%)
rename logback-site/src/site/resources/manual/images/{chapter9 => chapters/jmxConfigurator}/statusList.gif (100%)
hooks/post-receive
--
Logback: the generic, reliable, fast and flexible logging framework.
1
0

[GIT] Logback: the generic, reliable, fast and flexible logging framework. branch, encoder, updated. v0.9.18-46-gbf22544
by git-noreply@pixie.qos.ch 23 Feb '10
by git-noreply@pixie.qos.ch 23 Feb '10
23 Feb '10
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Logback: the generic, reliable, fast and flexible logging framework.".
The branch, encoder has been updated
via bf2254414040e25408df3b469ea4b6decd01f304 (commit)
from de7d9343186256b18e4419302923ff024022e638 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=bf2254414040e25408df3b46…
http://github.com/ceki/logback/commit/bf2254414040e25408df3b469ea4b6decd01f…
commit bf2254414040e25408df3b469ea4b6decd01f304
Author: Ceki Gulcu <ceki(a)qos.ch>
Date: Tue Feb 23 23:58:56 2010 +0100
- chapter3 renamed to chapters.configuration
- FileAppender now takes an encoder and not a layout
diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/encoder/PatternLayoutEncoder.java b/logback-classic/src/main/java/ch/qos/logback/classic/encoder/PatternLayoutEncoder.java
index f5af9a6..a709655 100644
--- a/logback-classic/src/main/java/ch/qos/logback/classic/encoder/PatternLayoutEncoder.java
+++ b/logback-classic/src/main/java/ch/qos/logback/classic/encoder/PatternLayoutEncoder.java
@@ -1,3 +1,16 @@
+/**
+ * Logback: the reliable, generic, fast and flexible logging framework.
+ * Copyright (C) 1999-2010, QOS.ch. All rights reserved.
+ *
+ * This program and the accompanying materials are dual-licensed under either
+ * the terms of the Eclipse Public License v1.0 as published by the Eclipse
+ * Foundation
+ *
+ * or (per the licensee's choosing)
+ *
+ * under the terms of the GNU Lesser General Public License version 2.1 as
+ * published by the Free Software Foundation.
+ */
package ch.qos.logback.classic.encoder;
import ch.qos.logback.classic.PatternLayout;
diff --git a/logback-examples/src/main/java/chapters/configuration/additivityFlag.xml b/logback-examples/src/main/java/chapters/configuration/additivityFlag.xml
index 40e67c1..c5bd787 100644
--- a/logback-examples/src/main/java/chapters/configuration/additivityFlag.xml
+++ b/logback-examples/src/main/java/chapters/configuration/additivityFlag.xml
@@ -1,21 +1,22 @@
<configuration>
- <appender name="FILE"class="ch.qos.logback.core.FileAppender">
- <file>foo.log</file>
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>
- %date %level [%thread] %logger{10} [%file : %line] %msg%n
- </Pattern>
- </layout>
+ <appender name="FILE"
+ class="ch.qos.logback.core.FileAppender">
+ <file>foo.log</file>
+ <encoder>
+ <Pattern>
+ %date %level [%thread] %logger{10} [%file : %line] %msg%n
+ </Pattern>
+ </encoder>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
+ <encoder>
<Pattern>%msg%n</Pattern>
- </layout>
+ </encoder>
</appender>
- <logger name="chapter3.Foo" additivity="false">
+ <logger name="chapters.configuration.Foo" additivity="false">
<appender-ref ref="FILE" />
</logger>
diff --git a/logback-examples/src/main/java/chapters/configuration/contextName.xml b/logback-examples/src/main/java/chapters/configuration/contextName.xml
index adaf1ec..a8c7ba8 100644
--- a/logback-examples/src/main/java/chapters/configuration/contextName.xml
+++ b/logback-examples/src/main/java/chapters/configuration/contextName.xml
@@ -3,9 +3,9 @@
<contextName>myAppName</contextName>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
+ <encoder>
<Pattern>%d %contextName [%t] %level %logger{36} - %msg%n</Pattern>
- </layout>
+ </encoder>
</appender>
<root level="debug">
diff --git a/logback-examples/src/main/java/chapters/configuration/duplicate.xml b/logback-examples/src/main/java/chapters/configuration/duplicate.xml
index 7672e7a..057510b 100644
--- a/logback-examples/src/main/java/chapters/configuration/duplicate.xml
+++ b/logback-examples/src/main/java/chapters/configuration/duplicate.xml
@@ -2,14 +2,14 @@
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>
+ <encoder>
+ <pattern>
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
- </Pattern>
- </layout>
+ </pattern>
+ </encoder>
</appender>
- <logger name="chapter3">
+ <logger name="chapters.configuration">
<appender-ref ref="STDOUT" />
</logger>
diff --git a/logback-examples/src/main/java/chapters/configuration/includedConfig.xml b/logback-examples/src/main/java/chapters/configuration/includedConfig.xml
index 2e9a9a1..7096250 100644
--- a/logback-examples/src/main/java/chapters/configuration/includedConfig.xml
+++ b/logback-examples/src/main/java/chapters/configuration/includedConfig.xml
@@ -3,9 +3,11 @@
<included>
<appender name="includedConsole" class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
+ <!-- encoders are assigned by default the type
+ ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
+ <encoder>
<param name="Pattern" value="%d - %m%n" />
- </layout>
+ </encoder>
</appender>
</included>
\ No newline at end of file
diff --git a/logback-examples/src/main/java/chapters/configuration/insertFromJNDI.xml b/logback-examples/src/main/java/chapters/configuration/insertFromJNDI.xml
index a6fe61f..1a7f642 100644
--- a/logback-examples/src/main/java/chapters/configuration/insertFromJNDI.xml
+++ b/logback-examples/src/main/java/chapters/configuration/insertFromJNDI.xml
@@ -5,9 +5,11 @@
<contextName>${appName}</contextName>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%d %contextName %level %msg %logger{50}%n</Pattern>
- </layout>
+ <!-- encoders are assigned by default the type
+ ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
+ <encoder>
+ <pattern>%d %contextName %level %msg %logger{50}%n</pattern>
+ </encoder>
</appender>
<root level="DEBUG">
diff --git a/logback-examples/src/main/java/chapters/configuration/multiple.xml b/logback-examples/src/main/java/chapters/configuration/multiple.xml
index 50335eb..d764484 100644
--- a/logback-examples/src/main/java/chapters/configuration/multiple.xml
+++ b/logback-examples/src/main/java/chapters/configuration/multiple.xml
@@ -1,15 +1,17 @@
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>myApp.log</file>
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</Pattern>
- </layout>
+ <!-- encoders are assigned by default the type
+ ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
+ <encoder>
+ <pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
+ </encoder>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%msg%n</Pattern>
- </layout>
+ <encoder>
+ <pattern>%msg%n</pattern>
+ </encoder>
</appender>
<root level="debug">
diff --git a/logback-examples/src/main/java/chapters/configuration/onConsoleStatusListener.xml b/logback-examples/src/main/java/chapters/configuration/onConsoleStatusListener.xml
index 5d8ac87..ad2d8c5 100644
--- a/logback-examples/src/main/java/chapters/configuration/onConsoleStatusListener.xml
+++ b/logback-examples/src/main/java/chapters/configuration/onConsoleStatusListener.xml
@@ -5,11 +5,13 @@
<statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>
+ <!-- encoders are assigned by default the type
+ ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
+ <encoder>
+ <pattern>
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
- </Pattern>
- </layout>
+ </pattern>
+ </encoder>
</appender>
<root level="debug">
diff --git a/logback-examples/src/main/java/chapters/configuration/restricted.xml b/logback-examples/src/main/java/chapters/configuration/restricted.xml
index e696b38..19b06c3 100644
--- a/logback-examples/src/main/java/chapters/configuration/restricted.xml
+++ b/logback-examples/src/main/java/chapters/configuration/restricted.xml
@@ -2,18 +2,20 @@
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>myApp.log</file>
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</Pattern>
- </layout>
+ <!-- encoders are assigned by default the type
+ ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
+ <encoder>
+ <pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
+ </encoder>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%msg%n</Pattern>
- </layout>
+ <encoder>
+ <pattern>%msg%n</pattern>
+ </encoder>
</appender>
- <logger name="chapter3">
+ <logger name="chapters.configuration">
<appender-ref ref="FILE" />
</logger>
diff --git a/logback-examples/src/main/java/chapters/configuration/sample0.xml b/logback-examples/src/main/java/chapters/configuration/sample0.xml
index af6ab9f..b1c84c3 100644
--- a/logback-examples/src/main/java/chapters/configuration/sample0.xml
+++ b/logback-examples/src/main/java/chapters/configuration/sample0.xml
@@ -3,9 +3,11 @@
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
- </layout>
+ <!-- encoders are assigned by default the type
+ ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
+ <encoder>
+ <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
+ </encoder>
</appender>
<root level="debug">
diff --git a/logback-examples/src/main/java/chapters/configuration/sample1.xml b/logback-examples/src/main/java/chapters/configuration/sample1.xml
index 6a1612c..cbf6197 100644
--- a/logback-examples/src/main/java/chapters/configuration/sample1.xml
+++ b/logback-examples/src/main/java/chapters/configuration/sample1.xml
@@ -1,15 +1,17 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<configuration debug="true">
-
- <appender name="STDOUT"
- class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
- </layout>
- </appender>
-
- <root level="debug">
- <appender-ref ref="STDOUT" />
- </root>
-</configuration>
-
+<?xml version="1.0" encoding="UTF-8" ?>
+<configuration debug="true">
+
+ <appender name="STDOUT"
+ class="ch.qos.logback.core.ConsoleAppender">
+ <!-- encoders are assigned by default the type
+ ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
+ <encoder>
+ <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
+ </encoder>
+ </appender>
+
+ <root level="debug">
+ <appender-ref ref="STDOUT" />
+ </root>
+</configuration>
+
diff --git a/logback-examples/src/main/java/chapters/configuration/sample2.xml b/logback-examples/src/main/java/chapters/configuration/sample2.xml
index 5f12f63..2a00f36 100644
--- a/logback-examples/src/main/java/chapters/configuration/sample2.xml
+++ b/logback-examples/src/main/java/chapters/configuration/sample2.xml
@@ -2,15 +2,17 @@
<configuration>
<appender name="STDOUT"
- class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>
- %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
- </Pattern>
- </layout>
+ class="ch.qos.logback.core.ConsoleAppender">
+ <!-- encoders are assigned by default the type
+ ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
+ <encoder>
+ <pattern>
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+ </pattern>
+ </encoder>
</appender>
- <logger name="chapter3" level="INFO" />
+ <logger name="chapters.configuration" level="INFO" />
<!-- Strictly speaking, the level attribute is not necessary since -->
<!-- the level of the root level is set to DEBUG by default. -->
diff --git a/logback-examples/src/main/java/chapters/configuration/sample3.xml b/logback-examples/src/main/java/chapters/configuration/sample3.xml
index 874d80f..e19bfb4 100644
--- a/logback-examples/src/main/java/chapters/configuration/sample3.xml
+++ b/logback-examples/src/main/java/chapters/configuration/sample3.xml
@@ -2,17 +2,20 @@
<configuration>
<appender name="STDOUT"
- class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>
+ class="ch.qos.logback.core.ConsoleAppender">
+
+ <!-- encoders are assigned by default the type
+ ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
+ <encoder>
+ <pattern>
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
- </Pattern>
- </layout>
- </appender>
+ </pattern>
+ </encoder>
+ </appender>
- <logger name="chapter3" level="INFO" />
+ <logger name="chapters.configuration" level="INFO" />
- <logger name="chapter3.Foo" level="DEBUG" />
+ <logger name="chapters.configuration.Foo" level="DEBUG" />
<root level="DEBUG">
<appender-ref ref="STDOUT" />
diff --git a/logback-examples/src/main/java/chapters/configuration/sample4.xml b/logback-examples/src/main/java/chapters/configuration/sample4.xml
index c9873d5..a6886aa 100644
--- a/logback-examples/src/main/java/chapters/configuration/sample4.xml
+++ b/logback-examples/src/main/java/chapters/configuration/sample4.xml
@@ -3,14 +3,16 @@
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>
- %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
- </Pattern>
- </layout>
- </appender>
+ <!-- encoders are assigned by default the type
+ ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
+ <encoder>
+ <pattern>
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+ </pattern>
+ </encoder>
+ </appender>
- <logger name="chapter3" level="INFO" />
+ <logger name="chapters.configuration" level="INFO" />
<root level="OFF">
<appender-ref ref="STDOUT" />
diff --git a/logback-examples/src/main/java/chapters/configuration/scan1.xml b/logback-examples/src/main/java/chapters/configuration/scan1.xml
index 600b8e0..1c8ff0f 100644
--- a/logback-examples/src/main/java/chapters/configuration/scan1.xml
+++ b/logback-examples/src/main/java/chapters/configuration/scan1.xml
@@ -3,9 +3,11 @@
<configuration scan="true">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <layout>
- <Pattern>%d [%thread] %-5level %logger{36} - %msg%n</Pattern>
- </layout>
+ <!-- encoders are assigned by default the type
+ ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
+ <encoder>
+ <pattern>%d [%thread] %-5level %logger{36} - %msg%n</pattern>
+ </encoder>
</appender>
<root level="debug">
diff --git a/logback-examples/src/main/java/chapters/configuration/scan2.xml b/logback-examples/src/main/java/chapters/configuration/scan2.xml
index 24369f2..9c73997 100644
--- a/logback-examples/src/main/java/chapters/configuration/scan2.xml
+++ b/logback-examples/src/main/java/chapters/configuration/scan2.xml
@@ -3,9 +3,9 @@
<configuration scan="true" scanPeriod="30 seconds">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <layout>
- <Pattern>%d [%thread] %-5level %logger{36} - %msg%n</Pattern>
- </layout>
+ <encoder>
+ <pattern>%d [%thread] %-5level %logger{36} - %msg%n</pattern>
+ </encoder>
</appender>
<root level="debug">
diff --git a/logback-examples/src/main/java/chapters/configuration/variableSubstitution1.xml b/logback-examples/src/main/java/chapters/configuration/variableSubstitution1.xml
index ff6b80d..79543ee 100644
--- a/logback-examples/src/main/java/chapters/configuration/variableSubstitution1.xml
+++ b/logback-examples/src/main/java/chapters/configuration/variableSubstitution1.xml
@@ -4,9 +4,9 @@
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${USER_HOME}/myApp.log</file>
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%msg%n</Pattern>
- </layout>
+ <encoder>
+ <pattern>%msg%n</pattern>
+ </encoder>
</appender>
<root level="debug">
diff --git a/logback-examples/src/main/java/chapters/configuration/variableSubstitution2.xml b/logback-examples/src/main/java/chapters/configuration/variableSubstitution2.xml
index 5faa695..c2bc57a 100644
--- a/logback-examples/src/main/java/chapters/configuration/variableSubstitution2.xml
+++ b/logback-examples/src/main/java/chapters/configuration/variableSubstitution2.xml
@@ -2,9 +2,9 @@
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${USER_HOME}/myApp.log</file>
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%msg%n</Pattern>
- </layout>
+ <encoder>
+ <pattern>%msg%n</pattern>
+ </encoder>
</appender>
<root level="debug">
diff --git a/logback-examples/src/main/java/chapters/configuration/variableSubstitution3.xml b/logback-examples/src/main/java/chapters/configuration/variableSubstitution3.xml
index 481b477..10d9643 100644
--- a/logback-examples/src/main/java/chapters/configuration/variableSubstitution3.xml
+++ b/logback-examples/src/main/java/chapters/configuration/variableSubstitution3.xml
@@ -4,9 +4,9 @@
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${USER_HOME}/myApp.log</file>
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%msg%n</Pattern>
- </layout>
+ <encoder>
+ <pattern>%msg%n</pattern>
+ </encoder>
</appender>
<root level="debug">
diff --git a/logback-examples/src/main/java/chapters/configuration/variableSubstitution4.xml b/logback-examples/src/main/java/chapters/configuration/variableSubstitution4.xml
index 2c056d0..361eb57 100644
--- a/logback-examples/src/main/java/chapters/configuration/variableSubstitution4.xml
+++ b/logback-examples/src/main/java/chapters/configuration/variableSubstitution4.xml
@@ -4,9 +4,9 @@
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${destination}/myApp.log</file>
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%msg%n</Pattern>
- </layout>
+ <encoder>
+ <pattern>%msg%n</pattern>
+ </encoder>
</appender>
<root level="debug">
diff --git a/logback-site/src/site/pages/manual/configuration.html b/logback-site/src/site/pages/manual/configuration.html
index ae25f6e..b54ab09 100644
--- a/logback-site/src/site/pages/manual/configuration.html
+++ b/logback-site/src/site/pages/manual/configuration.html
@@ -240,9 +240,11 @@ public class Foo {
<pre class="prettyprint source"><configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
- </layout>
+ <!-- encoders are by default assigned the type
+ ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
+ <encoder>
+ <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
+ </encoder>
</appender>
<root level="debug">
@@ -331,9 +333,11 @@ public class Foo {
<configuration <b>debug="true"</b>>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
- </layout>
+ <!-- encoders are by default assigned the type
+ ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
+ <layout>
+ <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
+ </encoder>
</appender>
<root level="debug">
@@ -746,9 +750,11 @@ public class MyApp3 {
<pre class="prettyprint source"><configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
- </layout>
+ <!-- encoders are by default assigned the type
+ ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
+ <encoder>
+ <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
+ </encoder>
</appender>
<b><logger name="chapters.configuration" level="INFO"/></b>
@@ -779,15 +785,15 @@ public class MyApp3 {
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>
+ <encoder>
+ <pattern>
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
- </Pattern>
- </layout>
+ </pattern>
+ </encoder>
</appender>
- <b><logger name="chapters.configuration" level="INFO" />
- <logger name="chapters.configuration.Foo" level="DEBUG" /></b>
+ <b><logger name="chapters.configuration" level="INFO" /></b>
+ <b><logger name="chapters.configuration.Foo" level="DEBUG" /></b>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
@@ -859,11 +865,11 @@ public class MyApp3 {
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>
+ <encoder>
+ <pattern>
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
- </Pattern>
- </layout>
+ </pattern>
+ </encoder>
</appender>
<b><logger name="chapters.configuration" level="INFO" /></b>
@@ -967,21 +973,20 @@ public class MyApp3 {
<appender name="<b>FILE</b>" class="ch.qos.logback.core.FileAppender">
<file>myApp.log</file>
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</Pattern>
- </layout>
+ <encoder>
+ <pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
+ </encoder>
</appender>
- <appender name="<b>STDOUT</b>"
- class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%msg%n</Pattern>
- </layout>
+ <appender name="<b>STDOUT</b>" class="ch.qos.logback.core.ConsoleAppender">
+ <encoder>
+ <pattern>%msg%n</pattern>
+ </encoder>
</appender>
<root level="debug">
- <b><appender-ref ref="FILE" />
- <appender-ref ref="STDOUT" /></b>
+ <b><appender-ref ref="FILE" /></b>
+ <b><appender-ref ref="STDOUT" /></b>
</root>
</configuration></pre>
@@ -1015,9 +1020,9 @@ public class MyApp3 {
<pre class="prettyprint source"><configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
- </layout>
+ <encoder>
+ <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
+ </encoder>
</appender>
<logger name="chapters.configuration">
@@ -1062,15 +1067,15 @@ public class MyApp3 {
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>myApp.log</file>
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</Pattern>
- </layout>
+ <encoder>
+ <pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
+ </encoder>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%msg%n</Pattern>
- </layout>
+ <encoder>
+ <pattern>%msg%n</pattern>
+ </encoder>
</appender>
<logger name="chapters.configuration">
@@ -1102,15 +1107,15 @@ public class MyApp3 {
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>foo.log</file>
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%date %level [%thread] %logger{10} [%file : %line] %msg%n</Pattern>
- </layout>
+ <encoder>
+ <pattern>%date %level [%thread] %logger{10} [%file : %line] %msg%n</pattern>
+ </encoder>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%msg%n</Pattern>
- </layout>
+ <encoder>
+ <pattern>%msg%n</pattern>
+ </encoder>
</appender>
<logger name="chapters.configuration.Foo" <b>additivity="false"</b>>
@@ -1176,9 +1181,9 @@ public class MyApp3 {
<appender name="FILE"
class="ch.qos.logback.core.FileAppender">
<b><file>${USER_HOME}/myApp.log</file></b>
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%msg%n</Pattern>
- </layout>
+ <encoder>
+ <pattern>%msg%n</pattern>
+ </encoder>
</appender>
<root level="debug">
@@ -1204,9 +1209,9 @@ public class MyApp3 {
<appender name="FILE"
class="ch.qos.logback.core.FileAppender">
<b><file>${USER_HOME}/myApp.log</file></b>
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%msg%n</Pattern>
- </layout>
+ <encoder>
+ <pattern>%msg%n</pattern>
+ </encoder>
</appender>
<root level="debug">
@@ -1232,9 +1237,9 @@ public class MyApp3 {
<appender name="FILE"
class="ch.qos.logback.core.FileAppender">
<b><file>${USER_HOME}/myApp.log</file></b>
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%msg%n</Pattern>
- </layout>
+ <encoder>
+ <pattern>%msg%n</pattern>
+ </encoder>
</appender>
<root level="debug">
@@ -1264,9 +1269,9 @@ public class MyApp3 {
<appender name="FILE"
class="ch.qos.logback.core.FileAppender">
<b><file>${USER_HOME}/myApp.log</file></b>
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%msg%n</Pattern>
- </layout>
+ <encoder>
+ <pattern>%msg%n</pattern>
+ </encoder>
</appender>
<root level="debug">
@@ -1308,9 +1313,9 @@ fileName=myApp.log
<appender name="FILE"
class="ch.qos.logback.core.FileAppender">
<b><file>${destination}</file></b>
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%msg%n</Pattern>
- </layout>
+ <encoder>
+ <pattern>%msg%n</pattern>
+ </encoder>
</appender>
<root level="debug">
@@ -1363,9 +1368,9 @@ fileName=myApp.log
<pre class="source"><b class="green big"><included></b>
<appender name="includedConsole" class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>"%d - %m%n"</Pattern>
- </layout>
+ <encoder>
+ <pattern>"%d - %m%n"</pattern>
+ </encoder>
</appender>
<b class="green big"></included></b></pre>
@@ -1396,9 +1401,9 @@ fileName=myApp.log
<pre class="prettyprint source"><configuration>
<b><contextName>myAppName</contextName></b>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%d <b>%contextName</b> [%t] %level %logger{36} - %msg%n</Pattern>
- </layout>
+ <encoder>
+ <pattern>%d <b>%contextName</b> [%t] %level %logger{36} - %msg%n</pattern>
+ </encoder>
</appender>
<root level="debug">
@@ -1428,9 +1433,9 @@ fileName=myApp.log
<b><contextName><span class="green">${appName}</span></contextName></b>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
- <layout class="ch.qos.logback.classic.PatternLayout">
- <Pattern>%d %contextName %level %msg %logger{50}%n</Pattern>
- </layout>
+ <encoder>
+ <pattern>%d %contextName %level %msg %logger{50}%n</pattern>
+ </encoder>
</appender>
<root level="DEBUG">
-----------------------------------------------------------------------
Summary of changes:
.../classic/encoder/PatternLayoutEncoder.java | 13 ++
.../java/chapters/configuration/additivityFlag.xml | 21 ++--
.../java/chapters/configuration/contextName.xml | 4 +-
.../main/java/chapters/configuration/duplicate.xml | 10 +-
.../java/chapters/configuration/includedConfig.xml | 6 +-
.../java/chapters/configuration/insertFromJNDI.xml | 8 +-
.../main/java/chapters/configuration/multiple.xml | 14 +-
.../configuration/onConsoleStatusListener.xml | 10 +-
.../java/chapters/configuration/restricted.xml | 16 ++-
.../main/java/chapters/configuration/sample0.xml | 8 +-
.../main/java/chapters/configuration/sample1.xml | 32 +++--
.../main/java/chapters/configuration/sample2.xml | 16 ++-
.../main/java/chapters/configuration/sample3.xml | 19 ++-
.../main/java/chapters/configuration/sample4.xml | 16 ++-
.../src/main/java/chapters/configuration/scan1.xml | 8 +-
.../src/main/java/chapters/configuration/scan2.xml | 6 +-
.../configuration/variableSubstitution1.xml | 6 +-
.../configuration/variableSubstitution2.xml | 6 +-
.../configuration/variableSubstitution3.xml | 6 +-
.../configuration/variableSubstitution4.xml | 6 +-
.../src/site/pages/manual/configuration.html | 141 ++++++++++----------
21 files changed, 207 insertions(+), 165 deletions(-)
hooks/post-receive
--
Logback: the generic, reliable, fast and flexible logging framework.
1
0

[GIT] Logback: the generic, reliable, fast and flexible logging framework. branch, encoder, updated. v0.9.18-45-gde7d934
by git-noreply@pixie.qos.ch 23 Feb '10
by git-noreply@pixie.qos.ch 23 Feb '10
23 Feb '10
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Logback: the generic, reliable, fast and flexible logging framework.".
The branch, encoder has been updated
via de7d9343186256b18e4419302923ff024022e638 (commit)
from adae89397fcecee04c69f241db87427cc218d254 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=de7d9343186256b18e441930…
http://github.com/ceki/logback/commit/de7d9343186256b18e4419302923ff024022e…
commit de7d9343186256b18e4419302923ff024022e638
Author: Ceki Gulcu <ceki(a)qos.ch>
Date: Tue Feb 23 22:12:34 2010 +0100
- changing the way chapters are named in preparation for inserting a
chapter on Encoders. Naming chapters by their number was a bas idea...
diff --git a/logback-examples/src/main/java/chapter4/ConfigurationTester.java b/logback-examples/src/main/java/chapters/appenders/ConfigurationTester.java
similarity index 96%
rename from logback-examples/src/main/java/chapter4/ConfigurationTester.java
rename to logback-examples/src/main/java/chapters/appenders/ConfigurationTester.java
index 7403030..07ffcf4 100644
--- a/logback-examples/src/main/java/chapter4/ConfigurationTester.java
+++ b/logback-examples/src/main/java/chapters/appenders/ConfigurationTester.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter4;
+package chapters.appenders;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -21,7 +21,7 @@ import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.classic.joran.JoranConfigurator;
import ch.qos.logback.core.joran.spi.JoranException;
import ch.qos.logback.core.util.StatusPrinter;
-import chapter4.sub.sample.Bar;
+import chapters.appenders.sub.sample.Bar;
/**
*
diff --git a/logback-examples/src/main/java/chapter4/CountingConsoleAppender.java b/logback-examples/src/main/java/chapters/appenders/CountingConsoleAppender.java
similarity index 98%
rename from logback-examples/src/main/java/chapter4/CountingConsoleAppender.java
rename to logback-examples/src/main/java/chapters/appenders/CountingConsoleAppender.java
index 5e18f14..0766960 100644
--- a/logback-examples/src/main/java/chapter4/CountingConsoleAppender.java
+++ b/logback-examples/src/main/java/chapters/appenders/CountingConsoleAppender.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter4;
+package chapters.appenders;
import java.io.IOException;
diff --git a/logback-examples/src/main/java/chapter4/ExitWoes1.java b/logback-examples/src/main/java/chapters/appenders/ExitWoes1.java
similarity index 98%
rename from logback-examples/src/main/java/chapter4/ExitWoes1.java
rename to logback-examples/src/main/java/chapters/appenders/ExitWoes1.java
index e99234c..9641379 100644
--- a/logback-examples/src/main/java/chapter4/ExitWoes1.java
+++ b/logback-examples/src/main/java/chapters/appenders/ExitWoes1.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter4;
+package chapters.appenders;
import java.io.FileOutputStream;
import java.io.OutputStream;
diff --git a/logback-examples/src/main/java/chapter4/ExitWoes2.java b/logback-examples/src/main/java/chapters/appenders/ExitWoes2.java
similarity index 98%
rename from logback-examples/src/main/java/chapter4/ExitWoes2.java
rename to logback-examples/src/main/java/chapters/appenders/ExitWoes2.java
index 121e89a..09be353 100644
--- a/logback-examples/src/main/java/chapter4/ExitWoes2.java
+++ b/logback-examples/src/main/java/chapters/appenders/ExitWoes2.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter4;
+package chapters.appenders;
import java.io.FileOutputStream;
import java.io.OutputStream;
diff --git a/logback-examples/src/main/java/chapter4/IO.java b/logback-examples/src/main/java/chapters/appenders/IO.java
similarity index 99%
rename from logback-examples/src/main/java/chapter4/IO.java
rename to logback-examples/src/main/java/chapters/appenders/IO.java
index 3618774..cec7686 100644
--- a/logback-examples/src/main/java/chapter4/IO.java
+++ b/logback-examples/src/main/java/chapters/appenders/IO.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter4;
+package chapters.appenders;
import org.slf4j.Logger;
diff --git a/logback-examples/src/main/java/chapter4/conf/access/logback-DB.xml b/logback-examples/src/main/java/chapters/appenders/conf/access/logback-DB.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/conf/access/logback-DB.xml
rename to logback-examples/src/main/java/chapters/appenders/conf/access/logback-DB.xml
diff --git a/logback-examples/src/main/java/chapter4/conf/access/logback-SMTP.xml b/logback-examples/src/main/java/chapters/appenders/conf/access/logback-SMTP.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/conf/access/logback-SMTP.xml
rename to logback-examples/src/main/java/chapters/appenders/conf/access/logback-SMTP.xml
diff --git a/logback-examples/src/main/java/chapter4/conf/logback-Console.xml b/logback-examples/src/main/java/chapters/appenders/conf/logback-Console.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/conf/logback-Console.xml
rename to logback-examples/src/main/java/chapters/appenders/conf/logback-Console.xml
diff --git a/logback-examples/src/main/java/chapter4/conf/logback-HtmlToConsole.xml b/logback-examples/src/main/java/chapters/appenders/conf/logback-HtmlToConsole.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/conf/logback-HtmlToConsole.xml
rename to logback-examples/src/main/java/chapters/appenders/conf/logback-HtmlToConsole.xml
diff --git a/logback-examples/src/main/java/chapter4/conf/logback-JMSQueue.xml b/logback-examples/src/main/java/chapters/appenders/conf/logback-JMSQueue.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/conf/logback-JMSQueue.xml
rename to logback-examples/src/main/java/chapters/appenders/conf/logback-JMSQueue.xml
diff --git a/logback-examples/src/main/java/chapter4/conf/logback-JMSTopic.xml b/logback-examples/src/main/java/chapters/appenders/conf/logback-JMSTopic.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/conf/logback-JMSTopic.xml
rename to logback-examples/src/main/java/chapters/appenders/conf/logback-JMSTopic.xml
diff --git a/logback-examples/src/main/java/chapter4/conf/logback-MDC.xml b/logback-examples/src/main/java/chapters/appenders/conf/logback-MDC.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/conf/logback-MDC.xml
rename to logback-examples/src/main/java/chapters/appenders/conf/logback-MDC.xml
diff --git a/logback-examples/src/main/java/chapter4/conf/logback-PrudentTimeBasedRolling.xml b/logback-examples/src/main/java/chapters/appenders/conf/logback-PrudentTimeBasedRolling.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/conf/logback-PrudentTimeBasedRolling.xml
rename to logback-examples/src/main/java/chapters/appenders/conf/logback-PrudentTimeBasedRolling.xml
diff --git a/logback-examples/src/main/java/chapter4/conf/logback-RollingFixedWindow.xml b/logback-examples/src/main/java/chapters/appenders/conf/logback-RollingFixedWindow.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/conf/logback-RollingFixedWindow.xml
rename to logback-examples/src/main/java/chapters/appenders/conf/logback-RollingFixedWindow.xml
diff --git a/logback-examples/src/main/java/chapter4/conf/logback-RollingSizeBased.xml b/logback-examples/src/main/java/chapters/appenders/conf/logback-RollingSizeBased.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/conf/logback-RollingSizeBased.xml
rename to logback-examples/src/main/java/chapters/appenders/conf/logback-RollingSizeBased.xml
diff --git a/logback-examples/src/main/java/chapter4/conf/logback-RollingTimeBased.xml b/logback-examples/src/main/java/chapters/appenders/conf/logback-RollingTimeBased.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/conf/logback-RollingTimeBased.xml
rename to logback-examples/src/main/java/chapters/appenders/conf/logback-RollingTimeBased.xml
diff --git a/logback-examples/src/main/java/chapter4/conf/logback-SMTP.xml b/logback-examples/src/main/java/chapters/appenders/conf/logback-SMTP.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/conf/logback-SMTP.xml
rename to logback-examples/src/main/java/chapters/appenders/conf/logback-SMTP.xml
diff --git a/logback-examples/src/main/java/chapter4/conf/logback-SMTPWithHtml.xml b/logback-examples/src/main/java/chapters/appenders/conf/logback-SMTPWithHtml.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/conf/logback-SMTPWithHtml.xml
rename to logback-examples/src/main/java/chapters/appenders/conf/logback-SMTPWithHtml.xml
diff --git a/logback-examples/src/main/java/chapter4/conf/logback-fileAppender.xml b/logback-examples/src/main/java/chapters/appenders/conf/logback-fileAppender.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/conf/logback-fileAppender.xml
rename to logback-examples/src/main/java/chapters/appenders/conf/logback-fileAppender.xml
diff --git a/logback-examples/src/main/java/chapter4/conf/logback-syslog.xml b/logback-examples/src/main/java/chapters/appenders/conf/logback-syslog.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/conf/logback-syslog.xml
rename to logback-examples/src/main/java/chapters/appenders/conf/logback-syslog.xml
diff --git a/logback-examples/src/main/java/chapter4/conf/logback-timestamp.xml b/logback-examples/src/main/java/chapters/appenders/conf/logback-timestamp.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/conf/logback-timestamp.xml
rename to logback-examples/src/main/java/chapters/appenders/conf/logback-timestamp.xml
diff --git a/logback-examples/src/main/java/chapter4/conf/logbback-sizeAndTime.xml b/logback-examples/src/main/java/chapters/appenders/conf/logbback-sizeAndTime.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/conf/logbback-sizeAndTime.xml
rename to logback-examples/src/main/java/chapters/appenders/conf/logbback-sizeAndTime.xml
diff --git a/logback-examples/src/main/java/chapter4/countingConsole.xml b/logback-examples/src/main/java/chapters/appenders/countingConsole.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/countingConsole.xml
rename to logback-examples/src/main/java/chapters/appenders/countingConsole.xml
diff --git a/logback-examples/src/main/java/chapter4/db/append-and-share-with-jndi.xml b/logback-examples/src/main/java/chapters/appenders/db/append-and-share-with-jndi.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/db/append-and-share-with-jndi.xml
rename to logback-examples/src/main/java/chapters/appenders/db/append-and-share-with-jndi.xml
diff --git a/logback-examples/src/main/java/chapter4/db/append-toMySQL-with-datasource-and-pooling.xml b/logback-examples/src/main/java/chapters/appenders/db/append-toMySQL-with-datasource-and-pooling.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/db/append-toMySQL-with-datasource-and-pooling.xml
rename to logback-examples/src/main/java/chapters/appenders/db/append-toMySQL-with-datasource-and-pooling.xml
diff --git a/logback-examples/src/main/java/chapter4/db/append-toMySQL-with-datasource.xml b/logback-examples/src/main/java/chapters/appenders/db/append-toMySQL-with-datasource.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/db/append-toMySQL-with-datasource.xml
rename to logback-examples/src/main/java/chapters/appenders/db/append-toMySQL-with-datasource.xml
diff --git a/logback-examples/src/main/java/chapter4/db/append-toMySQL-with-driverManager.xml b/logback-examples/src/main/java/chapters/appenders/db/append-toMySQL-with-driverManager.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/db/append-toMySQL-with-driverManager.xml
rename to logback-examples/src/main/java/chapters/appenders/db/append-toMySQL-with-driverManager.xml
diff --git a/logback-examples/src/main/java/chapter4/db/append-with-c3p0.xml b/logback-examples/src/main/java/chapters/appenders/db/append-with-c3p0.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/db/append-with-c3p0.xml
rename to logback-examples/src/main/java/chapters/appenders/db/append-with-c3p0.xml
diff --git a/logback-examples/src/main/java/chapter4/db/append-with-datasource.xml b/logback-examples/src/main/java/chapters/appenders/db/append-with-datasource.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/db/append-with-datasource.xml
rename to logback-examples/src/main/java/chapters/appenders/db/append-with-datasource.xml
diff --git a/logback-examples/src/main/java/chapter4/db/append-with-drivermanager.xml b/logback-examples/src/main/java/chapters/appenders/db/append-with-drivermanager.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/db/append-with-drivermanager.xml
rename to logback-examples/src/main/java/chapters/appenders/db/append-with-drivermanager.xml
diff --git a/logback-examples/src/main/java/chapter4/db/append-with-pooled-datasource.xml b/logback-examples/src/main/java/chapters/appenders/db/append-with-pooled-datasource.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/db/append-with-pooled-datasource.xml
rename to logback-examples/src/main/java/chapters/appenders/db/append-with-pooled-datasource.xml
diff --git a/logback-examples/src/main/java/chapter4/mail/CounterBasedEvaluator.java b/logback-examples/src/main/java/chapters/appenders/mail/CounterBasedEvaluator.java
similarity index 97%
rename from logback-examples/src/main/java/chapter4/mail/CounterBasedEvaluator.java
rename to logback-examples/src/main/java/chapters/appenders/mail/CounterBasedEvaluator.java
index f55aaf8..9628bea 100644
--- a/logback-examples/src/main/java/chapter4/mail/CounterBasedEvaluator.java
+++ b/logback-examples/src/main/java/chapters/appenders/mail/CounterBasedEvaluator.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter4.mail;
+package chapters.appenders.mail;
import ch.qos.logback.core.boolex.EvaluationException;
import ch.qos.logback.core.boolex.EventEvaluator;
diff --git a/logback-examples/src/main/java/chapter4/mail/EMail.java b/logback-examples/src/main/java/chapters/appenders/mail/EMail.java
similarity index 98%
rename from logback-examples/src/main/java/chapter4/mail/EMail.java
rename to logback-examples/src/main/java/chapters/appenders/mail/EMail.java
index e592035..5ac9e05 100644
--- a/logback-examples/src/main/java/chapter4/mail/EMail.java
+++ b/logback-examples/src/main/java/chapters/appenders/mail/EMail.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter4.mail;
+package chapters.appenders.mail;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/logback-examples/src/main/java/chapter4/mail/Marked_EMail.java b/logback-examples/src/main/java/chapters/appenders/mail/Marked_EMail.java
similarity index 98%
rename from logback-examples/src/main/java/chapter4/mail/Marked_EMail.java
rename to logback-examples/src/main/java/chapters/appenders/mail/Marked_EMail.java
index 113eecd..bf7f44c 100644
--- a/logback-examples/src/main/java/chapter4/mail/Marked_EMail.java
+++ b/logback-examples/src/main/java/chapters/appenders/mail/Marked_EMail.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter4.mail;
+package chapters.appenders.mail;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/logback-examples/src/main/java/chapter4/mail/gmailSSL.xml b/logback-examples/src/main/java/chapters/appenders/mail/gmailSSL.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/mail/gmailSSL.xml
rename to logback-examples/src/main/java/chapters/appenders/mail/gmailSSL.xml
diff --git a/logback-examples/src/main/java/chapter4/mail/gmailSTARTTLS.xml b/logback-examples/src/main/java/chapters/appenders/mail/gmailSTARTTLS.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/mail/gmailSTARTTLS.xml
rename to logback-examples/src/main/java/chapters/appenders/mail/gmailSTARTTLS.xml
diff --git a/logback-examples/src/main/java/chapter4/mail/mail1.xml b/logback-examples/src/main/java/chapters/appenders/mail/mail1.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/mail/mail1.xml
rename to logback-examples/src/main/java/chapters/appenders/mail/mail1.xml
diff --git a/logback-examples/src/main/java/chapter4/mail/mail2.xml b/logback-examples/src/main/java/chapters/appenders/mail/mail2.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/mail/mail2.xml
rename to logback-examples/src/main/java/chapters/appenders/mail/mail2.xml
diff --git a/logback-examples/src/main/java/chapter4/mail/mail3.xml b/logback-examples/src/main/java/chapters/appenders/mail/mail3.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/mail/mail3.xml
rename to logback-examples/src/main/java/chapters/appenders/mail/mail3.xml
diff --git a/logback-examples/src/main/java/chapter4/mail/mailWithMarker.xml b/logback-examples/src/main/java/chapters/appenders/mail/mailWithMarker.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/mail/mailWithMarker.xml
rename to logback-examples/src/main/java/chapters/appenders/mail/mailWithMarker.xml
diff --git a/logback-examples/src/main/java/chapter10/SimpleConfigurator.java b/logback-examples/src/main/java/chapters/appenders/onJoran/SimpleConfigurator.java
similarity index 97%
rename from logback-examples/src/main/java/chapter10/SimpleConfigurator.java
rename to logback-examples/src/main/java/chapters/appenders/onJoran/SimpleConfigurator.java
index 398d72e..b715b60 100644
--- a/logback-examples/src/main/java/chapter10/SimpleConfigurator.java
+++ b/logback-examples/src/main/java/chapters/appenders/onJoran/SimpleConfigurator.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter10;
+package chapters.appenders.onJoran;
import java.util.List;
import java.util.Map;
diff --git a/logback-examples/src/main/java/chapter10/calculator/AddAction.java b/logback-examples/src/main/java/chapters/appenders/onJoran/calculator/AddAction.java
similarity index 97%
rename from logback-examples/src/main/java/chapter10/calculator/AddAction.java
rename to logback-examples/src/main/java/chapters/appenders/onJoran/calculator/AddAction.java
index 815ce63..3d6c7e2 100644
--- a/logback-examples/src/main/java/chapter10/calculator/AddAction.java
+++ b/logback-examples/src/main/java/chapters/appenders/onJoran/calculator/AddAction.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter10.calculator;
+package chapters.appenders.onJoran.calculator;
import java.util.EmptyStackException;
diff --git a/logback-examples/src/main/java/chapter10/calculator/Calculator1.java b/logback-examples/src/main/java/chapters/appenders/onJoran/calculator/Calculator1.java
similarity index 94%
rename from logback-examples/src/main/java/chapter10/calculator/Calculator1.java
rename to logback-examples/src/main/java/chapters/appenders/onJoran/calculator/Calculator1.java
index 5d44c18..dbe4fbf 100644
--- a/logback-examples/src/main/java/chapter10/calculator/Calculator1.java
+++ b/logback-examples/src/main/java/chapters/appenders/onJoran/calculator/Calculator1.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter10.calculator;
+package chapters.appenders.onJoran.calculator;
import java.util.HashMap;
import java.util.Map;
@@ -21,7 +21,7 @@ import ch.qos.logback.core.ContextBase;
import ch.qos.logback.core.joran.action.Action;
import ch.qos.logback.core.joran.spi.Pattern;
import ch.qos.logback.core.util.StatusPrinter;
-import chapter10.SimpleConfigurator;
+import chapters.appenders.onJoran.SimpleConfigurator;
/**
* This examples illustrates collaboration between multiple actions through the
diff --git a/logback-examples/src/main/java/chapter10/calculator/Calculator2.java b/logback-examples/src/main/java/chapters/appenders/onJoran/calculator/Calculator2.java
similarity index 95%
rename from logback-examples/src/main/java/chapter10/calculator/Calculator2.java
rename to logback-examples/src/main/java/chapters/appenders/onJoran/calculator/Calculator2.java
index 8b9acb0..9b04aad 100644
--- a/logback-examples/src/main/java/chapter10/calculator/Calculator2.java
+++ b/logback-examples/src/main/java/chapters/appenders/onJoran/calculator/Calculator2.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter10.calculator;
+package chapters.appenders.onJoran.calculator;
import java.util.HashMap;
import java.util.Map;
@@ -22,7 +22,7 @@ import ch.qos.logback.core.joran.action.Action;
import ch.qos.logback.core.joran.spi.JoranException;
import ch.qos.logback.core.joran.spi.Pattern;
import ch.qos.logback.core.util.StatusPrinter;
-import chapter10.SimpleConfigurator;
+import chapters.appenders.onJoran.SimpleConfigurator;
/**
diff --git a/logback-examples/src/main/java/chapter10/calculator/ComputationAction1.java b/logback-examples/src/main/java/chapters/appenders/onJoran/calculator/ComputationAction1.java
similarity index 97%
rename from logback-examples/src/main/java/chapter10/calculator/ComputationAction1.java
rename to logback-examples/src/main/java/chapters/appenders/onJoran/calculator/ComputationAction1.java
index 64b876f..7ea7ade 100644
--- a/logback-examples/src/main/java/chapter10/calculator/ComputationAction1.java
+++ b/logback-examples/src/main/java/chapters/appenders/onJoran/calculator/ComputationAction1.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter10.calculator;
+package chapters.appenders.onJoran.calculator;
diff --git a/logback-examples/src/main/java/chapter10/calculator/ComputationAction2.java b/logback-examples/src/main/java/chapters/appenders/onJoran/calculator/ComputationAction2.java
similarity index 98%
rename from logback-examples/src/main/java/chapter10/calculator/ComputationAction2.java
rename to logback-examples/src/main/java/chapters/appenders/onJoran/calculator/ComputationAction2.java
index 6f95b08..749aabe 100644
--- a/logback-examples/src/main/java/chapter10/calculator/ComputationAction2.java
+++ b/logback-examples/src/main/java/chapters/appenders/onJoran/calculator/ComputationAction2.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter10.calculator;
+package chapters.appenders.onJoran.calculator;
import java.util.Stack;
diff --git a/logback-examples/src/main/java/chapter10/calculator/LiteralAction.java b/logback-examples/src/main/java/chapters/appenders/onJoran/calculator/LiteralAction.java
similarity index 97%
rename from logback-examples/src/main/java/chapter10/calculator/LiteralAction.java
rename to logback-examples/src/main/java/chapters/appenders/onJoran/calculator/LiteralAction.java
index a994cbe..72f4859 100644
--- a/logback-examples/src/main/java/chapter10/calculator/LiteralAction.java
+++ b/logback-examples/src/main/java/chapters/appenders/onJoran/calculator/LiteralAction.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter10.calculator;
+package chapters.appenders.onJoran.calculator;
import org.xml.sax.Attributes;
diff --git a/logback-examples/src/main/java/chapter10/calculator/MultiplyAction.java b/logback-examples/src/main/java/chapters/appenders/onJoran/calculator/MultiplyAction.java
similarity index 97%
rename from logback-examples/src/main/java/chapter10/calculator/MultiplyAction.java
rename to logback-examples/src/main/java/chapters/appenders/onJoran/calculator/MultiplyAction.java
index c35d79a..89dfcc6 100644
--- a/logback-examples/src/main/java/chapter10/calculator/MultiplyAction.java
+++ b/logback-examples/src/main/java/chapters/appenders/onJoran/calculator/MultiplyAction.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter10.calculator;
+package chapters.appenders.onJoran.calculator;
import org.xml.sax.Attributes;
diff --git a/logback-examples/src/main/java/chapter10/calculator/calculator1.xml b/logback-examples/src/main/java/chapters/appenders/onJoran/calculator/calculator1.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter10/calculator/calculator1.xml
rename to logback-examples/src/main/java/chapters/appenders/onJoran/calculator/calculator1.xml
diff --git a/logback-examples/src/main/java/chapter10/calculator/calculator2.xml b/logback-examples/src/main/java/chapters/appenders/onJoran/calculator/calculator2.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter10/calculator/calculator2.xml
rename to logback-examples/src/main/java/chapters/appenders/onJoran/calculator/calculator2.xml
diff --git a/logback-examples/src/main/java/chapter10/calculator/calculator3.xml b/logback-examples/src/main/java/chapters/appenders/onJoran/calculator/calculator3.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter10/calculator/calculator3.xml
rename to logback-examples/src/main/java/chapters/appenders/onJoran/calculator/calculator3.xml
diff --git a/logback-examples/src/main/java/chapter10/calculator/readme.txt b/logback-examples/src/main/java/chapters/appenders/onJoran/calculator/readme.txt
similarity index 100%
rename from logback-examples/src/main/java/chapter10/calculator/readme.txt
rename to logback-examples/src/main/java/chapters/appenders/onJoran/calculator/readme.txt
diff --git a/logback-examples/src/main/java/chapter10/helloWorld/HelloWorld.java b/logback-examples/src/main/java/chapters/appenders/onJoran/helloWorld/HelloWorld.java
similarity index 93%
rename from logback-examples/src/main/java/chapter10/helloWorld/HelloWorld.java
rename to logback-examples/src/main/java/chapters/appenders/onJoran/helloWorld/HelloWorld.java
index d310da6..a23400e 100644
--- a/logback-examples/src/main/java/chapter10/helloWorld/HelloWorld.java
+++ b/logback-examples/src/main/java/chapters/appenders/onJoran/helloWorld/HelloWorld.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter10.helloWorld;
+package chapters.appenders.onJoran.helloWorld;
import java.util.HashMap;
import java.util.Map;
@@ -21,7 +21,7 @@ import ch.qos.logback.core.ContextBase;
import ch.qos.logback.core.joran.action.Action;
import ch.qos.logback.core.joran.spi.Pattern;
import ch.qos.logback.core.util.StatusPrinter;
-import chapter10.SimpleConfigurator;
+import chapters.appenders.onJoran.SimpleConfigurator;
/**
*
diff --git a/logback-examples/src/main/java/chapter10/helloWorld/HelloWorldAction.java b/logback-examples/src/main/java/chapters/appenders/onJoran/helloWorld/HelloWorldAction.java
similarity index 95%
rename from logback-examples/src/main/java/chapter10/helloWorld/HelloWorldAction.java
rename to logback-examples/src/main/java/chapters/appenders/onJoran/helloWorld/HelloWorldAction.java
index 9265bfc..6911df8 100644
--- a/logback-examples/src/main/java/chapter10/helloWorld/HelloWorldAction.java
+++ b/logback-examples/src/main/java/chapters/appenders/onJoran/helloWorld/HelloWorldAction.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter10.helloWorld;
+package chapters.appenders.onJoran.helloWorld;
import org.xml.sax.Attributes;
diff --git a/logback-examples/src/main/java/chapter10/helloWorld/hello.xml b/logback-examples/src/main/java/chapters/appenders/onJoran/helloWorld/hello.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter10/helloWorld/hello.xml
rename to logback-examples/src/main/java/chapters/appenders/onJoran/helloWorld/hello.xml
diff --git a/logback-examples/src/main/java/chapter10/helloWorld/readme.txt b/logback-examples/src/main/java/chapters/appenders/onJoran/helloWorld/readme.txt
similarity index 100%
rename from logback-examples/src/main/java/chapter10/helloWorld/readme.txt
rename to logback-examples/src/main/java/chapters/appenders/onJoran/helloWorld/readme.txt
diff --git a/logback-examples/src/main/java/chapter10/implicit/NOPAction.java b/logback-examples/src/main/java/chapters/appenders/onJoran/implicit/NOPAction.java
similarity index 95%
rename from logback-examples/src/main/java/chapter10/implicit/NOPAction.java
rename to logback-examples/src/main/java/chapters/appenders/onJoran/implicit/NOPAction.java
index 7860860..b5018b8 100644
--- a/logback-examples/src/main/java/chapter10/implicit/NOPAction.java
+++ b/logback-examples/src/main/java/chapters/appenders/onJoran/implicit/NOPAction.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter10.implicit;
+package chapters.appenders.onJoran.implicit;
import org.xml.sax.Attributes;
diff --git a/logback-examples/src/main/java/chapter10/implicit/PrintMe.java b/logback-examples/src/main/java/chapters/appenders/onJoran/implicit/PrintMe.java
similarity index 95%
rename from logback-examples/src/main/java/chapter10/implicit/PrintMe.java
rename to logback-examples/src/main/java/chapters/appenders/onJoran/implicit/PrintMe.java
index e56df58..1a190f5 100644
--- a/logback-examples/src/main/java/chapter10/implicit/PrintMe.java
+++ b/logback-examples/src/main/java/chapters/appenders/onJoran/implicit/PrintMe.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter10.implicit;
+package chapters.appenders.onJoran.implicit;
import java.util.ArrayList;
import java.util.HashMap;
@@ -24,7 +24,7 @@ import ch.qos.logback.core.joran.action.Action;
import ch.qos.logback.core.joran.action.ImplicitAction;
import ch.qos.logback.core.joran.spi.Pattern;
import ch.qos.logback.core.util.StatusPrinter;
-import chapter10.SimpleConfigurator;
+import chapters.appenders.onJoran.SimpleConfigurator;
/**
* This example illustrates the usage of implicit actions.
diff --git a/logback-examples/src/main/java/chapter10/implicit/PrintMeImplicitAction.java b/logback-examples/src/main/java/chapters/appenders/onJoran/implicit/PrintMeImplicitAction.java
similarity index 96%
rename from logback-examples/src/main/java/chapter10/implicit/PrintMeImplicitAction.java
rename to logback-examples/src/main/java/chapters/appenders/onJoran/implicit/PrintMeImplicitAction.java
index aad3067..3a473b2 100644
--- a/logback-examples/src/main/java/chapter10/implicit/PrintMeImplicitAction.java
+++ b/logback-examples/src/main/java/chapters/appenders/onJoran/implicit/PrintMeImplicitAction.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter10.implicit;
+package chapters.appenders.onJoran.implicit;
import org.xml.sax.Attributes;
diff --git a/logback-examples/src/main/java/chapter10/implicit/implicit1.xml b/logback-examples/src/main/java/chapters/appenders/onJoran/implicit/implicit1.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter10/implicit/implicit1.xml
rename to logback-examples/src/main/java/chapters/appenders/onJoran/implicit/implicit1.xml
diff --git a/logback-examples/src/main/java/chapter10/implicit/readme.txt b/logback-examples/src/main/java/chapters/appenders/onJoran/implicit/readme.txt
similarity index 100%
rename from logback-examples/src/main/java/chapter10/implicit/readme.txt
rename to logback-examples/src/main/java/chapters/appenders/onJoran/implicit/readme.txt
diff --git a/logback-examples/src/main/java/chapter10/newRule/NewRuleCalculator.java b/logback-examples/src/main/java/chapters/appenders/onJoran/newRule/NewRuleCalculator.java
similarity index 92%
rename from logback-examples/src/main/java/chapter10/newRule/NewRuleCalculator.java
rename to logback-examples/src/main/java/chapters/appenders/onJoran/newRule/NewRuleCalculator.java
index a1c6a82..8fe880f 100644
--- a/logback-examples/src/main/java/chapter10/newRule/NewRuleCalculator.java
+++ b/logback-examples/src/main/java/chapters/appenders/onJoran/newRule/NewRuleCalculator.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter10.newRule;
+package chapters.appenders.onJoran.newRule;
import java.util.HashMap;
import java.util.Map;
@@ -22,8 +22,8 @@ import ch.qos.logback.core.joran.action.Action;
import ch.qos.logback.core.joran.action.NewRuleAction;
import ch.qos.logback.core.joran.spi.Pattern;
import ch.qos.logback.core.util.StatusPrinter;
-import chapter10.SimpleConfigurator;
-import chapter10.calculator.ComputationAction1;
+import chapters.appenders.onJoran.SimpleConfigurator;
+import chapters.appenders.onJoran.calculator.ComputationAction1;
/**
* This example illustrates the usage of NewRuleAction which allows the Joran
diff --git a/logback-examples/src/main/java/chapter10/newRule/new-rule.xml b/logback-examples/src/main/java/chapters/appenders/onJoran/newRule/new-rule.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter10/newRule/new-rule.xml
rename to logback-examples/src/main/java/chapters/appenders/onJoran/newRule/new-rule.xml
diff --git a/logback-examples/src/main/java/chapter10/newRule/readme.txt b/logback-examples/src/main/java/chapters/appenders/onJoran/newRule/readme.txt
similarity index 100%
rename from logback-examples/src/main/java/chapter10/newRule/readme.txt
rename to logback-examples/src/main/java/chapters/appenders/onJoran/newRule/readme.txt
diff --git a/logback-examples/src/main/java/chapter4/sift/SiftExample.java b/logback-examples/src/main/java/chapters/appenders/sift/SiftExample.java
similarity index 97%
rename from logback-examples/src/main/java/chapter4/sift/SiftExample.java
rename to logback-examples/src/main/java/chapters/appenders/sift/SiftExample.java
index ec2f3c4..69227d2 100644
--- a/logback-examples/src/main/java/chapter4/sift/SiftExample.java
+++ b/logback-examples/src/main/java/chapters/appenders/sift/SiftExample.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter4.sift;
+package chapters.appenders.sift;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/logback-examples/src/main/java/chapter4/sift/access-siftingFile.xml b/logback-examples/src/main/java/chapters/appenders/sift/access-siftingFile.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/sift/access-siftingFile.xml
rename to logback-examples/src/main/java/chapters/appenders/sift/access-siftingFile.xml
diff --git a/logback-examples/src/main/java/chapter4/sift/byUserid.xml b/logback-examples/src/main/java/chapters/appenders/sift/byUserid.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/sift/byUserid.xml
rename to logback-examples/src/main/java/chapters/appenders/sift/byUserid.xml
diff --git a/logback-examples/src/main/java/chapter4/socket/SocketClient1.java b/logback-examples/src/main/java/chapters/appenders/socket/SocketClient1.java
similarity index 98%
rename from logback-examples/src/main/java/chapter4/socket/SocketClient1.java
rename to logback-examples/src/main/java/chapters/appenders/socket/SocketClient1.java
index d31e120..4c6bc2f 100644
--- a/logback-examples/src/main/java/chapter4/socket/SocketClient1.java
+++ b/logback-examples/src/main/java/chapters/appenders/socket/SocketClient1.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter4.socket;
+package chapters.appenders.socket;
import java.io.BufferedReader;
diff --git a/logback-examples/src/main/java/chapter4/socket/SocketClient2.java b/logback-examples/src/main/java/chapters/appenders/socket/SocketClient2.java
similarity index 98%
rename from logback-examples/src/main/java/chapter4/socket/SocketClient2.java
rename to logback-examples/src/main/java/chapters/appenders/socket/SocketClient2.java
index afc0378..53a0323 100644
--- a/logback-examples/src/main/java/chapter4/socket/SocketClient2.java
+++ b/logback-examples/src/main/java/chapters/appenders/socket/SocketClient2.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter4.socket;
+package chapters.appenders.socket;
import java.io.BufferedReader;
import java.io.InputStreamReader;
diff --git a/logback-examples/src/main/java/chapter4/socket/client1.xml b/logback-examples/src/main/java/chapters/appenders/socket/client1.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/socket/client1.xml
rename to logback-examples/src/main/java/chapters/appenders/socket/client1.xml
diff --git a/logback-examples/src/main/java/chapter4/socket/server1.xml b/logback-examples/src/main/java/chapters/appenders/socket/server1.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/socket/server1.xml
rename to logback-examples/src/main/java/chapters/appenders/socket/server1.xml
diff --git a/logback-examples/src/main/java/chapter4/socket/server2.xml b/logback-examples/src/main/java/chapters/appenders/socket/server2.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter4/socket/server2.xml
rename to logback-examples/src/main/java/chapters/appenders/socket/server2.xml
diff --git a/logback-examples/src/main/java/chapter4/sub/sample/Bar.java b/logback-examples/src/main/java/chapters/appenders/sub/sample/Bar.java
similarity index 95%
rename from logback-examples/src/main/java/chapter4/sub/sample/Bar.java
rename to logback-examples/src/main/java/chapters/appenders/sub/sample/Bar.java
index 6c23233..3bc335d 100644
--- a/logback-examples/src/main/java/chapter4/sub/sample/Bar.java
+++ b/logback-examples/src/main/java/chapters/appenders/sub/sample/Bar.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter4.sub.sample;
+package chapters.appenders.sub.sample;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/logback-examples/src/main/java/chapter2/Bar.java b/logback-examples/src/main/java/chapters/architecture/Bar.java
similarity index 95%
rename from logback-examples/src/main/java/chapter2/Bar.java
rename to logback-examples/src/main/java/chapters/architecture/Bar.java
index 146ead3..4f18b46 100644
--- a/logback-examples/src/main/java/chapter2/Bar.java
+++ b/logback-examples/src/main/java/chapters/architecture/Bar.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter2;
+package chapters.architecture;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/logback-examples/src/main/java/chapter2/HelloWorld2.java b/logback-examples/src/main/java/chapters/architecture/HelloWorld2.java
similarity index 87%
rename from logback-examples/src/main/java/chapter2/HelloWorld2.java
rename to logback-examples/src/main/java/chapters/architecture/HelloWorld2.java
index 127ad1f..3480847 100644
--- a/logback-examples/src/main/java/chapter2/HelloWorld2.java
+++ b/logback-examples/src/main/java/chapters/architecture/HelloWorld2.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter2;
+package chapters.architecture;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -21,7 +21,7 @@ import ch.qos.logback.classic.util.LoggerStatusPrinter;
public class HelloWorld2 {
public static void main(String[] args) {
- Logger logger = LoggerFactory.getLogger("chapter2.HelloWorld2");
+ Logger logger = LoggerFactory.getLogger("manual.architecture.HelloWorld2");
logger.debug("Hello world.");
LoggerStatusPrinter.printStatusInDefaultContext();
}
diff --git a/logback-examples/src/main/java/chapter2/MyAppWithConfigFile.java b/logback-examples/src/main/java/chapters/architecture/MyAppWithConfigFile.java
similarity index 97%
rename from logback-examples/src/main/java/chapter2/MyAppWithConfigFile.java
rename to logback-examples/src/main/java/chapters/architecture/MyAppWithConfigFile.java
index c47da68..4940b49 100644
--- a/logback-examples/src/main/java/chapter2/MyAppWithConfigFile.java
+++ b/logback-examples/src/main/java/chapters/architecture/MyAppWithConfigFile.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter2;
+package chapters.architecture;
//Import SLF4J classes.
import org.slf4j.Logger;
diff --git a/logback-examples/src/main/java/chapter2/sample-config-1.xml b/logback-examples/src/main/java/chapters/architecture/sample-config-1.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter2/sample-config-1.xml
rename to logback-examples/src/main/java/chapters/architecture/sample-config-1.xml
diff --git a/logback-examples/src/main/java/chapter2/sample-config-2.xml b/logback-examples/src/main/java/chapters/architecture/sample-config-2.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter2/sample-config-2.xml
rename to logback-examples/src/main/java/chapters/architecture/sample-config-2.xml
diff --git a/logback-examples/src/main/java/chapter2/sample-config-3.xml b/logback-examples/src/main/java/chapters/architecture/sample-config-3.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter2/sample-config-3.xml
rename to logback-examples/src/main/java/chapters/architecture/sample-config-3.xml
diff --git a/logback-examples/src/main/java/chapter3/AddStatusListenerApp.java b/logback-examples/src/main/java/chapters/configuration/AddStatusListenerApp.java
similarity index 97%
rename from logback-examples/src/main/java/chapter3/AddStatusListenerApp.java
rename to logback-examples/src/main/java/chapters/configuration/AddStatusListenerApp.java
index d67239b..736d06c 100644
--- a/logback-examples/src/main/java/chapter3/AddStatusListenerApp.java
+++ b/logback-examples/src/main/java/chapters/configuration/AddStatusListenerApp.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter3;
+package chapters.configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/logback-examples/src/main/java/chapter3/Foo.java b/logback-examples/src/main/java/chapters/configuration/Foo.java
similarity index 95%
rename from logback-examples/src/main/java/chapter3/Foo.java
rename to logback-examples/src/main/java/chapters/configuration/Foo.java
index cb4befc..1ff7abd 100644
--- a/logback-examples/src/main/java/chapter3/Foo.java
+++ b/logback-examples/src/main/java/chapters/configuration/Foo.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter3;
+package chapters.configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/logback-examples/src/main/java/chapter3/MyApp1.java b/logback-examples/src/main/java/chapters/configuration/MyApp1.java
similarity index 96%
rename from logback-examples/src/main/java/chapter3/MyApp1.java
rename to logback-examples/src/main/java/chapters/configuration/MyApp1.java
index 6fa82d5..7cf1506 100644
--- a/logback-examples/src/main/java/chapter3/MyApp1.java
+++ b/logback-examples/src/main/java/chapters/configuration/MyApp1.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter3;
+package chapters.configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/logback-examples/src/main/java/chapter3/MyApp2.java b/logback-examples/src/main/java/chapters/configuration/MyApp2.java
similarity index 97%
rename from logback-examples/src/main/java/chapter3/MyApp2.java
rename to logback-examples/src/main/java/chapters/configuration/MyApp2.java
index 5de4075..eab221b 100644
--- a/logback-examples/src/main/java/chapter3/MyApp2.java
+++ b/logback-examples/src/main/java/chapters/configuration/MyApp2.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter3;
+package chapters.configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/logback-examples/src/main/java/chapter3/MyApp3.java b/logback-examples/src/main/java/chapters/configuration/MyApp3.java
similarity index 98%
rename from logback-examples/src/main/java/chapter3/MyApp3.java
rename to logback-examples/src/main/java/chapters/configuration/MyApp3.java
index fa73aa1..2cc3199 100644
--- a/logback-examples/src/main/java/chapter3/MyApp3.java
+++ b/logback-examples/src/main/java/chapters/configuration/MyApp3.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter3;
+package chapters.configuration;
/**
* Demonstrates programmatic invocation of Joran.
diff --git a/logback-examples/src/main/java/chapter3/additivityFlag.xml b/logback-examples/src/main/java/chapters/configuration/additivityFlag.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter3/additivityFlag.xml
rename to logback-examples/src/main/java/chapters/configuration/additivityFlag.xml
diff --git a/logback-examples/src/main/java/chapter3/containingConfig.xml b/logback-examples/src/main/java/chapters/configuration/containingConfig.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter3/containingConfig.xml
rename to logback-examples/src/main/java/chapters/configuration/containingConfig.xml
diff --git a/logback-examples/src/main/java/chapter3/contextName.xml b/logback-examples/src/main/java/chapters/configuration/contextName.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter3/contextName.xml
rename to logback-examples/src/main/java/chapters/configuration/contextName.xml
diff --git a/logback-examples/src/main/java/chapter3/duplicate.xml b/logback-examples/src/main/java/chapters/configuration/duplicate.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter3/duplicate.xml
rename to logback-examples/src/main/java/chapters/configuration/duplicate.xml
diff --git a/logback-examples/src/main/java/chapter3/includedConfig.xml b/logback-examples/src/main/java/chapters/configuration/includedConfig.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter3/includedConfig.xml
rename to logback-examples/src/main/java/chapters/configuration/includedConfig.xml
diff --git a/logback-examples/src/main/java/chapter3/insertFromJNDI.xml b/logback-examples/src/main/java/chapters/configuration/insertFromJNDI.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter3/insertFromJNDI.xml
rename to logback-examples/src/main/java/chapters/configuration/insertFromJNDI.xml
diff --git a/logback-examples/src/main/java/chapter3/multiple.xml b/logback-examples/src/main/java/chapters/configuration/multiple.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter3/multiple.xml
rename to logback-examples/src/main/java/chapters/configuration/multiple.xml
diff --git a/logback-examples/src/main/java/chapter3/onConsoleStatusListener.xml b/logback-examples/src/main/java/chapters/configuration/onConsoleStatusListener.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter3/onConsoleStatusListener.xml
rename to logback-examples/src/main/java/chapters/configuration/onConsoleStatusListener.xml
diff --git a/logback-examples/src/main/java/chapter3/restricted.xml b/logback-examples/src/main/java/chapters/configuration/restricted.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter3/restricted.xml
rename to logback-examples/src/main/java/chapters/configuration/restricted.xml
diff --git a/logback-examples/src/main/java/chapter3/sample0.xml b/logback-examples/src/main/java/chapters/configuration/sample0.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter3/sample0.xml
rename to logback-examples/src/main/java/chapters/configuration/sample0.xml
diff --git a/logback-examples/src/main/java/chapter3/sample1.xml b/logback-examples/src/main/java/chapters/configuration/sample1.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter3/sample1.xml
rename to logback-examples/src/main/java/chapters/configuration/sample1.xml
diff --git a/logback-examples/src/main/java/chapter3/sample2.xml b/logback-examples/src/main/java/chapters/configuration/sample2.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter3/sample2.xml
rename to logback-examples/src/main/java/chapters/configuration/sample2.xml
diff --git a/logback-examples/src/main/java/chapter3/sample3.xml b/logback-examples/src/main/java/chapters/configuration/sample3.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter3/sample3.xml
rename to logback-examples/src/main/java/chapters/configuration/sample3.xml
diff --git a/logback-examples/src/main/java/chapter3/sample4.xml b/logback-examples/src/main/java/chapters/configuration/sample4.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter3/sample4.xml
rename to logback-examples/src/main/java/chapters/configuration/sample4.xml
diff --git a/logback-examples/src/main/java/chapter3/scan1.xml b/logback-examples/src/main/java/chapters/configuration/scan1.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter3/scan1.xml
rename to logback-examples/src/main/java/chapters/configuration/scan1.xml
diff --git a/logback-examples/src/main/java/chapter3/scan2.xml b/logback-examples/src/main/java/chapters/configuration/scan2.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter3/scan2.xml
rename to logback-examples/src/main/java/chapters/configuration/scan2.xml
diff --git a/logback-examples/src/main/java/chapter3/variableSubstitution1.xml b/logback-examples/src/main/java/chapters/configuration/variableSubstitution1.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter3/variableSubstitution1.xml
rename to logback-examples/src/main/java/chapters/configuration/variableSubstitution1.xml
diff --git a/logback-examples/src/main/java/chapter3/variableSubstitution2.xml b/logback-examples/src/main/java/chapters/configuration/variableSubstitution2.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter3/variableSubstitution2.xml
rename to logback-examples/src/main/java/chapters/configuration/variableSubstitution2.xml
diff --git a/logback-examples/src/main/java/chapter3/variableSubstitution3.xml b/logback-examples/src/main/java/chapters/configuration/variableSubstitution3.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter3/variableSubstitution3.xml
rename to logback-examples/src/main/java/chapters/configuration/variableSubstitution3.xml
diff --git a/logback-examples/src/main/java/chapter3/variableSubstitution4.xml b/logback-examples/src/main/java/chapters/configuration/variableSubstitution4.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter3/variableSubstitution4.xml
rename to logback-examples/src/main/java/chapters/configuration/variableSubstitution4.xml
diff --git a/logback-examples/src/main/java/chapter3/variables1.properties b/logback-examples/src/main/java/chapters/configuration/variables1.properties
similarity index 100%
rename from logback-examples/src/main/java/chapter3/variables1.properties
rename to logback-examples/src/main/java/chapters/configuration/variables1.properties
diff --git a/logback-examples/src/main/java/chapter3/variables2.properties b/logback-examples/src/main/java/chapters/configuration/variables2.properties
similarity index 100%
rename from logback-examples/src/main/java/chapter3/variables2.properties
rename to logback-examples/src/main/java/chapters/configuration/variables2.properties
diff --git a/logback-examples/src/main/java/chapter6/FilterEvents.java b/logback-examples/src/main/java/chapters/filters/FilterEvents.java
similarity index 98%
rename from logback-examples/src/main/java/chapter6/FilterEvents.java
rename to logback-examples/src/main/java/chapters/filters/FilterEvents.java
index a6658e0..232f889 100644
--- a/logback-examples/src/main/java/chapter6/FilterEvents.java
+++ b/logback-examples/src/main/java/chapters/filters/FilterEvents.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter6;
+package chapters.filters;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/logback-examples/src/main/java/chapter6/GoMDC.java b/logback-examples/src/main/java/chapters/filters/GoMDC.java
similarity index 98%
rename from logback-examples/src/main/java/chapter6/GoMDC.java
rename to logback-examples/src/main/java/chapters/filters/GoMDC.java
index 9ce9a27..3fef335 100644
--- a/logback-examples/src/main/java/chapter6/GoMDC.java
+++ b/logback-examples/src/main/java/chapters/filters/GoMDC.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter6;
+package chapters.filters;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/logback-examples/src/main/java/chapter6/SampleFilter.java b/logback-examples/src/main/java/chapters/filters/SampleFilter.java
similarity index 97%
rename from logback-examples/src/main/java/chapter6/SampleFilter.java
rename to logback-examples/src/main/java/chapters/filters/SampleFilter.java
index d70d280..f63e0ee 100644
--- a/logback-examples/src/main/java/chapter6/SampleFilter.java
+++ b/logback-examples/src/main/java/chapters/filters/SampleFilter.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter6;
+package chapters.filters;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.filter.Filter;
diff --git a/logback-examples/src/main/java/chapter6/SampleTurboFilter.java b/logback-examples/src/main/java/chapters/filters/SampleTurboFilter.java
similarity index 98%
rename from logback-examples/src/main/java/chapter6/SampleTurboFilter.java
rename to logback-examples/src/main/java/chapters/filters/SampleTurboFilter.java
index 9406840..c75ce45 100644
--- a/logback-examples/src/main/java/chapter6/SampleTurboFilter.java
+++ b/logback-examples/src/main/java/chapters/filters/SampleTurboFilter.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter6;
+package chapters.filters;
import org.slf4j.Marker;
import org.slf4j.MarkerFactory;
diff --git a/logback-examples/src/main/java/chapter6/accessEventEvaluator.xml b/logback-examples/src/main/java/chapters/filters/accessEventEvaluator.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter6/accessEventEvaluator.xml
rename to logback-examples/src/main/java/chapters/filters/accessEventEvaluator.xml
diff --git a/logback-examples/src/main/java/chapter6/accessEventEvaluator2.xml b/logback-examples/src/main/java/chapters/filters/accessEventEvaluator2.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter6/accessEventEvaluator2.xml
rename to logback-examples/src/main/java/chapters/filters/accessEventEvaluator2.xml
diff --git a/logback-examples/src/main/java/chapter6/basicConfiguration.xml b/logback-examples/src/main/java/chapters/filters/basicConfiguration.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter6/basicConfiguration.xml
rename to logback-examples/src/main/java/chapters/filters/basicConfiguration.xml
diff --git a/logback-examples/src/main/java/chapter6/basicEventEvaluator.xml b/logback-examples/src/main/java/chapters/filters/basicEventEvaluator.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter6/basicEventEvaluator.xml
rename to logback-examples/src/main/java/chapters/filters/basicEventEvaluator.xml
diff --git a/logback-examples/src/main/java/chapter6/duplicateMessage.xml b/logback-examples/src/main/java/chapters/filters/duplicateMessage.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter6/duplicateMessage.xml
rename to logback-examples/src/main/java/chapters/filters/duplicateMessage.xml
diff --git a/logback-examples/src/main/java/chapter6/evaluatorWithMatcher.xml b/logback-examples/src/main/java/chapters/filters/evaluatorWithMatcher.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter6/evaluatorWithMatcher.xml
rename to logback-examples/src/main/java/chapters/filters/evaluatorWithMatcher.xml
diff --git a/logback-examples/src/main/java/chapter6/levelFilterConfig.xml b/logback-examples/src/main/java/chapters/filters/levelFilterConfig.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter6/levelFilterConfig.xml
rename to logback-examples/src/main/java/chapters/filters/levelFilterConfig.xml
diff --git a/logback-examples/src/main/java/chapter6/mdcfilter.xml b/logback-examples/src/main/java/chapters/filters/mdcfilter.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter6/mdcfilter.xml
rename to logback-examples/src/main/java/chapters/filters/mdcfilter.xml
diff --git a/logback-examples/src/main/java/chapter6/sampleFilterConfig.xml b/logback-examples/src/main/java/chapters/filters/sampleFilterConfig.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter6/sampleFilterConfig.xml
rename to logback-examples/src/main/java/chapters/filters/sampleFilterConfig.xml
diff --git a/logback-examples/src/main/java/chapter6/sampleTurboFilterConfig.xml b/logback-examples/src/main/java/chapters/filters/sampleTurboFilterConfig.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter6/sampleTurboFilterConfig.xml
rename to logback-examples/src/main/java/chapters/filters/sampleTurboFilterConfig.xml
diff --git a/logback-examples/src/main/java/chapter6/thresholdFilterConfig.xml b/logback-examples/src/main/java/chapters/filters/thresholdFilterConfig.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter6/thresholdFilterConfig.xml
rename to logback-examples/src/main/java/chapters/filters/thresholdFilterConfig.xml
diff --git a/logback-examples/src/main/java/chapter6/turboFilters.xml b/logback-examples/src/main/java/chapters/filters/turboFilters.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter6/turboFilters.xml
rename to logback-examples/src/main/java/chapters/filters/turboFilters.xml
diff --git a/logback-examples/src/main/java/chapter1/HelloWorld1.java b/logback-examples/src/main/java/chapters/introduction/HelloWorld1.java
similarity index 85%
rename from logback-examples/src/main/java/chapter1/HelloWorld1.java
rename to logback-examples/src/main/java/chapters/introduction/HelloWorld1.java
index 10f2651..739aa7a 100644
--- a/logback-examples/src/main/java/chapter1/HelloWorld1.java
+++ b/logback-examples/src/main/java/chapters/introduction/HelloWorld1.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter1;
+package chapters.introduction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -20,7 +20,7 @@ public class HelloWorld1 {
public static void main(String[] args) {
- Logger logger = LoggerFactory.getLogger("chapter1.HelloWorld1");
+ Logger logger = LoggerFactory.getLogger("chapters.introduction.HelloWorld1");
logger.debug("Hello world.");
}
}
diff --git a/logback-examples/src/main/java/chapter1/HelloWorld2.java b/logback-examples/src/main/java/chapters/introduction/HelloWorld2.java
similarity index 88%
rename from logback-examples/src/main/java/chapter1/HelloWorld2.java
rename to logback-examples/src/main/java/chapters/introduction/HelloWorld2.java
index a67018f..e0e8216 100644
--- a/logback-examples/src/main/java/chapter1/HelloWorld2.java
+++ b/logback-examples/src/main/java/chapters/introduction/HelloWorld2.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter1;
+package chapters.introduction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -21,7 +21,7 @@ import ch.qos.logback.core.util.StatusPrinter;
public class HelloWorld2 {
public static void main(String[] args) {
- Logger logger = LoggerFactory.getLogger("chapter1.HelloWorld2");
+ Logger logger = LoggerFactory.getLogger("chapters.introduction.HelloWorld2");
logger.debug("Hello world.");
// print internal state
diff --git a/logback-examples/src/main/java/chapter5/CallerEvaluatorExample.java b/logback-examples/src/main/java/chapters/layouts/CallerEvaluatorExample.java
similarity index 98%
rename from logback-examples/src/main/java/chapter5/CallerEvaluatorExample.java
rename to logback-examples/src/main/java/chapters/layouts/CallerEvaluatorExample.java
index 2cd2dd5..87e2117 100644
--- a/logback-examples/src/main/java/chapter5/CallerEvaluatorExample.java
+++ b/logback-examples/src/main/java/chapters/layouts/CallerEvaluatorExample.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter5;
+package chapters.layouts;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/logback-examples/src/main/java/chapter5/ExceptionEvaluatorExample.java b/logback-examples/src/main/java/chapters/layouts/ExceptionEvaluatorExample.java
similarity index 98%
rename from logback-examples/src/main/java/chapter5/ExceptionEvaluatorExample.java
rename to logback-examples/src/main/java/chapters/layouts/ExceptionEvaluatorExample.java
index 6ba79bf..fac16d7 100644
--- a/logback-examples/src/main/java/chapter5/ExceptionEvaluatorExample.java
+++ b/logback-examples/src/main/java/chapters/layouts/ExceptionEvaluatorExample.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter5;
+package chapters.layouts;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/logback-examples/src/main/java/chapter5/MySampleConverter.java b/logback-examples/src/main/java/chapters/layouts/MySampleConverter.java
similarity index 98%
rename from logback-examples/src/main/java/chapter5/MySampleConverter.java
rename to logback-examples/src/main/java/chapters/layouts/MySampleConverter.java
index ac91980..57721be 100644
--- a/logback-examples/src/main/java/chapter5/MySampleConverter.java
+++ b/logback-examples/src/main/java/chapters/layouts/MySampleConverter.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter5;
+package chapters.layouts;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.pattern.ClassicConverter;
diff --git a/logback-examples/src/main/java/chapter5/MySampleLayout.java b/logback-examples/src/main/java/chapters/layouts/MySampleLayout.java
similarity index 97%
rename from logback-examples/src/main/java/chapter5/MySampleLayout.java
rename to logback-examples/src/main/java/chapters/layouts/MySampleLayout.java
index 38caefd..6e88ff2 100644
--- a/logback-examples/src/main/java/chapter5/MySampleLayout.java
+++ b/logback-examples/src/main/java/chapters/layouts/MySampleLayout.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter5;
+package chapters.layouts;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.CoreConstants;
diff --git a/logback-examples/src/main/java/chapter5/MySampleLayout2.java b/logback-examples/src/main/java/chapters/layouts/MySampleLayout2.java
similarity index 98%
rename from logback-examples/src/main/java/chapter5/MySampleLayout2.java
rename to logback-examples/src/main/java/chapters/layouts/MySampleLayout2.java
index 87b1c43..be8ba9b 100644
--- a/logback-examples/src/main/java/chapter5/MySampleLayout2.java
+++ b/logback-examples/src/main/java/chapters/layouts/MySampleLayout2.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter5;
+package chapters.layouts;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.CoreConstants;
diff --git a/logback-examples/src/main/java/chapter5/PatternSample.java b/logback-examples/src/main/java/chapters/layouts/PatternSample.java
similarity index 97%
rename from logback-examples/src/main/java/chapter5/PatternSample.java
rename to logback-examples/src/main/java/chapters/layouts/PatternSample.java
index 07b1ede..d4d7786 100644
--- a/logback-examples/src/main/java/chapter5/PatternSample.java
+++ b/logback-examples/src/main/java/chapters/layouts/PatternSample.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter5;
+package chapters.layouts;
import org.slf4j.LoggerFactory;
diff --git a/logback-examples/src/main/java/chapter5/SampleLogging.java b/logback-examples/src/main/java/chapters/layouts/SampleLogging.java
similarity index 98%
rename from logback-examples/src/main/java/chapter5/SampleLogging.java
rename to logback-examples/src/main/java/chapters/layouts/SampleLogging.java
index e62cd93..8a694cc 100644
--- a/logback-examples/src/main/java/chapter5/SampleLogging.java
+++ b/logback-examples/src/main/java/chapters/layouts/SampleLogging.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter5;
+package chapters.layouts;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/logback-examples/src/main/java/chapter5/TestException.java b/logback-examples/src/main/java/chapters/layouts/TestException.java
similarity index 96%
rename from logback-examples/src/main/java/chapter5/TestException.java
rename to logback-examples/src/main/java/chapters/layouts/TestException.java
index 4eb054f..84257a1 100644
--- a/logback-examples/src/main/java/chapter5/TestException.java
+++ b/logback-examples/src/main/java/chapters/layouts/TestException.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter5;
+package chapters.layouts;
public class TestException extends Exception {
diff --git a/logback-examples/src/main/java/chapter5/callerEvaluatorConfig.xml b/logback-examples/src/main/java/chapters/layouts/callerEvaluatorConfig.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter5/callerEvaluatorConfig.xml
rename to logback-examples/src/main/java/chapters/layouts/callerEvaluatorConfig.xml
diff --git a/logback-examples/src/main/java/chapter5/exceptionEvaluatorConfig.xml b/logback-examples/src/main/java/chapters/layouts/exceptionEvaluatorConfig.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter5/exceptionEvaluatorConfig.xml
rename to logback-examples/src/main/java/chapters/layouts/exceptionEvaluatorConfig.xml
diff --git a/logback-examples/src/main/java/chapter5/mySampleConverterConfig.xml b/logback-examples/src/main/java/chapters/layouts/mySampleConverterConfig.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter5/mySampleConverterConfig.xml
rename to logback-examples/src/main/java/chapters/layouts/mySampleConverterConfig.xml
diff --git a/logback-examples/src/main/java/chapter5/sampleLayoutConfig.xml b/logback-examples/src/main/java/chapters/layouts/sampleLayoutConfig.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter5/sampleLayoutConfig.xml
rename to logback-examples/src/main/java/chapters/layouts/sampleLayoutConfig.xml
diff --git a/logback-examples/src/main/java/chapter5/sampleLayoutConfig2.xml b/logback-examples/src/main/java/chapters/layouts/sampleLayoutConfig2.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter5/sampleLayoutConfig2.xml
rename to logback-examples/src/main/java/chapters/layouts/sampleLayoutConfig2.xml
diff --git a/logback-examples/src/main/java/chapter7/NumberCruncher.java b/logback-examples/src/main/java/chapters/mdc/NumberCruncher.java
similarity index 97%
rename from logback-examples/src/main/java/chapter7/NumberCruncher.java
rename to logback-examples/src/main/java/chapters/mdc/NumberCruncher.java
index 4ae4151..504ebfe 100644
--- a/logback-examples/src/main/java/chapter7/NumberCruncher.java
+++ b/logback-examples/src/main/java/chapters/mdc/NumberCruncher.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter7;
+package chapters.mdc;
import java.rmi.Remote;
import java.rmi.RemoteException;
diff --git a/logback-examples/src/main/java/chapter7/NumberCruncherClient.java b/logback-examples/src/main/java/chapters/mdc/NumberCruncherClient.java
similarity index 99%
rename from logback-examples/src/main/java/chapter7/NumberCruncherClient.java
rename to logback-examples/src/main/java/chapters/mdc/NumberCruncherClient.java
index 2a06829..5c58943 100644
--- a/logback-examples/src/main/java/chapter7/NumberCruncherClient.java
+++ b/logback-examples/src/main/java/chapters/mdc/NumberCruncherClient.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter7;
+package chapters.mdc;
import java.io.BufferedReader;
import java.io.InputStreamReader;
diff --git a/logback-examples/src/main/java/chapter7/NumberCruncherServer.java b/logback-examples/src/main/java/chapters/mdc/NumberCruncherServer.java
similarity index 99%
rename from logback-examples/src/main/java/chapter7/NumberCruncherServer.java
rename to logback-examples/src/main/java/chapters/mdc/NumberCruncherServer.java
index 6977152..47fa237 100644
--- a/logback-examples/src/main/java/chapter7/NumberCruncherServer.java
+++ b/logback-examples/src/main/java/chapters/mdc/NumberCruncherServer.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter7;
+package chapters.mdc;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
diff --git a/logback-examples/src/main/java/chapter7/SimpleMDC.java b/logback-examples/src/main/java/chapters/mdc/SimpleMDC.java
similarity index 99%
rename from logback-examples/src/main/java/chapter7/SimpleMDC.java
rename to logback-examples/src/main/java/chapters/mdc/SimpleMDC.java
index 228ae70..a2fa7ae 100644
--- a/logback-examples/src/main/java/chapter7/SimpleMDC.java
+++ b/logback-examples/src/main/java/chapters/mdc/SimpleMDC.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter7;
+package chapters.mdc;
import java.net.URL;
diff --git a/logback-examples/src/main/java/chapter7/UserServletFilter.java b/logback-examples/src/main/java/chapters/mdc/UserServletFilter.java
similarity index 99%
rename from logback-examples/src/main/java/chapter7/UserServletFilter.java
rename to logback-examples/src/main/java/chapters/mdc/UserServletFilter.java
index abd5d1a..5feed3f 100644
--- a/logback-examples/src/main/java/chapter7/UserServletFilter.java
+++ b/logback-examples/src/main/java/chapters/mdc/UserServletFilter.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter7;
+package chapters.mdc;
import java.io.IOException;
import java.security.Principal;
diff --git a/logback-examples/src/main/java/chapter7/mdc1.xml b/logback-examples/src/main/java/chapters/mdc/mdc1.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter7/mdc1.xml
rename to logback-examples/src/main/java/chapters/mdc/mdc1.xml
diff --git a/logback-examples/src/main/java/chapter7/simpleMDC.xml b/logback-examples/src/main/java/chapters/mdc/simpleMDC.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter7/simpleMDC.xml
rename to logback-examples/src/main/java/chapters/mdc/simpleMDC.xml
diff --git a/logback-examples/src/main/java/chapter11/Log4jMain.java b/logback-examples/src/main/java/chapters/migrationFromLog4j/Log4jMain.java
similarity index 96%
rename from logback-examples/src/main/java/chapter11/Log4jMain.java
rename to logback-examples/src/main/java/chapters/migrationFromLog4j/Log4jMain.java
index b5aeda9..281fd6e 100644
--- a/logback-examples/src/main/java/chapter11/Log4jMain.java
+++ b/logback-examples/src/main/java/chapters/migrationFromLog4j/Log4jMain.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter11;
+package chapters.migrationFromLog4j;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
diff --git a/logback-examples/src/main/java/chapter11/LogbackMain.java b/logback-examples/src/main/java/chapters/migrationFromLog4j/LogbackMain.java
similarity index 97%
rename from logback-examples/src/main/java/chapter11/LogbackMain.java
rename to logback-examples/src/main/java/chapters/migrationFromLog4j/LogbackMain.java
index 6ec22bd..feb8532 100644
--- a/logback-examples/src/main/java/chapter11/LogbackMain.java
+++ b/logback-examples/src/main/java/chapters/migrationFromLog4j/LogbackMain.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter11;
+package chapters.migrationFromLog4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/logback-examples/src/main/java/chapter11/TrivialLog4jAppender.java b/logback-examples/src/main/java/chapters/migrationFromLog4j/TrivialLog4jAppender.java
similarity index 95%
rename from logback-examples/src/main/java/chapter11/TrivialLog4jAppender.java
rename to logback-examples/src/main/java/chapters/migrationFromLog4j/TrivialLog4jAppender.java
index 9ccafce..2dc1d5e 100644
--- a/logback-examples/src/main/java/chapter11/TrivialLog4jAppender.java
+++ b/logback-examples/src/main/java/chapters/migrationFromLog4j/TrivialLog4jAppender.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter11;
+package chapters.migrationFromLog4j;
import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.spi.LoggingEvent;
diff --git a/logback-examples/src/main/java/chapter11/TrivialLog4jLayout.java b/logback-examples/src/main/java/chapters/migrationFromLog4j/TrivialLog4jLayout.java
similarity index 96%
rename from logback-examples/src/main/java/chapter11/TrivialLog4jLayout.java
rename to logback-examples/src/main/java/chapters/migrationFromLog4j/TrivialLog4jLayout.java
index cc2726a..67105ef 100644
--- a/logback-examples/src/main/java/chapter11/TrivialLog4jLayout.java
+++ b/logback-examples/src/main/java/chapters/migrationFromLog4j/TrivialLog4jLayout.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter11;
+package chapters.migrationFromLog4j;
import org.apache.log4j.Layout;
import org.apache.log4j.spi.LoggingEvent;
diff --git a/logback-examples/src/main/java/chapter11/TrivialLogbackAppender.java b/logback-examples/src/main/java/chapters/migrationFromLog4j/TrivialLogbackAppender.java
similarity index 97%
rename from logback-examples/src/main/java/chapter11/TrivialLogbackAppender.java
rename to logback-examples/src/main/java/chapters/migrationFromLog4j/TrivialLogbackAppender.java
index bbcad79..3579a04 100644
--- a/logback-examples/src/main/java/chapter11/TrivialLogbackAppender.java
+++ b/logback-examples/src/main/java/chapters/migrationFromLog4j/TrivialLogbackAppender.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter11;
+package chapters.migrationFromLog4j;
import java.io.IOException;
diff --git a/logback-examples/src/main/java/chapter11/TrivialLogbackLayout.java b/logback-examples/src/main/java/chapters/migrationFromLog4j/TrivialLogbackLayout.java
similarity index 96%
rename from logback-examples/src/main/java/chapter11/TrivialLogbackLayout.java
rename to logback-examples/src/main/java/chapters/migrationFromLog4j/TrivialLogbackLayout.java
index 5f032bb..5fa2b43 100644
--- a/logback-examples/src/main/java/chapter11/TrivialLogbackLayout.java
+++ b/logback-examples/src/main/java/chapters/migrationFromLog4j/TrivialLogbackLayout.java
@@ -11,7 +11,7 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package chapter11;
+package chapters.migrationFromLog4j;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.LayoutBase;
diff --git a/logback-examples/src/main/java/chapter11/log4jTrivial.properties b/logback-examples/src/main/java/chapters/migrationFromLog4j/log4jTrivial.properties
similarity index 100%
rename from logback-examples/src/main/java/chapter11/log4jTrivial.properties
rename to logback-examples/src/main/java/chapters/migrationFromLog4j/log4jTrivial.properties
diff --git a/logback-examples/src/main/java/chapter11/logback-trivial.xml b/logback-examples/src/main/java/chapters/migrationFromLog4j/logback-trivial.xml
similarity index 100%
rename from logback-examples/src/main/java/chapter11/logback-trivial.xml
rename to logback-examples/src/main/java/chapters/migrationFromLog4j/logback-trivial.xml
diff --git a/logback-site/src/site/pages/manual/architecture.html b/logback-site/src/site/pages/manual/architecture.html
index 782d36a..19ba1f9 100644
--- a/logback-site/src/site/pages/manual/architecture.html
+++ b/logback-site/src/site/pages/manual/architecture.html
@@ -633,7 +633,7 @@ Logger y = LoggerFactory.getLogger("wombat");</pre>
something akin to:
</p>
- <div class="prettyprint source"><pre>176 [main] DEBUG chapter2.HelloWorld2 - Hello world.</pre></div>
+ <div class="prettyprint source"><pre>176 [main] DEBUG manual.architecture.HelloWorld2 - Hello world.</pre></div>
<p>The first field is the number of milliseconds elapsed since the
start of the program. The second field is the thread making the
@@ -677,9 +677,9 @@ Logger y = LoggerFactory.getLogger("wombat");</pre>
hand, if the logger is enabled for the DEBUG level, you will incur
the cost of evaluating whether the logger is enabled or not,
twice: once in <code>debugEnabled</code> and once in
- <code>debug</code>. This is an insignificant overhead because
- evaluating a logger takes less than 1% of the time it takes to
- actually log a request.
+ <code>debug</code>. In practice, this overhead is insignificant
+ because evaluating a logger takes less than 1% of the time it
+ takes to actually log a request.
</p>
<h4>Better alternative</h4>
@@ -815,7 +815,7 @@ logger.debug("Value {} was inserted between {} and {}.", paramArray);</pre>
want to click on the image to display its bigger version.
</p>
- <a href="underTheHood.html"><img src="images/chapter2/underTheHoodSequence2_small.gif" alt="underTheHoodSequence2_small.gif"/></a>
+ <a href="underTheHood.html"><img src="images/manual/architecture/underTheHoodSequence2_small.gif" alt="underTheHoodSequence2_small.gif"/></a>
<a name="Performance"></a>
<h3>Performance</h3>
diff --git a/logback-site/src/site/pages/manual/configuration.html b/logback-site/src/site/pages/manual/configuration.html
index d3a135e..ae25f6e 100644
--- a/logback-site/src/site/pages/manual/configuration.html
+++ b/logback-site/src/site/pages/manual/configuration.html
@@ -131,9 +131,9 @@
<em>Example 3.<span class="autoEx"/>: Simple example of
<code>BasicConfigurator</code> usage <a
- href="../xref/chapter3/MyApp1.html">(logback-examples/src/main/java/chapter3/MyApp1.java)</a></em>
+ href="../xref/chapters/configuration/MyApp1.html">(logback-examples/src/main/java/chapters/configuration/MyApp1.java)</a></em>
- <pre class="prettyprint source">package chapter3;
+ <pre class="prettyprint source">package manual.configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -155,10 +155,10 @@ public class MyApp1 {
</p>
<em>Example 3.<span class="autoEx"/>: Small class doing logging
- <a href="../xref/chapter3/Foo.html">(logback-examples/src/main/java/chapter3/Foo.java)</a>
+ <a href="../xref/chapters/configuration/Foo.html">(logback-examples/src/main/java/chapters/configuration/Foo.java)</a>
</em>
- <pre class="prettyprint source">package chapter3;
+ <pre class="prettyprint source">package chapters.configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -192,13 +192,13 @@ public class Foo {
the root logger is assigned the <code>DEBUG</code> level.
</p>
- <p>Thus, the output of the command <em>java chapter3.MyApp1</em>
+ <p>Thus, the output of the command <em>java chapters.configuration.MyApp1</em>
should be similar to:
</p>
- <p class="source">16:06:09.031 [main] INFO chapter3.MyApp1 - Entering application.
-16:06:09.046 [main] DEBUG chapter3.Foo - Did it again!
-16:06:09.046 [main] INFO chapter3.MyApp1 - Exiting application.</p>
+ <p class="source">16:06:09.031 [main] INFO chapters.configuration.MyApp1 - Entering application.
+16:06:09.046 [main] DEBUG chapters.configuration.Foo - Did it again!
+16:06:09.046 [main] INFO chapters.configuration.MyApp1 - Exiting application.</p>
<div class="highlight">
@@ -234,7 +234,7 @@ public class Foo {
</p>
<p><em>Example 3.<span class="autoEx"/>: Basic configuration file
- (logback-examples/src/main/java/chapter3/sample0.xml)</em></p>
+ (logback-examples/src/main/java/chapters/configuration/sample0.xml)</em></p>
<pre class="prettyprint source"><configuration>
@@ -276,7 +276,7 @@ public class Foo {
<em>Example 3.<span class="autoEx"/>: Print logback's internal status information
<a
- href="../xref/chapter3/MyApp2.html">(logback-examples/src/main/java/chapter3/MyApp2.java)</a></em>
+ href="../xref/chapters/configuration/MyApp2.html">(logback-examples/src/main/java/chapters/configuration/MyApp2.java)</a></em>
<pre class="prettyprint lang-java source">
@@ -298,9 +298,9 @@ public class Foo {
17:44:58,812 |-INFO in ch.qos.logback.classic.joran.action.LevelAction - root level set to DEBUG
17:44:58,812 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[root]
-17:44:58.828 [main] INFO chapter3.MyApp2 - Entering application.
-17:44:58.828 [main] DEBUG chapter3.Foo - Did it again!
-17:44:58.828 [main] INFO chapter3.MyApp2 - Exiting application.
+17:44:58.828 [main] INFO chapters.configuration.MyApp2 - Entering application.
+17:44:58.828 [main] DEBUG chapters.configuration.Foo - Did it again!
+17:44:58.828 [main] INFO chapters.configuration.MyApp2 - Exiting application.
</pre></div>
<p>At the end of this output, you can recognize the lines that were
@@ -325,7 +325,7 @@ public class Foo {
<em>Example 3.<span class="autoEx"/>: Basic configuration file
using debug mode
- (logback-examples/src/main/java/chapter3/sample1.xml)</em>
+ (logback-examples/src/main/java/chapters/configuration/sample1.xml)</em>
<pre class="prettyprint source">
<configuration <b>debug="true"</b>>
@@ -373,7 +373,7 @@ public class Foo {
file external to the application.
</p>
- <p class="source">java <b>-Dlogback.configurationFile=/path/to/config.xml</b> chapter3.MyApp1</p>
+ <p class="source">java <b>-Dlogback.configurationFile=/path/to/config.xml</b> chapters.configuration.MyApp1</p>
<h3><a name="autoScan" href="#autoScan">Automatically reloading
@@ -397,7 +397,7 @@ public class Foo {
</p>
<em>Example 3.<span class="autoEx"/>: Scanning for changes in
configuration file and automatic re-configuraion
- (logback-examples/src/main/java/chapter3/scan1.xml)</em>
+ (logback-examples/src/main/java/chapters/configuration/scan1.xml)</em>
<pre class="prettyprint source">
<configuration <b>scan="true"</b>>
@@ -414,7 +414,7 @@ public class Foo {
<em>Example 3.<span class="autoEx"/>: Specifying a different
scanning period
- (logback-examples/src/main/java/chapter3/scan2.xml)</em>
+ (logback-examples/src/main/java/chapters/configuration/scan2.xml)</em>
<pre class="prettyprint source">
<configuration scan="true" <b>scanPeriod="30 seconds"</b> >
@@ -466,9 +466,9 @@ public class Foo {
<p><em>Example 3.<span class="autoEx"/>: Invoking
<code>JoranConfigurator</code> directly <a
- href="../xref/chapter3/MyApp3.html">(logback-examples/src/main/java/chapter3/MyApp3.java)</a></em></p>
+ href="../xref/chapters/configuration/MyApp3.html">(logback-examples/src/main/java/chapters/configuration/MyApp3.java)</a></em></p>
-<pre class="prettyprint source">package chapter3;
+<pre class="prettyprint source">package chapters.configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -540,8 +540,8 @@ public class MyApp3 {
<code>LoggerContext</code> as an HTML table. Here is sample output.
</p>
- <a href="images/chapter3/lbClassicStatus.jpg">
- <img src="images/chapter3/lbClassicStatus.jpg" alt="click to enlarge" width="90%"/>
+ <a href="images/chapters/configuration/lbClassicStatus.jpg">
+ <img src="images/chapters/configuration/lbClassicStatus.jpg" alt="click to enlarge" width="90%"/>
</a>
<p>To add this servlet to your web-application, add the following
@@ -584,7 +584,7 @@ public class MyApp3 {
</p>
<p>Here is <a
- href="../xref/chapter3/AddStatusListenerApp.html">sample code</a>
+ href="../xref/chapters/configuration/AddStatusListenerApp.html">sample code</a>
to register an OnConsoleStatusListener instance with the
StatusManager.
</p>
@@ -601,7 +601,7 @@ public class MyApp3 {
<p>It is also possible to register one or more status listeners
within a configuration file. Here is an example.</p>
- <p><em>Example 3.<span class="autoEx"/>: Registering a status listener (logback-examples/src/main/java/chapter3/onConsoleStatusListener.xml)</em></p>
+ <p><em>Example 3.<span class="autoEx"/>: Registering a status listener (logback-examples/src/main/java/chapters/configuration/onConsoleStatusListener.xml)</em></p>
<pre class="prettyprint source"><configuration>
<b><statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" /></b>
@@ -647,7 +647,7 @@ public class MyApp3 {
<p align="left">
- <img src="images/chapter3/basicSyntax.png"
+ <img src="images/chapters/configuration/basicSyntax.png"
alt="basic Syntax" title="Basic configuration file structure"/>
</p>
@@ -738,11 +738,11 @@ public class MyApp3 {
<p>Setting the level of a logger or root logger is as simple as
declaring it and setting its level, as the next example
illustrates. Suppose we are no longer interested in seeing any DEBUG
- messages from any component belonging to the "chapter3" package. The
+ messages from any component belonging to the "chapters.configuration" package. The
following configuration file shows how to achieve that.
</p>
-<em>Example 3.<span class="autoEx"/>: Setting the level of a logger (logback-examples/src/main/java/chapter3/sample2.xml)</em>
+<em>Example 3.<span class="autoEx"/>: Setting the level of a logger (logback-examples/src/main/java/chapters/configuration/sample2.xml)</em>
<pre class="prettyprint source"><configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
@@ -751,7 +751,7 @@ public class MyApp3 {
</layout>
</appender>
- <b><logger name="chapter3" level="INFO"/></b>
+ <b><logger name="chapters.configuration" level="INFO"/></b>
<!-- Strictly speaking, the level attribute is not necessary since -->
<!-- the level of the root level is set to DEBUG by default. -->
@@ -765,16 +765,16 @@ public class MyApp3 {
invoked with the <em>MyApp3</em> application.
</p>
-<pre class="source">17:34:07.578 [main] INFO chapter3.MyApp3 - Entering application.
-17:34:07.578 [main] INFO chapter3.MyApp3 - Exiting application.</pre>
+<pre class="source">17:34:07.578 [main] INFO chapters.configuration.MyApp3 - Entering application.
+17:34:07.578 [main] INFO chapters.configuration.MyApp3 - Exiting application.</pre>
<p>You can configure the levels of as many loggers as you wish. In
the next configuration file, we set the level of the
- <em>chapter3</em> logger to INFO but at the same time set the level
- of the <em>chapter3.Foo</em> logger to <code>DEBUG</code>.
+ <em>chapters.configuration</em> logger to INFO but at the same time set the level
+ of the <em>chapters.configuration.Foo</em> logger to <code>DEBUG</code>.
</p>
-<em>Example 3.<span class="autoEx"/>: Setting the level of multiple loggers (logback-examples/src/main/java/chapter3/sample3.xml)</em>
+<em>Example 3.<span class="autoEx"/>: Setting the level of multiple loggers (logback-examples/src/main/java/chapters/configuration/sample3.xml)</em>
<pre class="source prettyprint"><configuration>
<appender name="STDOUT"
@@ -786,8 +786,8 @@ public class MyApp3 {
</layout>
</appender>
- <b><logger name="chapter3" level="INFO" />
- <logger name="chapter3.Foo" level="DEBUG" /></b>
+ <b><logger name="chapters.configuration" level="INFO" />
+ <logger name="chapters.configuration.Foo" level="DEBUG" /></b>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
@@ -799,9 +799,9 @@ public class MyApp3 {
result in the following output on the console:
</p>
-<p class="prettyprint source">17:39:27.593 [main] INFO chapter3.MyApp3 - Entering application.
-17:39:27.593 [main] DEBUG chapter3.Foo - Did it again!
-17:39:27.593 [main] INFO chapter3.MyApp3 - Exiting application.</p>
+<p class="prettyprint source">17:39:27.593 [main] INFO chapters.configuration.MyApp3 - Entering application.
+17:39:27.593 [main] DEBUG chapters.configuration.Foo - Did it again!
+17:39:27.593 [main] INFO chapters.configuration.MyApp3 - Exiting application.</p>
<p>The table below list the loggers and their levels, after
<code>JoranConfigurator</code> has configured logback with the
@@ -820,17 +820,17 @@ public class MyApp3 {
<td><code>DEBUG</code></td>
</tr>
<tr class="alt">
- <td>chapter3</td>
+ <td>chapters.configuration</td>
<td><code>INFO</code></td>
<td><code>INFO</code></td>
</tr>
<tr>
- <td>chapter3.MyApp3</td>
+ <td>chapters.configuration.MyApp3</td>
<td><code>null</code></td>
<td><code>INFO</code></td>
</tr>
<tr class="alt">
- <td>chapter3.Foo</td>
+ <td>chapters.configuration.Foo</td>
<td><code>DEBUG</code></td>
<td><code>DEBUG</code></td>
</tr>
@@ -854,7 +854,7 @@ public class MyApp3 {
</p>
<em>Example 3.<span class="autoEx"/>: Logger level sample
- (logback-examples/src/main/java/chapter3/sample4.xml)</em>
+ (logback-examples/src/main/java/chapters/configuration/sample4.xml)</em>
<pre class="prettyprint source"><configuration>
<appender name="STDOUT"
@@ -866,7 +866,7 @@ public class MyApp3 {
</layout>
</appender>
- <b><logger name="chapter3" level="INFO" /></b>
+ <b><logger name="chapters.configuration" level="INFO" /></b>
<!-- turn OFF all logging (children can override) -->
<root <b>level="OFF"</b>>
@@ -891,17 +891,17 @@ public class MyApp3 {
<td><code>OFF</code></td>
</tr>
<tr class="alt">
- <td>chapter3</td>
+ <td>chapters.configuration</td>
<td><code>INFO</code></td>
<td><code>INFO</code></td>
</tr>
<tr>
- <td>chapter3.MyApp3</td>
+ <td>chapters.configuration.MyApp3</td>
<td><code>null</code></td>
<td><code>INFO</code></td>
</tr>
<tr class="alt">
- <td>chapter3.Foo</td>
+ <td>chapters.configuration.Foo</td>
<td><code>null</code></td>
<td><code>INFO</code></td>
</tr>
@@ -914,13 +914,13 @@ public class MyApp3 {
yield:
</p>
- <div class="source"><pre>17:52:23.609 [main] INFO chapter3.MyApp3 - Entering application.
-17:52:23.609 [main] INFO chapter3.MyApp3 - Exiting application.</pre></div>
+ <div class="source"><pre>17:52:23.609 [main] INFO chapters.configuration.MyApp3 - Entering application.
+17:52:23.609 [main] INFO chapters.configuration.MyApp3 - Exiting application.</pre></div>
<p>Thus, the level of the root logger has no apparent effect because
- the loggers in <code>chapter3.MyApp3</code> and
- <code>chapter3.Foo</code> classes are all enabled for the
- <code>INFO</code> level. As a side note, the <em>chapter3</em>
+ the loggers in <code>chapters.configuration.MyApp3</code> and
+ <code>chapters.configuration.Foo</code> classes are all enabled for the
+ <code>INFO</code> level. As a side note, the <em>chapters.configuration</em>
logger exists by virtue of its declaration in the configuration file
- even if the Java source code does not directly refer to it.
</p>
@@ -945,7 +945,7 @@ public class MyApp3 {
</p>
<p align="left">
- <img src="images/chapter3/appenderSyntax.png"
+ <img src="images/chapters/configuration/appenderSyntax.png"
alt="Appender Syntax" title="Appender element syntax"/>
</p>
@@ -961,7 +961,7 @@ public class MyApp3 {
configuration file illustrates:
</p>
-<em>Example 3.<span class="autoEx"/>: Multiple loggers (logback-examples/src/main/java/chapter3/multiple.xml)</em>
+<em>Example 3.<span class="autoEx"/>: Multiple loggers (logback-examples/src/main/java/chapters/configuration/multiple.xml)</em>
<pre class="prettyprint source"><configuration>
<appender name="<b>FILE</b>" class="ch.qos.logback.core.FileAppender">
@@ -1011,7 +1011,7 @@ public class MyApp3 {
</p>
<em>Example 3.<span class="autoEx"/>: Duplicate appender
- (logback-examples/src/main/java/chapter3/duplicate.xml)</em>
+ (logback-examples/src/main/java/chapters/configuration/duplicate.xml)</em>
<pre class="prettyprint source"><configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
@@ -1020,7 +1020,7 @@ public class MyApp3 {
</layout>
</appender>
- <logger name="chapter3">
+ <logger name="chapters.configuration">
<appender-ref ref="STDOUT" />
</logger>
@@ -1033,19 +1033,19 @@ public class MyApp3 {
yield the following output:
</p>
-<p class="source">14:25:36.343 [main] INFO chapter3.MyApp3 - Entering application.
-14:25:36.343 [main] INFO chapter3.MyApp3 - Entering application.
-14:25:36.359 [main] DEBUG chapter3.Foo - Did it again!
-14:25:36.359 [main] DEBUG chapter3.Foo - Did it again!
-14:25:36.359 [main] INFO chapter3.MyApp3 - Exiting application.
-14:25:36.359 [main] INFO chapter3.MyApp3 - Exiting application.</p>
+<p class="source">14:25:36.343 [main] INFO chapters.configuration.MyApp3 - Entering application.
+14:25:36.343 [main] INFO chapters.configuration.MyApp3 - Entering application.
+14:25:36.359 [main] DEBUG chapters.configuration.Foo - Did it again!
+14:25:36.359 [main] DEBUG chapters.configuration.Foo - Did it again!
+14:25:36.359 [main] INFO chapters.configuration.MyApp3 - Exiting application.
+14:25:36.359 [main] INFO chapters.configuration.MyApp3 - Exiting application.</p>
<p>Notice the duplicated output. The appender named <em>STDOUT</em>
- is attached to two loggers, to root and to <em>chapter3</em>. Since
- the root logger is the ancestor of all loggers and <em>chapter3</em>
- is the parent of <em>chapter3.MyApp3</em> and <em>chapter3.Foo</em>,
+ is attached to two loggers, to root and to <em>chapters.configuration</em>. Since
+ the root logger is the ancestor of all loggers and <em>chapters.configuration</em>
+ is the parent of <em>chapters.configuration.MyApp3</em> and <em>chapters.configuration.Foo</em>,
logging request made with these two loggers will be output twice,
- once because <em>STDOUT</em> is attached to <em>chapter3</em> and
+ once because <em>STDOUT</em> is attached to <em>chapters.configuration</em> and
once because it is attached to <em>root</em>.
</p>
@@ -1057,7 +1057,7 @@ public class MyApp3 {
</p>
<em>Example 3.<span class="autoEx"/>: Multiple appender
- (logback-examples/src/main/java/chapter3/restricted.xml)</em>
+ (logback-examples/src/main/java/chapters/configuration/restricted.xml)</em>
<pre class="prettyprint source"><configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
@@ -1073,7 +1073,7 @@ public class MyApp3 {
</layout>
</appender>
- <logger name="chapter3">
+ <logger name="chapters.configuration">
<appender-ref ref="FILE" />
</logger>
@@ -1084,7 +1084,7 @@ public class MyApp3 {
<p>In this example, the console appender will log all the messages
(for all loggers in the system) whereas only logging request
- originating from loggers <em>chapter3</em> and below go into the
+ originating from loggers <em>chapters.configuration</em> and below go into the
<em>myApp.log</em> file.
</p>
@@ -1097,7 +1097,7 @@ public class MyApp3 {
of the tree.
</p>
-<em>Example 3.<span class="autoEx"/>: Additivity flag (logback-examples/src/main/java/chapter3/additivityFlag.xml)</em>
+<em>Example 3.<span class="autoEx"/>: Additivity flag (logback-examples/src/main/java/chapters/configuration/additivityFlag.xml)</em>
<pre class="prettyprint source"><configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
@@ -1113,7 +1113,7 @@ public class MyApp3 {
</layout>
</appender>
- <logger name="chapter3.Foo" <b>additivity="false"</b>>
+ <logger name="chapters.configuration.Foo" <b>additivity="false"</b>>
<appender-ref ref="FILE" />
</logger>
@@ -1123,15 +1123,15 @@ public class MyApp3 {
</configuration></pre>
<p>This example, the appender named <em>FILE</em> is attached to the
- <em>chapter3.Foo</em> logger. Moreover, the <em>chapter3.Foo</em>
+ <em>chapters.configuration.Foo</em> logger. Moreover, the <em>chapters.configuration.Foo</em>
logger has its additivity flag set to false such that its logging
output will be sent to the appender named <em>FILE</em> but not to
any appender attached higher in the hierarchy. Other loggers remain
- oblivious to the additivity setting of the <em>chapter3.Foo</em>
+ oblivious to the additivity setting of the <em>chapters.configuration.Foo</em>
logger. Running the <code>MyApp3</code> application with the
<em>additivityFlag.xml</em> configuration file will output results
- on the console from the <em>chapter3.MyApp3</em> logger. However,
- output from the <em>chapter3.Foo</em> logger will appear in the
+ on the console from the <em>chapters.configuration.MyApp3</em> logger. However,
+ output from the <em>chapters.configuration.Foo</em> logger will appear in the
<em>foo.log</em> file and only in that file.
</p>
@@ -1166,7 +1166,7 @@ public class MyApp3 {
</p>
<em>Example 3.<span class="autoEx"/>: Simple Variable substitution
- (logback-examples/src/main/java/chapter3/variableSubstitution1.xml)
+ (logback-examples/src/main/java/chapters/configuration/variableSubstitution1.xml)
</em>
<pre class="prettyprint source"><configuration>
@@ -1196,7 +1196,7 @@ public class MyApp3 {
<p class="source">java -DUSER_HOME="/home/sebastien" MyApp2</p>
<em>Example 3.<span class="autoEx"/>: System Variable substitution
- (logback-examples/src/main/java/chapter3/variableSubstitution2.xml)
+ (logback-examples/src/main/java/chapters/configuration/variableSubstitution2.xml)
</em>
<pre class="prettyprint source"><configuration>
@@ -1222,12 +1222,12 @@ public class MyApp3 {
<em>Example 3.<span class="autoEx"/>: Variable substitution using a
separate file
- (logback-examples/src/main/java/chapter3/variableSubstitution3.xml)
+ (logback-examples/src/main/java/chapters/configuration/variableSubstitution3.xml)
</em>
<pre class="prettyprint source"><configuration>
- <b><property file="src/main/java/chapter3/variables1.properties" /></b>
+ <b><property file="src/main/java/chapters/configuration/variables1.properties" /></b>
<appender name="FILE"
class="ch.qos.logback.core.FileAppender">
@@ -1250,7 +1250,7 @@ public class MyApp3 {
</p>
<em>Example 3.<span class="autoEx"/>: Variable file
- (logback-examples/src/main/java/chapter3/variables1.properties)</em>
+ (logback-examples/src/main/java/chapters/configuration/variables1.properties)</em>
<pre class="source">USER_HOME=/home/sebastien</pre>
@@ -1286,7 +1286,7 @@ public class MyApp3 {
<em>Example 3.<span class="autoEx"/>: Nested variable references
- (logback-examples/src/main/java/chapter3/variables2.properties)</em>
+ (logback-examples/src/main/java/chapters/configuration/variables2.properties)</em>
<pre class="source">USER_HOME=/home/sebastien
fileName=myApp.log
@@ -1299,7 +1299,7 @@ fileName=myApp.log
<em>Example 3.<span class="autoEx"/>: Variable substitution using
a separate file
- (logback-examples/src/main/java/chapter3/variableSubstitution4.xml)</em>
+ (logback-examples/src/main/java/chapters/configuration/variableSubstitution4.xml)</em>
<pre class="prettyprint source"><configuration>
@@ -1342,10 +1342,10 @@ fileName=myApp.log
</p>
<em>Example 3.<span class="autoEx"/>: File include
- (logback-examples/src/main/java/chapter3/containingConfig.xml)</em>
+ (logback-examples/src/main/java/chapters/configuration/containingConfig.xml)</em>
<pre class="prettyprint source"><configuration>
- <b><include file="src/main/java/chapter3/includedConfig.xml"/></b>
+ <b><include file="src/main/java/chapters/configuration/includedConfig.xml"/></b>
<root level="DEBUG">
<appender-ref ref="includedConsole" />
@@ -1359,7 +1359,7 @@ fileName=myApp.log
</p>
<em>Example 3.<span class="autoEx"/>: File include
- (logback-examples/src/main/java/chapter3/includedConfig.xml)</em>
+ (logback-examples/src/main/java/chapters/configuration/includedConfig.xml)</em>
<pre class="source"><b class="green big"><included></b>
<appender name="includedConsole" class="ch.qos.logback.core.ConsoleAppender">
@@ -1392,7 +1392,7 @@ fileName=myApp.log
</p>
<em>Example 3.<span class="autoEx"/>: Set the context name and display it
- (logback-examples/src/main/java/chapter3/contextName.xml)</em>
+ (logback-examples/src/main/java/chapters/configuration/contextName.xml)</em>
<pre class="prettyprint source"><configuration>
<b><contextName>myAppName</contextName></b>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
@@ -1422,7 +1422,7 @@ fileName=myApp.log
</p>
<em>Example 3.<span class="autoEx"/>: Insert as properties env-entries obtained via JNDI
- (logback-examples/src/main/java/chapter3/insertFromJNDI.xml)</em>
+ (logback-examples/src/main/java/chapters/configuration/insertFromJNDI.xml)</em>
<pre class="prettyprint source"><configuration>
<b><insertFromJNDI env-entry-name="java:comp/env/appName" as="<span class="green">appName"</span> /></b>
<b><contextName><span class="green">${appName}</span></contextName></b>
diff --git a/logback-site/src/site/pages/manual/introduction.html b/logback-site/src/site/pages/manual/introduction.html
index 909a40d..45748ec 100644
--- a/logback-site/src/site/pages/manual/introduction.html
+++ b/logback-site/src/site/pages/manual/introduction.html
@@ -78,8 +78,8 @@
<p>Let us now begin experimenting with logback.</p>
-<em>Example 1.1: Basic template for logging (<a href="../xref/chapter1/HelloWorld1.html">logback-examples/src/main/java/chapter1/HelloWorld1.java</a>)</em>
-<pre class="prettyprint source">package chapter1;
+<em>Example 1.1: Basic template for logging (<a href="../xref/chapters/introduction/HelloWorld1.html">logback-examples/src/main/java/chapters/introduction/HelloWorld1.java</a>)</em>
+<pre class="prettyprint source">package chapters.introduction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -88,14 +88,14 @@ public class HelloWorld1 {
public static void main(String[] args) {
- Logger logger = LoggerFactory.getLogger("chapter1.HelloWorld1");
+ Logger logger = LoggerFactory.getLogger("chapters.introduction.HelloWorld1");
logger.debug("Hello world.");
}
}</pre>
<p><code>HelloWorld</code> class is defined in the
- <code>chapter1</code> package. It starts by importing the <a
+ <code>chapters.introduction</code> package. It starts by importing the <a
href="http://slf4j.org/api/org/slf4j/Logger.html"><code>Logger</code></a>
and <a
href="http://slf4j.org/api/org/slf4j/LoggerFactory.html"><code>LoggerFactory</code></a>
@@ -108,7 +108,7 @@ public class HelloWorld1 {
<code>logger</code> is assigned a <code>Logger</code> instance
retrieved by invoking the static <code>getLogger</code> method
from the <code>LoggerFactory</code> class. This logger is named
- "chapter1.HelloWorld1". The main method proceeds to call the
+ "chapters.introduction.HelloWorld1". The main method proceeds to call the
<code>debug</code> method of this logger passing "Hello World" as
an argument. We say that the main method contains a logging
statement of level DEBUG with the message "Hello world".
@@ -123,9 +123,9 @@ public class HelloWorld1 {
<p>You can launch the first
- sample application, <em>chapter1.HelloWorld1</em> with the command:
+ sample application, <em>chapters.introduction.HelloWorld1</em> with the command:
</p>
- <div class="source"><pre>java chapter1.HelloWorld1</pre></div>
+ <div class="source"><pre>java chapters.introduction.HelloWorld1</pre></div>
<p>Launching the <code>HelloWorld1</code> application will output
a single line on the console. By virtue of logback's default
@@ -134,7 +134,7 @@ public class HelloWorld1 {
logger.
</p>
- <p class="source">20:49:07.962 [main] DEBUG chapter1.HelloWorld1 - Hello world.</p>
+ <p class="source">20:49:07.962 [main] DEBUG chapters.introduction.HelloWorld1 - Hello world.</p>
<p>Logback can report information about its internal state using a
built-in status system. Important events occuring during logback's
@@ -144,8 +144,8 @@ public class HelloWorld1 {
<code>LoggerStatusPrinter</code> class.
</p>
-<em>Example 1.2: Printing Logger Status (<a href="../xref/chapter1/HelloWorld2.html">logback-examples/src/main/java/chapter1/HelloWorld2.java</a>)</em>
-<pre class="prettyprint source">package chapter1;
+<em>Example 1.2: Printing Logger Status (<a href="../xref/chapters/introduction/HelloWorld2.html">logback-examples/src/main/java/chapters/introduction/HelloWorld2.java</a>)</em>
+<pre class="prettyprint source">package chapters.introduction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -155,7 +155,7 @@ import ch.qos.logback.core.util.StatusPrinter;</b>
public class HelloWorld2 {
public static void main(String[] args) {
- Logger logger = LoggerFactory.getLogger("chapter1.HelloWorld2");
+ Logger logger = LoggerFactory.getLogger("chapters.introduction.HelloWorld2");
logger.debug("Hello world.");
// print internal state
@@ -168,7 +168,7 @@ public class HelloWorld2 {
<p>Running the <code>HelloWorld2</code> application will produce
the following output:</p>
-<div class="source longline"><pre>12:49:22.203 [main] DEBUG chapter1.HelloWorld2 - Hello world.
+<div class="source longline"><pre>12:49:22.203 [main] DEBUG chapters.introduction.HelloWorld2 - Hello world.
12:49:22,078 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
12:49:22,093 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.xml]
12:49:22,093 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Setting up default configuration.
@@ -253,7 +253,7 @@ public class HelloWorld2 {
<p>Logback distributions contain complete source code such that you
can modify parts of logback library and build your own version of
it. You may even redistribute the modified version, as long as you
- adhere to the conditions of the LGPL License.
+ adhere to the conditions of the LGPL license or the EPL license.
</p>
<p>Logback has been built and tested with the follwing JDKs.</p>
@@ -283,6 +283,12 @@ public class HelloWorld2 {
<td>IBM JDK 1.6.0.1</td>
<td>Linux 64bit AMD</td>
</tr>
+
+ <tr>
+ <td>Sun JDK 1.6.0.16 (64 bit)</td>
+ <td>Windows 7 (64 bit)</td>
+ </tr>
+
</table>
diff --git a/logback-site/src/site/pages/manual/onJoran.html b/logback-site/src/site/pages/manual/onJoran.html
index 8d70b3b..386c54d 100644
--- a/logback-site/src/site/pages/manual/onJoran.html
+++ b/logback-site/src/site/pages/manual/onJoran.html
@@ -567,7 +567,7 @@ Element [abc] asked to be printed.
<p>The respective Joran configurators of logback-classic and
logback-access include just two implicit actions, namely <a
href="../xref/ch/qos/logback/core/joran/action/NestedBasicPropertyIA.html">
- <code>NestedComplexPropertyIA</code></a> and <a
+ <code>NestedBasicPropertyIA</code></a> and <a
href="../xref/ch/qos/logback/core/joran/action/NestedComplexPropertyIA.html">
<code>NestedComplexPropertyIA</code></a>.
</p>
diff --git a/logback-site/src/site/pages/manual/underTheHood.html b/logback-site/src/site/pages/manual/underTheHood.html
index c68fdcf..063334a 100644
--- a/logback-site/src/site/pages/manual/underTheHood.html
+++ b/logback-site/src/site/pages/manual/underTheHood.html
@@ -9,7 +9,7 @@
<body>
<h2>Under The Hood Sequence Diagram</h2>
- <img src="images/chapter2/underTheHoodSequence2.gif" alt="underTheHoodSequence2.gif"/>
+ <img src="images/manual/architecture/underTheHoodSequence2.gif" alt="underTheHoodSequence2.gif"/>
</body>
</html>
diff --git a/logback-site/src/site/pages/templates/footer.js b/logback-site/src/site/pages/templates/footer.js
index c548cab..c94810b 100644
--- a/logback-site/src/site/pages/templates/footer.js
+++ b/logback-site/src/site/pages/templates/footer.js
@@ -17,9 +17,11 @@ document.write(' </td>')
document.write('<td valign="top">Copyright © 2010 <a href="http://www.qos.ch/">QOS.ch</a></td>')
document.write('</tr>')
+AAT = '@'
+DOOTT = '.'
document.write('<tr>')
document.write('<td align="left" colspan="2">')
-document.write('We are actively looking for volunteers to proofread the documentation. Please send your corrections or suggestions for improvement to "corrections(a)qos.ch".');
+document.write('We are actively looking for volunteers to proofread the documentation. Please send your corrections or suggestions for improvement to "corrections' + AAT +'qos'+DOOTT+'ch".');
document.write('</td>')
document.write('</table>')
diff --git a/logback-site/src/site/resources/manual/images/chapter2/underTheHoodSequence2.gif b/logback-site/src/site/resources/manual/images/chapters/architecture/underTheHoodSequence2.gif
similarity index 100%
rename from logback-site/src/site/resources/manual/images/chapter2/underTheHoodSequence2.gif
rename to logback-site/src/site/resources/manual/images/chapters/architecture/underTheHoodSequence2.gif
diff --git a/logback-site/src/site/resources/manual/images/chapter2/underTheHoodSequence2_small.gif b/logback-site/src/site/resources/manual/images/chapters/architecture/underTheHoodSequence2_small.gif
similarity index 100%
rename from logback-site/src/site/resources/manual/images/chapter2/underTheHoodSequence2_small.gif
rename to logback-site/src/site/resources/manual/images/chapters/architecture/underTheHoodSequence2_small.gif
diff --git a/logback-site/src/site/resources/manual/images/chapter3/appenderSyntax.png b/logback-site/src/site/resources/manual/images/chapters/configuration/appenderSyntax.png
similarity index 100%
rename from logback-site/src/site/resources/manual/images/chapter3/appenderSyntax.png
rename to logback-site/src/site/resources/manual/images/chapters/configuration/appenderSyntax.png
diff --git a/logback-site/src/site/resources/manual/images/chapter3/basicSyntax.png b/logback-site/src/site/resources/manual/images/chapters/configuration/basicSyntax.png
similarity index 100%
rename from logback-site/src/site/resources/manual/images/chapter3/basicSyntax.png
rename to logback-site/src/site/resources/manual/images/chapters/configuration/basicSyntax.png
diff --git a/logback-site/src/site/resources/manual/images/chapter3/lbClassicStatus.jpg b/logback-site/src/site/resources/manual/images/chapters/configuration/lbClassicStatus.jpg
similarity index 100%
rename from logback-site/src/site/resources/manual/images/chapter3/lbClassicStatus.jpg
rename to logback-site/src/site/resources/manual/images/chapters/configuration/lbClassicStatus.jpg
diff --git a/logback-site/src/site/resources/manual/images/chapter3/sample.xml b/logback-site/src/site/resources/manual/images/chapters/configuration/sample.xml
similarity index 100%
rename from logback-site/src/site/resources/manual/images/chapter3/sample.xml
rename to logback-site/src/site/resources/manual/images/chapters/configuration/sample.xml
-----------------------------------------------------------------------
Summary of changes:
.../src/main/java/chapter1/HelloWorld1.java | 26 ---
.../src/main/java/chapter1/HelloWorld2.java | 31 ----
.../main/java/chapter10/SimpleConfigurator.java | 64 -------
.../main/java/chapter10/calculator/AddAction.java | 69 --------
.../java/chapter10/calculator/Calculator1.java | 55 ------
.../java/chapter10/calculator/Calculator2.java | 64 -------
.../chapter10/calculator/ComputationAction1.java | 61 -------
.../chapter10/calculator/ComputationAction2.java | 86 ---------
.../java/chapter10/calculator/LiteralAction.java | 58 -------
.../java/chapter10/calculator/MultiplyAction.java | 66 -------
.../main/java/chapter10/helloWorld/HelloWorld.java | 48 -----
.../chapter10/helloWorld/HelloWorldAction.java | 35 ----
.../main/java/chapter10/implicit/NOPAction.java | 34 ----
.../src/main/java/chapter10/implicit/PrintMe.java | 61 -------
.../chapter10/implicit/PrintMeImplicitAction.java | 44 -----
.../java/chapter10/newRule/NewRuleCalculator.java | 63 -------
.../src/main/java/chapter11/Log4jMain.java | 34 ----
.../src/main/java/chapter11/LogbackMain.java | 48 -----
.../main/java/chapter11/TrivialLog4jAppender.java | 34 ----
.../main/java/chapter11/TrivialLog4jLayout.java | 43 -----
.../java/chapter11/TrivialLogbackAppender.java | 60 -------
.../main/java/chapter11/TrivialLogbackLayout.java | 33 ----
logback-examples/src/main/java/chapter2/Bar.java | 25 ---
.../src/main/java/chapter2/HelloWorld2.java | 28 ---
.../main/java/chapter2/MyAppWithConfigFile.java | 45 -----
.../main/java/chapter3/AddStatusListenerApp.java | 41 -----
logback-examples/src/main/java/chapter3/Foo.java | 26 ---
.../src/main/java/chapter3/MyApp1.java | 30 ----
.../src/main/java/chapter3/MyApp2.java | 36 ----
.../src/main/java/chapter3/MyApp3.java | 53 ------
.../main/java/chapter4/ConfigurationTester.java | 67 -------
.../java/chapter4/CountingConsoleAppender.java | 78 ---------
.../src/main/java/chapter4/ExitWoes1.java | 46 -----
.../src/main/java/chapter4/ExitWoes2.java | 51 ------
logback-examples/src/main/java/chapter4/IO.java | 181 --------------------
.../java/chapter4/mail/CounterBasedEvaluator.java | 63 -------
.../src/main/java/chapter4/mail/EMail.java | 69 --------
.../src/main/java/chapter4/mail/Marked_EMail.java | 70 --------
.../src/main/java/chapter4/sift/SiftExample.java | 55 ------
.../main/java/chapter4/socket/SocketClient1.java | 80 ---------
.../main/java/chapter4/socket/SocketClient2.java | 73 --------
.../src/main/java/chapter4/sub/sample/Bar.java | 34 ----
.../main/java/chapter5/CallerEvaluatorExample.java | 48 -----
.../java/chapter5/ExceptionEvaluatorExample.java | 47 -----
.../src/main/java/chapter5/MySampleConverter.java | 50 ------
.../src/main/java/chapter5/MySampleLayout.java | 36 ----
.../src/main/java/chapter5/MySampleLayout2.java | 54 ------
.../src/main/java/chapter5/PatternSample.java | 42 -----
.../src/main/java/chapter5/SampleLogging.java | 44 -----
.../src/main/java/chapter5/TestException.java | 23 ---
.../src/main/java/chapter6/FilterEvents.java | 59 -------
logback-examples/src/main/java/chapter6/GoMDC.java | 48 -----
.../src/main/java/chapter6/SampleFilter.java | 30 ----
.../src/main/java/chapter6/SampleTurboFilter.java | 59 -------
.../src/main/java/chapter7/NumberCruncher.java | 29 ---
.../main/java/chapter7/NumberCruncherClient.java | 86 ---------
.../main/java/chapter7/NumberCruncherServer.java | 162 -----------------
.../src/main/java/chapter7/SimpleMDC.java | 94 ----------
.../src/main/java/chapter7/UserServletFilter.java | 98 -----------
.../chapters/appenders/ConfigurationTester.java | 67 +++++++
.../appenders/CountingConsoleAppender.java | 78 +++++++++
.../main/java/chapters/appenders/ExitWoes1.java | 46 +++++
.../main/java/chapters/appenders/ExitWoes2.java | 51 ++++++
.../src/main/java/chapters/appenders/IO.java | 181 ++++++++++++++++++++
.../appenders}/conf/access/logback-DB.xml | 0
.../appenders}/conf/access/logback-SMTP.xml | 0
.../appenders}/conf/logback-Console.xml | 0
.../appenders}/conf/logback-HtmlToConsole.xml | 0
.../appenders}/conf/logback-JMSQueue.xml | 0
.../appenders}/conf/logback-JMSTopic.xml | 0
.../appenders}/conf/logback-MDC.xml | 0
.../conf/logback-PrudentTimeBasedRolling.xml | 0
.../appenders}/conf/logback-RollingFixedWindow.xml | 0
.../appenders}/conf/logback-RollingSizeBased.xml | 0
.../appenders}/conf/logback-RollingTimeBased.xml | 0
.../appenders}/conf/logback-SMTP.xml | 0
.../appenders}/conf/logback-SMTPWithHtml.xml | 0
.../appenders}/conf/logback-fileAppender.xml | 0
.../appenders}/conf/logback-syslog.xml | 0
.../appenders}/conf/logback-timestamp.xml | 0
.../appenders}/conf/logbback-sizeAndTime.xml | 0
.../appenders}/countingConsole.xml | 0
.../appenders}/db/append-and-share-with-jndi.xml | 0
.../append-toMySQL-with-datasource-and-pooling.xml | 0
.../db/append-toMySQL-with-datasource.xml | 0
.../db/append-toMySQL-with-driverManager.xml | 0
.../appenders}/db/append-with-c3p0.xml | 0
.../appenders}/db/append-with-datasource.xml | 0
.../appenders}/db/append-with-drivermanager.xml | 0
.../db/append-with-pooled-datasource.xml | 0
.../appenders/mail/CounterBasedEvaluator.java | 63 +++++++
.../main/java/chapters/appenders/mail/EMail.java | 69 ++++++++
.../java/chapters/appenders/mail/Marked_EMail.java | 70 ++++++++
.../appenders}/mail/gmailSSL.xml | 0
.../appenders}/mail/gmailSTARTTLS.xml | 0
.../appenders}/mail/mail1.xml | 0
.../appenders}/mail/mail2.xml | 0
.../appenders}/mail/mail3.xml | 0
.../appenders}/mail/mailWithMarker.xml | 0
.../appenders/onJoran/SimpleConfigurator.java | 64 +++++++
.../appenders/onJoran/calculator/AddAction.java | 69 ++++++++
.../appenders/onJoran/calculator/Calculator1.java | 55 ++++++
.../appenders/onJoran/calculator/Calculator2.java | 64 +++++++
.../onJoran/calculator/ComputationAction1.java | 61 +++++++
.../onJoran/calculator/ComputationAction2.java | 86 +++++++++
.../onJoran/calculator/LiteralAction.java | 58 +++++++
.../onJoran/calculator/MultiplyAction.java | 66 +++++++
.../appenders/onJoran}/calculator/calculator1.xml | 0
.../appenders/onJoran}/calculator/calculator2.xml | 0
.../appenders/onJoran}/calculator/calculator3.xml | 0
.../appenders/onJoran}/calculator/readme.txt | 0
.../appenders/onJoran/helloWorld/HelloWorld.java | 48 +++++
.../onJoran/helloWorld/HelloWorldAction.java | 35 ++++
.../appenders/onJoran}/helloWorld/hello.xml | 0
.../appenders/onJoran}/helloWorld/readme.txt | 0
.../appenders/onJoran/implicit/NOPAction.java | 34 ++++
.../appenders/onJoran/implicit/PrintMe.java | 61 +++++++
.../onJoran/implicit/PrintMeImplicitAction.java | 44 +++++
.../appenders/onJoran}/implicit/implicit1.xml | 0
.../appenders/onJoran}/implicit/readme.txt | 0
.../onJoran/newRule/NewRuleCalculator.java | 63 +++++++
.../appenders/onJoran}/newRule/new-rule.xml | 0
.../appenders/onJoran}/newRule/readme.txt | 0
.../java/chapters/appenders/sift/SiftExample.java | 55 ++++++
.../appenders}/sift/access-siftingFile.xml | 0
.../appenders}/sift/byUserid.xml | 0
.../chapters/appenders/socket/SocketClient1.java | 80 +++++++++
.../chapters/appenders/socket/SocketClient2.java | 73 ++++++++
.../appenders}/socket/client1.xml | 0
.../appenders}/socket/server1.xml | 0
.../appenders}/socket/server2.xml | 0
.../java/chapters/appenders/sub/sample/Bar.java | 34 ++++
.../src/main/java/chapters/architecture/Bar.java | 25 +++
.../java/chapters/architecture/HelloWorld2.java | 28 +++
.../chapters/architecture/MyAppWithConfigFile.java | 45 +++++
.../architecture}/sample-config-1.xml | 0
.../architecture}/sample-config-2.xml | 0
.../architecture}/sample-config-3.xml | 0
.../configuration/AddStatusListenerApp.java | 41 +++++
.../src/main/java/chapters/configuration/Foo.java | 26 +++
.../main/java/chapters/configuration/MyApp1.java | 30 ++++
.../main/java/chapters/configuration/MyApp2.java | 36 ++++
.../main/java/chapters/configuration/MyApp3.java | 53 ++++++
.../configuration}/additivityFlag.xml | 0
.../configuration}/containingConfig.xml | 0
.../configuration}/contextName.xml | 0
.../configuration}/duplicate.xml | 0
.../configuration}/includedConfig.xml | 0
.../configuration}/insertFromJNDI.xml | 0
.../configuration}/multiple.xml | 0
.../configuration}/onConsoleStatusListener.xml | 0
.../configuration}/restricted.xml | 0
.../configuration}/sample0.xml | 0
.../configuration}/sample1.xml | 0
.../configuration}/sample2.xml | 0
.../configuration}/sample3.xml | 0
.../configuration}/sample4.xml | 0
.../{chapter3 => chapters/configuration}/scan1.xml | 0
.../{chapter3 => chapters/configuration}/scan2.xml | 0
.../configuration}/variableSubstitution1.xml | 0
.../configuration}/variableSubstitution2.xml | 0
.../configuration}/variableSubstitution3.xml | 0
.../configuration}/variableSubstitution4.xml | 0
.../configuration}/variables1.properties | 0
.../configuration}/variables2.properties | 0
.../main/java/chapters/filters/FilterEvents.java | 59 +++++++
.../src/main/java/chapters/filters/GoMDC.java | 48 +++++
.../main/java/chapters/filters/SampleFilter.java | 30 ++++
.../java/chapters/filters/SampleTurboFilter.java | 59 +++++++
.../filters}/accessEventEvaluator.xml | 0
.../filters}/accessEventEvaluator2.xml | 0
.../filters}/basicConfiguration.xml | 0
.../filters}/basicEventEvaluator.xml | 0
.../filters}/duplicateMessage.xml | 0
.../filters}/evaluatorWithMatcher.xml | 0
.../filters}/levelFilterConfig.xml | 0
.../{chapter6 => chapters/filters}/mdcfilter.xml | 0
.../filters}/sampleFilterConfig.xml | 0
.../filters}/sampleTurboFilterConfig.xml | 0
.../filters}/thresholdFilterConfig.xml | 0
.../filters}/turboFilters.xml | 0
.../java/chapters/introduction/HelloWorld1.java | 26 +++
.../java/chapters/introduction/HelloWorld2.java | 31 ++++
.../chapters/layouts/CallerEvaluatorExample.java | 48 +++++
.../layouts/ExceptionEvaluatorExample.java | 47 +++++
.../java/chapters/layouts/MySampleConverter.java | 50 ++++++
.../main/java/chapters/layouts/MySampleLayout.java | 36 ++++
.../java/chapters/layouts/MySampleLayout2.java | 54 ++++++
.../main/java/chapters/layouts/PatternSample.java | 42 +++++
.../main/java/chapters/layouts/SampleLogging.java | 44 +++++
.../main/java/chapters/layouts/TestException.java | 23 +++
.../layouts}/callerEvaluatorConfig.xml | 0
.../layouts}/exceptionEvaluatorConfig.xml | 0
.../layouts}/mySampleConverterConfig.xml | 0
.../layouts}/sampleLayoutConfig.xml | 0
.../layouts}/sampleLayoutConfig2.xml | 0
.../src/main/java/chapters/mdc/NumberCruncher.java | 29 +++
.../java/chapters/mdc/NumberCruncherClient.java | 86 +++++++++
.../java/chapters/mdc/NumberCruncherServer.java | 162 +++++++++++++++++
.../src/main/java/chapters/mdc/SimpleMDC.java | 94 ++++++++++
.../main/java/chapters/mdc/UserServletFilter.java | 98 +++++++++++
.../main/java/{chapter7 => chapters/mdc}/mdc1.xml | 0
.../java/{chapter7 => chapters/mdc}/simpleMDC.xml | 0
.../chapters/migrationFromLog4j/Log4jMain.java | 34 ++++
.../chapters/migrationFromLog4j/LogbackMain.java | 48 +++++
.../migrationFromLog4j/TrivialLog4jAppender.java | 34 ++++
.../migrationFromLog4j/TrivialLog4jLayout.java | 43 +++++
.../migrationFromLog4j/TrivialLogbackAppender.java | 60 +++++++
.../migrationFromLog4j/TrivialLogbackLayout.java | 33 ++++
.../migrationFromLog4j}/log4jTrivial.properties | 0
.../migrationFromLog4j}/logback-trivial.xml | 0
.../src/site/pages/manual/architecture.html | 10 +-
.../src/site/pages/manual/configuration.html | 170 +++++++++---------
.../src/site/pages/manual/introduction.html | 32 ++--
logback-site/src/site/pages/manual/onJoran.html | 2 +-
.../src/site/pages/manual/underTheHood.html | 2 +-
logback-site/src/site/pages/templates/footer.js | 4 +-
.../architecture}/underTheHoodSequence2.gif | Bin 71138 -> 71138 bytes
.../architecture}/underTheHoodSequence2_small.gif | Bin 23063 -> 23063 bytes
.../configuration}/appenderSyntax.png | Bin 4541 -> 4541 bytes
.../configuration}/basicSyntax.png | Bin 2950 -> 2950 bytes
.../configuration}/lbClassicStatus.jpg | Bin 176313 -> 176313 bytes
.../configuration}/sample.xml | 0
223 files changed, 3391 insertions(+), 3383 deletions(-)
delete mode 100644 logback-examples/src/main/java/chapter1/HelloWorld1.java
delete mode 100644 logback-examples/src/main/java/chapter1/HelloWorld2.java
delete mode 100644 logback-examples/src/main/java/chapter10/SimpleConfigurator.java
delete mode 100644 logback-examples/src/main/java/chapter10/calculator/AddAction.java
delete mode 100644 logback-examples/src/main/java/chapter10/calculator/Calculator1.java
delete mode 100644 logback-examples/src/main/java/chapter10/calculator/Calculator2.java
delete mode 100644 logback-examples/src/main/java/chapter10/calculator/ComputationAction1.java
delete mode 100644 logback-examples/src/main/java/chapter10/calculator/ComputationAction2.java
delete mode 100644 logback-examples/src/main/java/chapter10/calculator/LiteralAction.java
delete mode 100644 logback-examples/src/main/java/chapter10/calculator/MultiplyAction.java
delete mode 100644 logback-examples/src/main/java/chapter10/helloWorld/HelloWorld.java
delete mode 100644 logback-examples/src/main/java/chapter10/helloWorld/HelloWorldAction.java
delete mode 100644 logback-examples/src/main/java/chapter10/implicit/NOPAction.java
delete mode 100644 logback-examples/src/main/java/chapter10/implicit/PrintMe.java
delete mode 100644 logback-examples/src/main/java/chapter10/implicit/PrintMeImplicitAction.java
delete mode 100644 logback-examples/src/main/java/chapter10/newRule/NewRuleCalculator.java
delete mode 100644 logback-examples/src/main/java/chapter11/Log4jMain.java
delete mode 100644 logback-examples/src/main/java/chapter11/LogbackMain.java
delete mode 100644 logback-examples/src/main/java/chapter11/TrivialLog4jAppender.java
delete mode 100644 logback-examples/src/main/java/chapter11/TrivialLog4jLayout.java
delete mode 100644 logback-examples/src/main/java/chapter11/TrivialLogbackAppender.java
delete mode 100644 logback-examples/src/main/java/chapter11/TrivialLogbackLayout.java
delete mode 100644 logback-examples/src/main/java/chapter2/Bar.java
delete mode 100644 logback-examples/src/main/java/chapter2/HelloWorld2.java
delete mode 100644 logback-examples/src/main/java/chapter2/MyAppWithConfigFile.java
delete mode 100644 logback-examples/src/main/java/chapter3/AddStatusListenerApp.java
delete mode 100644 logback-examples/src/main/java/chapter3/Foo.java
delete mode 100644 logback-examples/src/main/java/chapter3/MyApp1.java
delete mode 100644 logback-examples/src/main/java/chapter3/MyApp2.java
delete mode 100644 logback-examples/src/main/java/chapter3/MyApp3.java
delete mode 100644 logback-examples/src/main/java/chapter4/ConfigurationTester.java
delete mode 100644 logback-examples/src/main/java/chapter4/CountingConsoleAppender.java
delete mode 100644 logback-examples/src/main/java/chapter4/ExitWoes1.java
delete mode 100644 logback-examples/src/main/java/chapter4/ExitWoes2.java
delete mode 100644 logback-examples/src/main/java/chapter4/IO.java
delete mode 100644 logback-examples/src/main/java/chapter4/mail/CounterBasedEvaluator.java
delete mode 100644 logback-examples/src/main/java/chapter4/mail/EMail.java
delete mode 100644 logback-examples/src/main/java/chapter4/mail/Marked_EMail.java
delete mode 100644 logback-examples/src/main/java/chapter4/sift/SiftExample.java
delete mode 100644 logback-examples/src/main/java/chapter4/socket/SocketClient1.java
delete mode 100644 logback-examples/src/main/java/chapter4/socket/SocketClient2.java
delete mode 100644 logback-examples/src/main/java/chapter4/sub/sample/Bar.java
delete mode 100644 logback-examples/src/main/java/chapter5/CallerEvaluatorExample.java
delete mode 100644 logback-examples/src/main/java/chapter5/ExceptionEvaluatorExample.java
delete mode 100644 logback-examples/src/main/java/chapter5/MySampleConverter.java
delete mode 100644 logback-examples/src/main/java/chapter5/MySampleLayout.java
delete mode 100644 logback-examples/src/main/java/chapter5/MySampleLayout2.java
delete mode 100644 logback-examples/src/main/java/chapter5/PatternSample.java
delete mode 100644 logback-examples/src/main/java/chapter5/SampleLogging.java
delete mode 100644 logback-examples/src/main/java/chapter5/TestException.java
delete mode 100644 logback-examples/src/main/java/chapter6/FilterEvents.java
delete mode 100644 logback-examples/src/main/java/chapter6/GoMDC.java
delete mode 100644 logback-examples/src/main/java/chapter6/SampleFilter.java
delete mode 100644 logback-examples/src/main/java/chapter6/SampleTurboFilter.java
delete mode 100644 logback-examples/src/main/java/chapter7/NumberCruncher.java
delete mode 100644 logback-examples/src/main/java/chapter7/NumberCruncherClient.java
delete mode 100644 logback-examples/src/main/java/chapter7/NumberCruncherServer.java
delete mode 100644 logback-examples/src/main/java/chapter7/SimpleMDC.java
delete mode 100644 logback-examples/src/main/java/chapter7/UserServletFilter.java
create mode 100644 logback-examples/src/main/java/chapters/appenders/ConfigurationTester.java
create mode 100644 logback-examples/src/main/java/chapters/appenders/CountingConsoleAppender.java
create mode 100644 logback-examples/src/main/java/chapters/appenders/ExitWoes1.java
create mode 100644 logback-examples/src/main/java/chapters/appenders/ExitWoes2.java
create mode 100644 logback-examples/src/main/java/chapters/appenders/IO.java
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/conf/access/logback-DB.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/conf/access/logback-SMTP.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/conf/logback-Console.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/conf/logback-HtmlToConsole.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/conf/logback-JMSQueue.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/conf/logback-JMSTopic.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/conf/logback-MDC.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/conf/logback-PrudentTimeBasedRolling.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/conf/logback-RollingFixedWindow.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/conf/logback-RollingSizeBased.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/conf/logback-RollingTimeBased.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/conf/logback-SMTP.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/conf/logback-SMTPWithHtml.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/conf/logback-fileAppender.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/conf/logback-syslog.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/conf/logback-timestamp.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/conf/logbback-sizeAndTime.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/countingConsole.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/db/append-and-share-with-jndi.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/db/append-toMySQL-with-datasource-and-pooling.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/db/append-toMySQL-with-datasource.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/db/append-toMySQL-with-driverManager.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/db/append-with-c3p0.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/db/append-with-datasource.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/db/append-with-drivermanager.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/db/append-with-pooled-datasource.xml (100%)
create mode 100644 logback-examples/src/main/java/chapters/appenders/mail/CounterBasedEvaluator.java
create mode 100644 logback-examples/src/main/java/chapters/appenders/mail/EMail.java
create mode 100644 logback-examples/src/main/java/chapters/appenders/mail/Marked_EMail.java
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/mail/gmailSSL.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/mail/gmailSTARTTLS.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/mail/mail1.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/mail/mail2.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/mail/mail3.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/mail/mailWithMarker.xml (100%)
create mode 100644 logback-examples/src/main/java/chapters/appenders/onJoran/SimpleConfigurator.java
create mode 100644 logback-examples/src/main/java/chapters/appenders/onJoran/calculator/AddAction.java
create mode 100644 logback-examples/src/main/java/chapters/appenders/onJoran/calculator/Calculator1.java
create mode 100644 logback-examples/src/main/java/chapters/appenders/onJoran/calculator/Calculator2.java
create mode 100644 logback-examples/src/main/java/chapters/appenders/onJoran/calculator/ComputationAction1.java
create mode 100644 logback-examples/src/main/java/chapters/appenders/onJoran/calculator/ComputationAction2.java
create mode 100644 logback-examples/src/main/java/chapters/appenders/onJoran/calculator/LiteralAction.java
create mode 100644 logback-examples/src/main/java/chapters/appenders/onJoran/calculator/MultiplyAction.java
rename logback-examples/src/main/java/{chapter10 => chapters/appenders/onJoran}/calculator/calculator1.xml (100%)
rename logback-examples/src/main/java/{chapter10 => chapters/appenders/onJoran}/calculator/calculator2.xml (100%)
rename logback-examples/src/main/java/{chapter10 => chapters/appenders/onJoran}/calculator/calculator3.xml (100%)
rename logback-examples/src/main/java/{chapter10 => chapters/appenders/onJoran}/calculator/readme.txt (100%)
create mode 100644 logback-examples/src/main/java/chapters/appenders/onJoran/helloWorld/HelloWorld.java
create mode 100644 logback-examples/src/main/java/chapters/appenders/onJoran/helloWorld/HelloWorldAction.java
rename logback-examples/src/main/java/{chapter10 => chapters/appenders/onJoran}/helloWorld/hello.xml (100%)
rename logback-examples/src/main/java/{chapter10 => chapters/appenders/onJoran}/helloWorld/readme.txt (100%)
create mode 100644 logback-examples/src/main/java/chapters/appenders/onJoran/implicit/NOPAction.java
create mode 100644 logback-examples/src/main/java/chapters/appenders/onJoran/implicit/PrintMe.java
create mode 100644 logback-examples/src/main/java/chapters/appenders/onJoran/implicit/PrintMeImplicitAction.java
rename logback-examples/src/main/java/{chapter10 => chapters/appenders/onJoran}/implicit/implicit1.xml (100%)
rename logback-examples/src/main/java/{chapter10 => chapters/appenders/onJoran}/implicit/readme.txt (100%)
create mode 100644 logback-examples/src/main/java/chapters/appenders/onJoran/newRule/NewRuleCalculator.java
rename logback-examples/src/main/java/{chapter10 => chapters/appenders/onJoran}/newRule/new-rule.xml (100%)
rename logback-examples/src/main/java/{chapter10 => chapters/appenders/onJoran}/newRule/readme.txt (100%)
create mode 100644 logback-examples/src/main/java/chapters/appenders/sift/SiftExample.java
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/sift/access-siftingFile.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/sift/byUserid.xml (100%)
create mode 100644 logback-examples/src/main/java/chapters/appenders/socket/SocketClient1.java
create mode 100644 logback-examples/src/main/java/chapters/appenders/socket/SocketClient2.java
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/socket/client1.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/socket/server1.xml (100%)
rename logback-examples/src/main/java/{chapter4 => chapters/appenders}/socket/server2.xml (100%)
create mode 100644 logback-examples/src/main/java/chapters/appenders/sub/sample/Bar.java
create mode 100644 logback-examples/src/main/java/chapters/architecture/Bar.java
create mode 100644 logback-examples/src/main/java/chapters/architecture/HelloWorld2.java
create mode 100644 logback-examples/src/main/java/chapters/architecture/MyAppWithConfigFile.java
rename logback-examples/src/main/java/{chapter2 => chapters/architecture}/sample-config-1.xml (100%)
rename logback-examples/src/main/java/{chapter2 => chapters/architecture}/sample-config-2.xml (100%)
rename logback-examples/src/main/java/{chapter2 => chapters/architecture}/sample-config-3.xml (100%)
create mode 100644 logback-examples/src/main/java/chapters/configuration/AddStatusListenerApp.java
create mode 100644 logback-examples/src/main/java/chapters/configuration/Foo.java
create mode 100644 logback-examples/src/main/java/chapters/configuration/MyApp1.java
create mode 100644 logback-examples/src/main/java/chapters/configuration/MyApp2.java
create mode 100644 logback-examples/src/main/java/chapters/configuration/MyApp3.java
rename logback-examples/src/main/java/{chapter3 => chapters/configuration}/additivityFlag.xml (100%)
rename logback-examples/src/main/java/{chapter3 => chapters/configuration}/containingConfig.xml (100%)
rename logback-examples/src/main/java/{chapter3 => chapters/configuration}/contextName.xml (100%)
rename logback-examples/src/main/java/{chapter3 => chapters/configuration}/duplicate.xml (100%)
rename logback-examples/src/main/java/{chapter3 => chapters/configuration}/includedConfig.xml (100%)
rename logback-examples/src/main/java/{chapter3 => chapters/configuration}/insertFromJNDI.xml (100%)
rename logback-examples/src/main/java/{chapter3 => chapters/configuration}/multiple.xml (100%)
rename logback-examples/src/main/java/{chapter3 => chapters/configuration}/onConsoleStatusListener.xml (100%)
rename logback-examples/src/main/java/{chapter3 => chapters/configuration}/restricted.xml (100%)
rename logback-examples/src/main/java/{chapter3 => chapters/configuration}/sample0.xml (100%)
rename logback-examples/src/main/java/{chapter3 => chapters/configuration}/sample1.xml (100%)
rename logback-examples/src/main/java/{chapter3 => chapters/configuration}/sample2.xml (100%)
rename logback-examples/src/main/java/{chapter3 => chapters/configuration}/sample3.xml (100%)
rename logback-examples/src/main/java/{chapter3 => chapters/configuration}/sample4.xml (100%)
rename logback-examples/src/main/java/{chapter3 => chapters/configuration}/scan1.xml (100%)
rename logback-examples/src/main/java/{chapter3 => chapters/configuration}/scan2.xml (100%)
rename logback-examples/src/main/java/{chapter3 => chapters/configuration}/variableSubstitution1.xml (100%)
rename logback-examples/src/main/java/{chapter3 => chapters/configuration}/variableSubstitution2.xml (100%)
rename logback-examples/src/main/java/{chapter3 => chapters/configuration}/variableSubstitution3.xml (100%)
rename logback-examples/src/main/java/{chapter3 => chapters/configuration}/variableSubstitution4.xml (100%)
rename logback-examples/src/main/java/{chapter3 => chapters/configuration}/variables1.properties (100%)
rename logback-examples/src/main/java/{chapter3 => chapters/configuration}/variables2.properties (100%)
create mode 100644 logback-examples/src/main/java/chapters/filters/FilterEvents.java
create mode 100644 logback-examples/src/main/java/chapters/filters/GoMDC.java
create mode 100644 logback-examples/src/main/java/chapters/filters/SampleFilter.java
create mode 100644 logback-examples/src/main/java/chapters/filters/SampleTurboFilter.java
rename logback-examples/src/main/java/{chapter6 => chapters/filters}/accessEventEvaluator.xml (100%)
rename logback-examples/src/main/java/{chapter6 => chapters/filters}/accessEventEvaluator2.xml (100%)
rename logback-examples/src/main/java/{chapter6 => chapters/filters}/basicConfiguration.xml (100%)
rename logback-examples/src/main/java/{chapter6 => chapters/filters}/basicEventEvaluator.xml (100%)
rename logback-examples/src/main/java/{chapter6 => chapters/filters}/duplicateMessage.xml (100%)
rename logback-examples/src/main/java/{chapter6 => chapters/filters}/evaluatorWithMatcher.xml (100%)
rename logback-examples/src/main/java/{chapter6 => chapters/filters}/levelFilterConfig.xml (100%)
rename logback-examples/src/main/java/{chapter6 => chapters/filters}/mdcfilter.xml (100%)
rename logback-examples/src/main/java/{chapter6 => chapters/filters}/sampleFilterConfig.xml (100%)
rename logback-examples/src/main/java/{chapter6 => chapters/filters}/sampleTurboFilterConfig.xml (100%)
rename logback-examples/src/main/java/{chapter6 => chapters/filters}/thresholdFilterConfig.xml (100%)
rename logback-examples/src/main/java/{chapter6 => chapters/filters}/turboFilters.xml (100%)
create mode 100644 logback-examples/src/main/java/chapters/introduction/HelloWorld1.java
create mode 100644 logback-examples/src/main/java/chapters/introduction/HelloWorld2.java
create mode 100644 logback-examples/src/main/java/chapters/layouts/CallerEvaluatorExample.java
create mode 100644 logback-examples/src/main/java/chapters/layouts/ExceptionEvaluatorExample.java
create mode 100644 logback-examples/src/main/java/chapters/layouts/MySampleConverter.java
create mode 100644 logback-examples/src/main/java/chapters/layouts/MySampleLayout.java
create mode 100644 logback-examples/src/main/java/chapters/layouts/MySampleLayout2.java
create mode 100644 logback-examples/src/main/java/chapters/layouts/PatternSample.java
create mode 100644 logback-examples/src/main/java/chapters/layouts/SampleLogging.java
create mode 100644 logback-examples/src/main/java/chapters/layouts/TestException.java
rename logback-examples/src/main/java/{chapter5 => chapters/layouts}/callerEvaluatorConfig.xml (100%)
rename logback-examples/src/main/java/{chapter5 => chapters/layouts}/exceptionEvaluatorConfig.xml (100%)
rename logback-examples/src/main/java/{chapter5 => chapters/layouts}/mySampleConverterConfig.xml (100%)
rename logback-examples/src/main/java/{chapter5 => chapters/layouts}/sampleLayoutConfig.xml (100%)
rename logback-examples/src/main/java/{chapter5 => chapters/layouts}/sampleLayoutConfig2.xml (100%)
create mode 100644 logback-examples/src/main/java/chapters/mdc/NumberCruncher.java
create mode 100644 logback-examples/src/main/java/chapters/mdc/NumberCruncherClient.java
create mode 100644 logback-examples/src/main/java/chapters/mdc/NumberCruncherServer.java
create mode 100644 logback-examples/src/main/java/chapters/mdc/SimpleMDC.java
create mode 100644 logback-examples/src/main/java/chapters/mdc/UserServletFilter.java
rename logback-examples/src/main/java/{chapter7 => chapters/mdc}/mdc1.xml (100%)
rename logback-examples/src/main/java/{chapter7 => chapters/mdc}/simpleMDC.xml (100%)
create mode 100644 logback-examples/src/main/java/chapters/migrationFromLog4j/Log4jMain.java
create mode 100644 logback-examples/src/main/java/chapters/migrationFromLog4j/LogbackMain.java
create mode 100644 logback-examples/src/main/java/chapters/migrationFromLog4j/TrivialLog4jAppender.java
create mode 100644 logback-examples/src/main/java/chapters/migrationFromLog4j/TrivialLog4jLayout.java
create mode 100644 logback-examples/src/main/java/chapters/migrationFromLog4j/TrivialLogbackAppender.java
create mode 100644 logback-examples/src/main/java/chapters/migrationFromLog4j/TrivialLogbackLayout.java
rename logback-examples/src/main/java/{chapter11 => chapters/migrationFromLog4j}/log4jTrivial.properties (100%)
rename logback-examples/src/main/java/{chapter11 => chapters/migrationFromLog4j}/logback-trivial.xml (100%)
rename logback-site/src/site/resources/manual/images/{chapter2 => chapters/architecture}/underTheHoodSequence2.gif (100%)
rename logback-site/src/site/resources/manual/images/{chapter2 => chapters/architecture}/underTheHoodSequence2_small.gif (100%)
rename logback-site/src/site/resources/manual/images/{chapter3 => chapters/configuration}/appenderSyntax.png (100%)
rename logback-site/src/site/resources/manual/images/{chapter3 => chapters/configuration}/basicSyntax.png (100%)
rename logback-site/src/site/resources/manual/images/{chapter3 => chapters/configuration}/lbClassicStatus.jpg (100%)
rename logback-site/src/site/resources/manual/images/{chapter3 => chapters/configuration}/sample.xml (100%)
hooks/post-receive
--
Logback: the generic, reliable, fast and flexible logging framework.
1
0

[GIT] Logback: the generic, reliable, fast and flexible logging framework. branch, encoder, updated. v0.9.18-44-gadae893
by git-noreply@pixie.qos.ch 23 Feb '10
by git-noreply@pixie.qos.ch 23 Feb '10
23 Feb '10
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Logback: the generic, reliable, fast and flexible logging framework.".
The branch, encoder has been updated
via adae89397fcecee04c69f241db87427cc218d254 (commit)
from 87ceb3d44cefcf454b8635440bc75a37928961ee (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=adae89397fcecee04c69f241…
http://github.com/ceki/logback/commit/adae89397fcecee04c69f241db87427cc218d…
commit adae89397fcecee04c69f241db87427cc218d254
Author: Ceki Gulcu <ceki(a)qos.ch>
Date: Tue Feb 23 16:03:31 2010 +0100
- Given the IO performance is pretty good, in order to simplify usage
removed the immediateFlush, BufferedIO properties from FileAppender
Only immediateFlush can make a significant difference in presense of
other IO activity on a mechanical HD.
diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/multiJVM/FileAppenderPerf.java b/logback-classic/src/test/java/ch/qos/logback/classic/multiJVM/FileAppenderPerf.java
index 1a46b28..ddddea0 100644
--- a/logback-classic/src/test/java/ch/qos/logback/classic/multiJVM/FileAppenderPerf.java
+++ b/logback-classic/src/test/java/ch/qos/logback/classic/multiJVM/FileAppenderPerf.java
@@ -41,8 +41,6 @@ public class FileAppenderPerf {
fa.setEncoder(patternLayout);
fa.setFile(filename);
fa.setAppend(false);
- fa.getEncoder().setImmediateFlush(true);
- fa.setBufferedIO(false);
fa.setPrudent(safetyMode);
fa.setContext(loggerContext);
fa.start();
diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/multiJVM/SafeModeFileAppender.java b/logback-classic/src/test/java/ch/qos/logback/classic/multiJVM/SafeModeFileAppender.java
index c2f4555..ea2c2e9 100644
--- a/logback-classic/src/test/java/ch/qos/logback/classic/multiJVM/SafeModeFileAppender.java
+++ b/logback-classic/src/test/java/ch/qos/logback/classic/multiJVM/SafeModeFileAppender.java
@@ -66,8 +66,6 @@ public class SafeModeFileAppender {
fa.setEncoder(patternLayout);
fa.setFile(filename);
fa.setAppend(true);
- fa.getEncoder().setImmediateFlush(true);
- fa.setBufferedIO(false);
fa.setPrudent(safetyMode);
fa.setContext(loggerContext);
fa.start();
diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/multiJVM/SafeModeRollingFileAppender.java b/logback-classic/src/test/java/ch/qos/logback/classic/multiJVM/SafeModeRollingFileAppender.java
index ee5f30d..96b0c41 100644
--- a/logback-classic/src/test/java/ch/qos/logback/classic/multiJVM/SafeModeRollingFileAppender.java
+++ b/logback-classic/src/test/java/ch/qos/logback/classic/multiJVM/SafeModeRollingFileAppender.java
@@ -69,8 +69,6 @@ public class SafeModeRollingFileAppender {
rfa.setEncoder(patternLayout);
rfa.setAppend(true);
- rfa.getEncoder().setImmediateFlush(true);
- rfa.setBufferedIO(false);
rfa.setPrudent(safetyMode);
rfa.setContext(loggerContext);
diff --git a/logback-core/src/main/java/ch/qos/logback/core/FileAppender.java b/logback-core/src/main/java/ch/qos/logback/core/FileAppender.java
index dbd0414..418537b 100644
--- a/logback-core/src/main/java/ch/qos/logback/core/FileAppender.java
+++ b/logback-core/src/main/java/ch/qos/logback/core/FileAppender.java
@@ -18,7 +18,6 @@ import java.io.IOException;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
-import ch.qos.logback.core.encoder.Encoder;
import ch.qos.logback.core.recovery.ResilientFileOutputStream;
import ch.qos.logback.core.util.FileUtil;
@@ -45,11 +44,6 @@ public class FileAppender<E> extends WriterAppender<E> {
protected String fileName = null;
/**
- * Do we do bufferedIO?
- */
- protected boolean bufferedIO = false;
-
- /**
* The size of the IO buffer. Default is 8K.
*/
protected int bufferSize = 8 * 1024;
@@ -120,16 +114,6 @@ public class FileAppender<E> extends WriterAppender<E> {
setAppend(true);
addWarn("Setting \"Append\" property to true on account of \"Prudent\" mode");
}
- Encoder encoder = getEncoder();
- if (encoder.getImmediateFlush() == false) {
- encoder.setImmediateFlush(true);
- addWarn("Setting \"ImmediateFlush\" to true on account of \"Prudent\" mode");
- }
-
- if (bufferedIO == true) {
- setBufferedIO(false);
- addWarn("Setting \"BufferedIO\" property to false on account of \"Prudent\" mode");
- }
}
try {
@@ -184,24 +168,11 @@ public class FileAppender<E> extends WriterAppender<E> {
ResilientFileOutputStream resilientFos = new ResilientFileOutputStream(
file, append);
- // FileOutputStream fileOutputStream = new FileOutputStream(file_name,
- // append);
-
- // Writer w = createWriter(fileOutputStream);
- // if (bufferedIO) {
- // w = new BufferedWriter(w, bufferSize);
- // }
setOutputStream(resilientFos);
}
}
- public boolean isBufferedIO() {
- return bufferedIO;
- }
- public void setBufferedIO(boolean bufferedIO) {
- this.bufferedIO = bufferedIO;
- }
public int getBufferSize() {
return bufferSize;
diff --git a/logback-core/src/main/java/ch/qos/logback/core/encoder/Encoder.java b/logback-core/src/main/java/ch/qos/logback/core/encoder/Encoder.java
index 9a989a3..821db3d 100644
--- a/logback-core/src/main/java/ch/qos/logback/core/encoder/Encoder.java
+++ b/logback-core/src/main/java/ch/qos/logback/core/encoder/Encoder.java
@@ -24,7 +24,4 @@ public interface Encoder<E> extends ContextAware, LifeCycle {
void doEncode(E event) throws IOException;
void init(OutputStream os) throws IOException;
void close() throws IOException;
-
- public boolean getImmediateFlush();
- public void setImmediateFlush(boolean value);
}
diff --git a/logback-core/src/main/java/ch/qos/logback/core/encoder/EncoderBase.java b/logback-core/src/main/java/ch/qos/logback/core/encoder/EncoderBase.java
index ebbec74..d5e93d7 100644
--- a/logback-core/src/main/java/ch/qos/logback/core/encoder/EncoderBase.java
+++ b/logback-core/src/main/java/ch/qos/logback/core/encoder/EncoderBase.java
@@ -10,7 +10,6 @@ abstract public class EncoderBase<E> extends ContextAwareBase implements Encoder
protected boolean started;
protected OutputStream outputStream;
- private boolean immediateFlush = true;
public void init(OutputStream os) throws IOException {
this.outputStream = os;
@@ -27,16 +26,5 @@ abstract public class EncoderBase<E> extends ContextAwareBase implements Encoder
public void stop() {
started = false;
}
-
-
- /**
- * Returns value of the <b>ImmediateFlush</b> option.
- */
- public boolean getImmediateFlush() {
- return immediateFlush;
- }
+}
- public void setImmediateFlush(boolean value) {
- immediateFlush = value;
- }
-}
diff --git a/logback-core/src/main/java/ch/qos/logback/core/recovery/RecoveryCoordinator.java b/logback-core/src/main/java/ch/qos/logback/core/recovery/RecoveryCoordinator.java
index eefdbf8..7f4b99f 100644
--- a/logback-core/src/main/java/ch/qos/logback/core/recovery/RecoveryCoordinator.java
+++ b/logback-core/src/main/java/ch/qos/logback/core/recovery/RecoveryCoordinator.java
@@ -15,16 +15,41 @@ package ch.qos.logback.core.recovery;
public class RecoveryCoordinator {
+ static long BACKOFF_COEFFICIENT_MIN = 100;
+ static long BACKOFF_COEFFICIENT_MAX = 409600; // BACKOFF_COEFFICIENT_MIN * 4^6
- long next = System.currentTimeMillis()+100;
+ private long backOffCoefficient = BACKOFF_COEFFICIENT_MIN;
+
+ private static long UNSET = -1;
+ private long currentTime = UNSET;
+ long next = System.currentTimeMillis()+getBackoffCoefficient();
public boolean isTooSoon() {
- long now =System.currentTimeMillis();
+ long now = getCurrentTime();
if(now > next) {
- next = now + 100;
+ next = now + getBackoffCoefficient();
return false;
} else {
return true;
}
}
+
+ void setCurrentTime(long forcedTime) {
+ currentTime = forcedTime;
+ }
+
+ private long getCurrentTime() {
+ if(currentTime != UNSET) {
+ return currentTime;
+ }
+ return System.currentTimeMillis();
+ }
+
+ private long getBackoffCoefficient() {
+ long currentCoeff = backOffCoefficient;
+ if(backOffCoefficient < BACKOFF_COEFFICIENT_MAX) {
+ backOffCoefficient*=4;
+ }
+ return currentCoeff;
+ }
}
diff --git a/logback-core/src/test/java/ch/qos/logback/core/AllCoreTest.java b/logback-core/src/test/java/ch/qos/logback/core/AllCoreTest.java
index d4eca59..fc3618e 100644
--- a/logback-core/src/test/java/ch/qos/logback/core/AllCoreTest.java
+++ b/logback-core/src/test/java/ch/qos/logback/core/AllCoreTest.java
@@ -28,7 +28,8 @@ import org.junit.runners.Suite.SuiteClasses;
ch.qos.logback.core.spi.PackageTest.class,
ch.qos.logback.core.rolling.PackageTest.class,
ch.qos.logback.core.sift.PackageTest.class,
- ch.qos.logback.core.encoder.PackageTest.class})
+ ch.qos.logback.core.encoder.PackageTest.class,
+ ch.qos.logback.core.recovery.PackageTest.class})
public class AllCoreTest {
}
diff --git a/logback-core/src/test/java/ch/qos/logback/core/appender/FileAppenderTest.java b/logback-core/src/test/java/ch/qos/logback/core/appender/FileAppenderTest.java
index 21ffe73..0c3f5d1 100644
--- a/logback-core/src/test/java/ch/qos/logback/core/appender/FileAppenderTest.java
+++ b/logback-core/src/test/java/ch/qos/logback/core/appender/FileAppenderTest.java
@@ -33,6 +33,7 @@ import ch.qos.logback.core.status.Status;
import ch.qos.logback.core.status.StatusManager;
import ch.qos.logback.core.util.CoreTestConstants;
import ch.qos.logback.core.util.FileUtil;
+import ch.qos.logback.core.util.StatusPrinter;
public class FileAppenderTest extends AbstractAppenderTest<Object> {
@@ -106,20 +107,17 @@ public class FileAppenderTest extends AbstractAppenderTest<Object> {
appender.setContext(context);
appender.setAppend(false);
- appender.getEncoder().setImmediateFlush(false);
- appender.setBufferedIO(true);
appender.setPrudent(true);
appender.start();
- assertTrue(appender.getEncoder().getImmediateFlush());
assertTrue(appender.isAppend());
- assertFalse(appender.isBufferedIO());
StatusManager sm = context.getStatusManager();
+ StatusPrinter.print(context);
assertEquals(Status.WARN, sm.getLevel());
List<Status> statusList = sm.getCopyOfStatusList();
- assertTrue("Expecting status list size to be larger than 3, but was "
- + statusList.size(), statusList.size() > 3);
+ assertTrue("Expecting status list size to be 2 or larger, but was "
+ + statusList.size(), statusList.size() >= 2);
String msg1 = statusList.get(1).getMessage();
assertTrue("Got message [" + msg1 + "]", msg1
diff --git a/logback-core/src/main/java/ch/qos/logback/core/encoder/Encoder.java b/logback-core/src/test/java/ch/qos/logback/core/recovery/PackageTest.java
similarity index 50%
copy from logback-core/src/main/java/ch/qos/logback/core/encoder/Encoder.java
copy to logback-core/src/test/java/ch/qos/logback/core/recovery/PackageTest.java
index 9a989a3..8cebd38 100644
--- a/logback-core/src/main/java/ch/qos/logback/core/encoder/Encoder.java
+++ b/logback-core/src/test/java/ch/qos/logback/core/recovery/PackageTest.java
@@ -11,20 +11,13 @@
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
-package ch.qos.logback.core.encoder;
+package ch.qos.logback.core.recovery;
-import java.io.IOException;
-import java.io.OutputStream;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
-import ch.qos.logback.core.spi.ContextAware;
-import ch.qos.logback.core.spi.LifeCycle;
-
-public interface Encoder<E> extends ContextAware, LifeCycle {
-
- void doEncode(E event) throws IOException;
- void init(OutputStream os) throws IOException;
- void close() throws IOException;
-
- public boolean getImmediateFlush();
- public void setImmediateFlush(boolean value);
-}
+(a)RunWith(Suite.class)
+(a)SuiteClasses({RecoveryCoordinatorTest.class})
+public class PackageTest {
+}
\ No newline at end of file
diff --git a/logback-core/src/test/java/ch/qos/logback/core/recovery/RecoveryCoordinatorTest.java b/logback-core/src/test/java/ch/qos/logback/core/recovery/RecoveryCoordinatorTest.java
new file mode 100644
index 0000000..1d30e5c
--- /dev/null
+++ b/logback-core/src/test/java/ch/qos/logback/core/recovery/RecoveryCoordinatorTest.java
@@ -0,0 +1,57 @@
+/**
+ * Logback: the reliable, generic, fast and flexible logging framework.
+ * Copyright (C) 1999-2010, QOS.ch. All rights reserved.
+ *
+ * This program and the accompanying materials are dual-licensed under either
+ * the terms of the Eclipse Public License v1.0 as published by the Eclipse
+ * Foundation
+ *
+ * or (per the licensee's choosing)
+ *
+ * under the terms of the GNU Lesser General Public License version 2.1 as
+ * published by the Free Software Foundation.
+ */
+package ch.qos.logback.core.recovery;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+public class RecoveryCoordinatorTest {
+
+ RecoveryCoordinator rc = new RecoveryCoordinator();
+ long now = System.currentTimeMillis();
+
+ @Test
+ public void actualTime() throws InterruptedException {
+ assertTrue(rc.isTooSoon());
+ Thread.sleep(RecoveryCoordinator.BACKOFF_COEFFICIENT_MIN+20);
+ assertFalse(rc.isTooSoon());
+ }
+
+ @Test
+ public void smoke() {
+ assertTrue(rc.isTooSoon());
+ rc.setCurrentTime(now+RecoveryCoordinator.BACKOFF_COEFFICIENT_MIN+1);
+ assertFalse(rc.isTooSoon());
+ }
+
+ @Test
+ public void longTermFailure() {
+ long offset = RecoveryCoordinator.BACKOFF_COEFFICIENT_MIN;
+ int tooSoonCount = 0;
+ for(int i = 0; i < 16; i++) {
+ rc.setCurrentTime(now+offset);
+
+ if(rc.isTooSoon()) {
+ //System.out.println("is too soon at "+(offset));
+ tooSoonCount++;
+ } else {
+ //System.out.println("is NOT too soon at "+(offset));
+ }
+ offset *= 2;
+ }
+ assertEquals(7, tooSoonCount);
+
+ }
+}
diff --git a/logback-core/src/test/java/ch/qos/logback/core/rolling/RollingFileAppenderTest.java b/logback-core/src/test/java/ch/qos/logback/core/rolling/RollingFileAppenderTest.java
index 49fa223..659d4a4 100644
--- a/logback-core/src/test/java/ch/qos/logback/core/rolling/RollingFileAppenderTest.java
+++ b/logback-core/src/test/java/ch/qos/logback/core/rolling/RollingFileAppenderTest.java
@@ -81,8 +81,6 @@ public class RollingFileAppenderTest extends AbstractAppenderTest<Object> {
// prudent mode will force "file" property to be null
rfa.setFile("some non null value");
rfa.setAppend(false);
- rfa.getEncoder().setImmediateFlush(false);
- rfa.setBufferedIO(true);
rfa.setPrudent(true);
tbrp
@@ -92,9 +90,7 @@ public class RollingFileAppenderTest extends AbstractAppenderTest<Object> {
rfa.start();
- assertTrue(rfa.getEncoder().getImmediateFlush());
assertTrue(rfa.isAppend());
- assertFalse(rfa.isBufferedIO());
assertNull(rfa.rawFileProperty());
assertTrue(rfa.isStarted());
}
@@ -103,8 +99,6 @@ public class RollingFileAppenderTest extends AbstractAppenderTest<Object> {
public void testPrudentModeLogicalImplicationsOnCompression() {
rfa.setContext(context);
rfa.setAppend(false);
- rfa.getEncoder().setImmediateFlush(false);
- rfa.setBufferedIO(true);
rfa.setPrudent(true);
tbrp.setFileNamePattern("toto-%d.log.zip");
diff --git a/logback-examples/src/main/java/chapter4/ExitWoes1.java b/logback-examples/src/main/java/chapter4/ExitWoes1.java
index a1ca13c..e99234c 100644
--- a/logback-examples/src/main/java/chapter4/ExitWoes1.java
+++ b/logback-examples/src/main/java/chapter4/ExitWoes1.java
@@ -35,7 +35,6 @@ public class ExitWoes1 {
OutputStream os = new FileOutputStream("exitWoes1.log");
writerAppender.setOutputStream(os);
- writerAppender.getEncoder().setImmediateFlush(false);
writerAppender.start();
Logger root = lc.getLogger(Logger.ROOT_LOGGER_NAME);
root.addAppender(writerAppender);
diff --git a/logback-examples/src/main/java/chapter4/ExitWoes2.java b/logback-examples/src/main/java/chapter4/ExitWoes2.java
index 57733bb..121e89a 100644
--- a/logback-examples/src/main/java/chapter4/ExitWoes2.java
+++ b/logback-examples/src/main/java/chapter4/ExitWoes2.java
@@ -36,7 +36,6 @@ public class ExitWoes2 {
OutputStream os = new FileOutputStream("exitWoes2.log");
writerAppender.setOutputStream(os);
- writerAppender.getEncoder().setImmediateFlush(false);
writerAppender.start();
Logger root = lc.getLogger(Logger.ROOT_LOGGER_NAME);
root.addAppender(writerAppender);
diff --git a/logback-examples/src/main/java/chapter4/IO.java b/logback-examples/src/main/java/chapter4/IO.java
index 128d75f..3618774 100644
--- a/logback-examples/src/main/java/chapter4/IO.java
+++ b/logback-examples/src/main/java/chapter4/IO.java
@@ -58,8 +58,6 @@ public class IO extends Thread {
fa.setFile(getName() + ".log");
fa.setAppend(false);
- fa.getEncoder().setImmediateFlush(immediateFlush);
- fa.setBufferedIO(buffered);
fa.setContext(context);
fa.start();
-----------------------------------------------------------------------
Summary of changes:
.../logback/classic/multiJVM/FileAppenderPerf.java | 2 -
.../classic/multiJVM/SafeModeFileAppender.java | 2 -
.../multiJVM/SafeModeRollingFileAppender.java | 2 -
.../java/ch/qos/logback/core/FileAppender.java | 29 ----------
.../java/ch/qos/logback/core/encoder/Encoder.java | 3 -
.../ch/qos/logback/core/encoder/EncoderBase.java | 14 +-----
.../logback/core/recovery/RecoveryCoordinator.java | 31 ++++++++++-
.../test/java/ch/qos/logback/core/AllCoreTest.java | 3 +-
.../logback/core/appender/FileAppenderTest.java | 10 ++--
.../ch/qos/logback/core/recovery}/PackageTest.java | 5 +-
.../core/recovery/RecoveryCoordinatorTest.java | 57 ++++++++++++++++++++
.../core/rolling/RollingFileAppenderTest.java | 6 --
.../src/main/java/chapter4/ExitWoes1.java | 1 -
.../src/main/java/chapter4/ExitWoes2.java | 1 -
logback-examples/src/main/java/chapter4/IO.java | 2 -
15 files changed, 94 insertions(+), 74 deletions(-)
copy {logback-access/src/test/java/ch/qos/logback/access/sift => logback-core/src/test/java/ch/qos/logback/core/recovery}/PackageTest.java (88%)
create mode 100644 logback-core/src/test/java/ch/qos/logback/core/recovery/RecoveryCoordinatorTest.java
hooks/post-receive
--
Logback: the generic, reliable, fast and flexible logging framework.
1
0

[GIT] Logback: the generic, reliable, fast and flexible logging framework. branch, encoder, updated. v0.9.18-43-g87ceb3d
by git-noreply@pixie.qos.ch 23 Feb '10
by git-noreply@pixie.qos.ch 23 Feb '10
23 Feb '10
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Logback: the generic, reliable, fast and flexible logging framework.".
The branch, encoder has been updated
via 87ceb3d44cefcf454b8635440bc75a37928961ee (commit)
from 4097c6f76343e140bfc7ce11b73a95efceef0655 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=87ceb3d44cefcf454b863544…
http://github.com/ceki/logback/commit/87ceb3d44cefcf454b8635440bc75a3792896…
commit 87ceb3d44cefcf454b8635440bc75a37928961ee
Author: Ceki Gulcu <ceki(a)qos.ch>
Date: Tue Feb 23 14:16:09 2010 +0100
- measuring the differences between various fileAppender modes (imemdiateFlush, buffered io etc)
diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/multiJVM/FileAppenderPerf.java b/logback-classic/src/test/java/ch/qos/logback/classic/multiJVM/FileAppenderPerf.java
index 009490c..1a46b28 100644
--- a/logback-classic/src/test/java/ch/qos/logback/classic/multiJVM/FileAppenderPerf.java
+++ b/logback-classic/src/test/java/ch/qos/logback/classic/multiJVM/FileAppenderPerf.java
@@ -41,7 +41,7 @@ public class FileAppenderPerf {
fa.setEncoder(patternLayout);
fa.setFile(filename);
fa.setAppend(false);
- fa.setImmediateFlush(true);
+ fa.getEncoder().setImmediateFlush(true);
fa.setBufferedIO(false);
fa.setPrudent(safetyMode);
fa.setContext(loggerContext);
diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/multiJVM/SafeModeFileAppender.java b/logback-classic/src/test/java/ch/qos/logback/classic/multiJVM/SafeModeFileAppender.java
index afa7153..c2f4555 100644
--- a/logback-classic/src/test/java/ch/qos/logback/classic/multiJVM/SafeModeFileAppender.java
+++ b/logback-classic/src/test/java/ch/qos/logback/classic/multiJVM/SafeModeFileAppender.java
@@ -66,7 +66,7 @@ public class SafeModeFileAppender {
fa.setEncoder(patternLayout);
fa.setFile(filename);
fa.setAppend(true);
- fa.setImmediateFlush(true);
+ fa.getEncoder().setImmediateFlush(true);
fa.setBufferedIO(false);
fa.setPrudent(safetyMode);
fa.setContext(loggerContext);
diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/multiJVM/SafeModeRollingFileAppender.java b/logback-classic/src/test/java/ch/qos/logback/classic/multiJVM/SafeModeRollingFileAppender.java
index 112f7d0..ee5f30d 100644
--- a/logback-classic/src/test/java/ch/qos/logback/classic/multiJVM/SafeModeRollingFileAppender.java
+++ b/logback-classic/src/test/java/ch/qos/logback/classic/multiJVM/SafeModeRollingFileAppender.java
@@ -69,7 +69,7 @@ public class SafeModeRollingFileAppender {
rfa.setEncoder(patternLayout);
rfa.setAppend(true);
- rfa.setImmediateFlush(true);
+ rfa.getEncoder().setImmediateFlush(true);
rfa.setBufferedIO(false);
rfa.setPrudent(safetyMode);
rfa.setContext(loggerContext);
diff --git a/logback-core/src/main/java/ch/qos/logback/core/FileAppender.java b/logback-core/src/main/java/ch/qos/logback/core/FileAppender.java
index b392ba8..dbd0414 100644
--- a/logback-core/src/main/java/ch/qos/logback/core/FileAppender.java
+++ b/logback-core/src/main/java/ch/qos/logback/core/FileAppender.java
@@ -18,6 +18,7 @@ import java.io.IOException;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
+import ch.qos.logback.core.encoder.Encoder;
import ch.qos.logback.core.recovery.ResilientFileOutputStream;
import ch.qos.logback.core.util.FileUtil;
@@ -55,7 +56,6 @@ public class FileAppender<E> extends WriterAppender<E> {
private boolean prudent = false;
-
/**
* As in most cases, the default constructor does nothing.
*/
@@ -120,8 +120,9 @@ public class FileAppender<E> extends WriterAppender<E> {
setAppend(true);
addWarn("Setting \"Append\" property to true on account of \"Prudent\" mode");
}
- if (getImmediateFlush() == false) {
- setImmediateFlush(true);
+ Encoder encoder = getEncoder();
+ if (encoder.getImmediateFlush() == false) {
+ encoder.setImmediateFlush(true);
addWarn("Setting \"ImmediateFlush\" to true on account of \"Prudent\" mode");
}
@@ -131,15 +132,6 @@ public class FileAppender<E> extends WriterAppender<E> {
}
}
- // In case both bufferedIO and immediateFlush are set, the former
- // takes priority because 'immediateFlush' is set to true by default.
- // If the user explicitly set bufferedIO, then we should follow her
- // directives.
- if (bufferedIO) {
- setImmediateFlush(false);
- addInfo("Setting \"ImmediateFlush\" property to false on account of \"bufferedIO\" property");
- }
-
try {
openFile(getFile());
} catch (java.io.IOException e) {
@@ -189,12 +181,12 @@ public class FileAppender<E> extends WriterAppender<E> {
}
}
- ResilientFileOutputStream resilientFos = new ResilientFileOutputStream(file, append);
-
-
- //FileOutputStream fileOutputStream = new FileOutputStream(file_name,
- // append);
-
+ ResilientFileOutputStream resilientFos = new ResilientFileOutputStream(
+ file, append);
+
+ // FileOutputStream fileOutputStream = new FileOutputStream(file_name,
+ // append);
+
// Writer w = createWriter(fileOutputStream);
// if (bufferedIO) {
// w = new BufferedWriter(w, bufferSize);
@@ -245,7 +237,7 @@ public class FileAppender<E> extends WriterAppender<E> {
final private void safeWrite(E event) throws IOException {
ResilientFileOutputStream resilientFOS = (ResilientFileOutputStream) getOutputStream();
FileChannel fileChannel = resilientFOS.getChannel();
- if(fileChannel == null) {
+ if (fileChannel == null) {
return;
}
FileLock fileLock = null;
diff --git a/logback-core/src/main/java/ch/qos/logback/core/WriterAppender.java b/logback-core/src/main/java/ch/qos/logback/core/WriterAppender.java
index 94a2172..e2de82c 100644
--- a/logback-core/src/main/java/ch/qos/logback/core/WriterAppender.java
+++ b/logback-core/src/main/java/ch/qos/logback/core/WriterAppender.java
@@ -42,19 +42,6 @@ public class WriterAppender<E> extends UnsynchronizedAppenderBase<E> {
*/
protected Object lock = new Object();
- /**
- * Immediate flush means that the underlying writer or output stream will be
- * flushed at the end of each append operation. Immediate flush is slower but
- * ensures that each append request is actually written. If
- * <code>immediateFlush</code> is set to <code>false</code>, then there is a
- * good chance that the last few logs events are not actually written to
- * persistent media if and when the application crashes.
- *
- * <p>
- * The <code>immediateFlush</code> variable is set to <code>true</code> by
- * default.
- */
- private boolean immediateFlush = true;
/**
* This is the {@link OutputStream outputStream} where output will be written.
@@ -67,22 +54,6 @@ public class WriterAppender<E> extends UnsynchronizedAppenderBase<E> {
public WriterAppender() {
}
- /**
- * If the <b>ImmediateFlush</b> option is set to <code>true</code>, the
- * appender will flush at the end of each write. This is the default behavior.
- * If the option is set to <code>false</code>, then the underlying stream can
- * defer writing to physical medium to a later time.
- * <p>
- * Avoiding the flush operation at the end of each append results in a
- * performance gain of 10 to 20 percent. However, there is safety tradeoff
- * involved in skipping flushing. Indeed, when flushing is skipped, then it is
- * likely that the last few log events will not be recorded on disk when the
- * application exits. This is a high price to pay even for a 20% performance
- * gain.
- */
- public void setImmediateFlush(boolean value) {
- immediateFlush = value;
- }
/**
* The underlying output stream used by this appender.
@@ -94,13 +65,6 @@ public class WriterAppender<E> extends UnsynchronizedAppenderBase<E> {
}
/**
- * Returns value of the <b>ImmediateFlush</b> option.
- */
- public boolean getImmediateFlush() {
- return immediateFlush;
- }
-
- /**
* Checks that requires parameters are set and if everything is in order,
* activates this appender.
*/
diff --git a/logback-core/src/main/java/ch/qos/logback/core/encoder/Encoder.java b/logback-core/src/main/java/ch/qos/logback/core/encoder/Encoder.java
index 18219be..9a989a3 100644
--- a/logback-core/src/main/java/ch/qos/logback/core/encoder/Encoder.java
+++ b/logback-core/src/main/java/ch/qos/logback/core/encoder/Encoder.java
@@ -24,5 +24,7 @@ public interface Encoder<E> extends ContextAware, LifeCycle {
void doEncode(E event) throws IOException;
void init(OutputStream os) throws IOException;
void close() throws IOException;
-
+
+ public boolean getImmediateFlush();
+ public void setImmediateFlush(boolean value);
}
diff --git a/logback-core/src/main/java/ch/qos/logback/core/encoder/EncoderBase.java b/logback-core/src/main/java/ch/qos/logback/core/encoder/EncoderBase.java
index aaab297..ebbec74 100644
--- a/logback-core/src/main/java/ch/qos/logback/core/encoder/EncoderBase.java
+++ b/logback-core/src/main/java/ch/qos/logback/core/encoder/EncoderBase.java
@@ -10,7 +10,8 @@ abstract public class EncoderBase<E> extends ContextAwareBase implements Encoder
protected boolean started;
protected OutputStream outputStream;
-
+ private boolean immediateFlush = true;
+
public void init(OutputStream os) throws IOException {
this.outputStream = os;
}
@@ -26,4 +27,16 @@ abstract public class EncoderBase<E> extends ContextAwareBase implements Encoder
public void stop() {
started = false;
}
+
+
+ /**
+ * Returns value of the <b>ImmediateFlush</b> option.
+ */
+ public boolean getImmediateFlush() {
+ return immediateFlush;
+ }
+
+ public void setImmediateFlush(boolean value) {
+ immediateFlush = value;
+ }
}
diff --git a/logback-core/src/main/java/ch/qos/logback/core/html/LayoutWrappingEncoder.java b/logback-core/src/main/java/ch/qos/logback/core/html/LayoutWrappingEncoder.java
index caab0ce..ed91af0 100644
--- a/logback-core/src/main/java/ch/qos/logback/core/html/LayoutWrappingEncoder.java
+++ b/logback-core/src/main/java/ch/qos/logback/core/html/LayoutWrappingEncoder.java
@@ -21,6 +21,7 @@ public class LayoutWrappingEncoder<E> extends EncoderBase<E> {
*/
private Charset charset;
+
public Layout<E> getLayout() {
return layout;
}
diff --git a/logback-core/src/test/java/ch/qos/logback/core/appender/FileAppenderTest.java b/logback-core/src/test/java/ch/qos/logback/core/appender/FileAppenderTest.java
index b0fcdcf..21ffe73 100644
--- a/logback-core/src/test/java/ch/qos/logback/core/appender/FileAppenderTest.java
+++ b/logback-core/src/test/java/ch/qos/logback/core/appender/FileAppenderTest.java
@@ -106,12 +106,12 @@ public class FileAppenderTest extends AbstractAppenderTest<Object> {
appender.setContext(context);
appender.setAppend(false);
- appender.setImmediateFlush(false);
+ appender.getEncoder().setImmediateFlush(false);
appender.setBufferedIO(true);
appender.setPrudent(true);
appender.start();
- assertTrue(appender.getImmediateFlush());
+ assertTrue(appender.getEncoder().getImmediateFlush());
assertTrue(appender.isAppend());
assertFalse(appender.isBufferedIO());
diff --git a/logback-core/src/test/java/ch/qos/logback/core/joran/util/House.java b/logback-core/src/test/java/ch/qos/logback/core/joran/util/House.java
index c2270b0..ef27c4f 100644
--- a/logback-core/src/test/java/ch/qos/logback/core/joran/util/House.java
+++ b/logback-core/src/test/java/ch/qos/logback/core/joran/util/House.java
@@ -12,6 +12,7 @@ import ch.qos.logback.core.util.FileSize;
public class House {
Door mainDoor;
int count;
+ Double temperature;
boolean open;
String name;
String camelCase;
@@ -20,7 +21,8 @@ public class House {
FileSize fs;
HouseColor houseColor;
FilterReply reply;
-
+
+
Charset charset;
List<String> adjectiveList = new ArrayList<String>();
@@ -43,6 +45,15 @@ public class House {
this.count = c;
}
+
+ public Double getTemperature() {
+ return temperature;
+ }
+
+ public void setTemperature(Double temperature) {
+ this.temperature = temperature;
+ }
+
public Door getDoor() {
return mainDoor;
}
diff --git a/logback-core/src/test/java/ch/qos/logback/core/joran/util/PackageTest.java b/logback-core/src/test/java/ch/qos/logback/core/joran/util/PackageTest.java
index feb3d0a..f808043 100644
--- a/logback-core/src/test/java/ch/qos/logback/core/joran/util/PackageTest.java
+++ b/logback-core/src/test/java/ch/qos/logback/core/joran/util/PackageTest.java
@@ -18,6 +18,6 @@ import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
-@SuiteClasses( { StringToObjectConverterTest.class, PropertySetterTest.class })
+@SuiteClasses( { PropertySetterTest.class })
public class PackageTest {
}
diff --git a/logback-core/src/test/java/ch/qos/logback/core/joran/util/PropertySetterTest.java b/logback-core/src/test/java/ch/qos/logback/core/joran/util/PropertySetterTest.java
index 0ac9396..8d93421 100644
--- a/logback-core/src/test/java/ch/qos/logback/core/joran/util/PropertySetterTest.java
+++ b/logback-core/src/test/java/ch/qos/logback/core/joran/util/PropertySetterTest.java
@@ -90,10 +90,13 @@ public class PropertySetterTest {
House house = new House();
PropertySetter setter = new PropertySetter(house);
setter.setProperty("count", "10");
+ setter.setProperty("temperature", "33.1");
+
setter.setProperty("name", "jack");
setter.setProperty("open", "true");
assertEquals(10, house.getCount());
+ assertEquals(33.1d, (double) house.getTemperature(), 0.01);
assertEquals("jack", house.getName());
assertTrue(house.isOpen());
}
diff --git a/logback-core/src/test/java/ch/qos/logback/core/joran/util/StringToObjectConverterTest.java b/logback-core/src/test/java/ch/qos/logback/core/joran/util/StringToObjectConverterTest.java
deleted file mode 100644
index 48886ea..0000000
--- a/logback-core/src/test/java/ch/qos/logback/core/joran/util/StringToObjectConverterTest.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package ch.qos.logback.core.joran.util;
-
-import org.junit.Test;
-
-public class StringToObjectConverterTest {
-
-
-
- @Test
- public void doubleTest() {
- fail("s");
- }
-}
diff --git a/logback-core/src/test/java/ch/qos/logback/core/rolling/RollingFileAppenderTest.java b/logback-core/src/test/java/ch/qos/logback/core/rolling/RollingFileAppenderTest.java
index e4cbc01..49fa223 100644
--- a/logback-core/src/test/java/ch/qos/logback/core/rolling/RollingFileAppenderTest.java
+++ b/logback-core/src/test/java/ch/qos/logback/core/rolling/RollingFileAppenderTest.java
@@ -81,7 +81,7 @@ public class RollingFileAppenderTest extends AbstractAppenderTest<Object> {
// prudent mode will force "file" property to be null
rfa.setFile("some non null value");
rfa.setAppend(false);
- rfa.setImmediateFlush(false);
+ rfa.getEncoder().setImmediateFlush(false);
rfa.setBufferedIO(true);
rfa.setPrudent(true);
@@ -92,7 +92,7 @@ public class RollingFileAppenderTest extends AbstractAppenderTest<Object> {
rfa.start();
- assertTrue(rfa.getImmediateFlush());
+ assertTrue(rfa.getEncoder().getImmediateFlush());
assertTrue(rfa.isAppend());
assertFalse(rfa.isBufferedIO());
assertNull(rfa.rawFileProperty());
@@ -103,7 +103,7 @@ public class RollingFileAppenderTest extends AbstractAppenderTest<Object> {
public void testPrudentModeLogicalImplicationsOnCompression() {
rfa.setContext(context);
rfa.setAppend(false);
- rfa.setImmediateFlush(false);
+ rfa.getEncoder().setImmediateFlush(false);
rfa.setBufferedIO(true);
rfa.setPrudent(true);
diff --git a/logback-examples/src/main/java/chapter4/ExitWoes1.java b/logback-examples/src/main/java/chapter4/ExitWoes1.java
index b14a36e..a1ca13c 100644
--- a/logback-examples/src/main/java/chapter4/ExitWoes1.java
+++ b/logback-examples/src/main/java/chapter4/ExitWoes1.java
@@ -35,7 +35,7 @@ public class ExitWoes1 {
OutputStream os = new FileOutputStream("exitWoes1.log");
writerAppender.setOutputStream(os);
- writerAppender.setImmediateFlush(false);
+ writerAppender.getEncoder().setImmediateFlush(false);
writerAppender.start();
Logger root = lc.getLogger(Logger.ROOT_LOGGER_NAME);
root.addAppender(writerAppender);
diff --git a/logback-examples/src/main/java/chapter4/ExitWoes2.java b/logback-examples/src/main/java/chapter4/ExitWoes2.java
index d95631a..57733bb 100644
--- a/logback-examples/src/main/java/chapter4/ExitWoes2.java
+++ b/logback-examples/src/main/java/chapter4/ExitWoes2.java
@@ -36,7 +36,7 @@ public class ExitWoes2 {
OutputStream os = new FileOutputStream("exitWoes2.log");
writerAppender.setOutputStream(os);
- writerAppender.setImmediateFlush(false);
+ writerAppender.getEncoder().setImmediateFlush(false);
writerAppender.start();
Logger root = lc.getLogger(Logger.ROOT_LOGGER_NAME);
root.addAppender(writerAppender);
diff --git a/logback-examples/src/main/java/chapter4/IO.java b/logback-examples/src/main/java/chapter4/IO.java
index fb989ce..128d75f 100644
--- a/logback-examples/src/main/java/chapter4/IO.java
+++ b/logback-examples/src/main/java/chapter4/IO.java
@@ -58,7 +58,7 @@ public class IO extends Thread {
fa.setFile(getName() + ".log");
fa.setAppend(false);
- fa.setImmediateFlush(immediateFlush);
+ fa.getEncoder().setImmediateFlush(immediateFlush);
fa.setBufferedIO(buffered);
fa.setContext(context);
fa.start();
@@ -170,6 +170,9 @@ class Counter extends Thread {
long before = System.nanoTime();
while (!interrupted) {
+ if(counter % 1000 == 0) {
+ Thread.yield();
+ }
counter += 1.0;
}
diff --git a/logback-site/src/site/pages/manual/migrationFromLog4j.html b/logback-site/src/site/pages/manual/migrationFromLog4j.html
index a0b7059..ed7cd04 100644
--- a/logback-site/src/site/pages/manual/migrationFromLog4j.html
+++ b/logback-site/src/site/pages/manual/migrationFromLog4j.html
@@ -41,7 +41,10 @@
<code>org.apache.log4j</code> package, can be automatically
migrated to use SLF4J via the <a
href="http://www.slf4j.org/migrator.html">SLF4J migrator
- tool</a>.
+ tool</a>. To migrate <em>log4j.property</em> files into its
+ logback equivalent, you can use the <a
+ href="http://logback.qos.ch/translator/">log4j.properties
+ translator</a>.
</p>
<p>From a broader perspective, log4j and logback-classic are
-----------------------------------------------------------------------
Summary of changes:
.../logback/classic/multiJVM/FileAppenderPerf.java | 2 +-
.../classic/multiJVM/SafeModeFileAppender.java | 2 +-
.../multiJVM/SafeModeRollingFileAppender.java | 2 +-
.../java/ch/qos/logback/core/FileAppender.java | 30 ++++++----------
.../java/ch/qos/logback/core/WriterAppender.java | 36 --------------------
.../java/ch/qos/logback/core/encoder/Encoder.java | 4 ++-
.../ch/qos/logback/core/encoder/EncoderBase.java | 15 ++++++++-
.../logback/core/html/LayoutWrappingEncoder.java | 1 +
.../logback/core/appender/FileAppenderTest.java | 4 +-
.../java/ch/qos/logback/core/joran/util/House.java | 13 ++++++-
.../qos/logback/core/joran/util/PackageTest.java | 2 +-
.../core/joran/util/PropertySetterTest.java | 3 ++
.../joran/util/StringToObjectConverterTest.java | 13 -------
.../core/rolling/RollingFileAppenderTest.java | 6 ++--
.../src/main/java/chapter4/ExitWoes1.java | 2 +-
.../src/main/java/chapter4/ExitWoes2.java | 2 +-
logback-examples/src/main/java/chapter4/IO.java | 5 ++-
.../src/site/pages/manual/migrationFromLog4j.html | 5 ++-
18 files changed, 63 insertions(+), 84 deletions(-)
delete mode 100644 logback-core/src/test/java/ch/qos/logback/core/joran/util/StringToObjectConverterTest.java
hooks/post-receive
--
Logback: the generic, reliable, fast and flexible logging framework.
1
0

[JIRA] Created: (LBCLASSIC-186) document why logback-classic prevents the addition of new levels
by Ceki Gulcu (JIRA) 23 Feb '10
by Ceki Gulcu (JIRA) 23 Feb '10
23 Feb '10
document why logback-classic prevents the addition of new levels
----------------------------------------------------------------
Key: LBCLASSIC-186
URL: http://jira.qos.ch/browse/LBCLASSIC-186
Project: logback-classic
Issue Type: Task
Reporter: Ceki Gulcu
Assignee: Logback dev list
--
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