Skip to content

Commit fd7f669

Browse files
Extracted from logback-amqp-appender the module logback-amqp-common. Splitted logback-webapp module into logback-webapp-lib and logback-amqp-consumer-webapp. (Plus minor refactorings.)
1 parent 2159777 commit fd7f669

File tree

26 files changed

+262
-165
lines changed

26 files changed

+262
-165
lines changed

logback-amqp-appender/pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
<artifactId>logback-amqp-appender</artifactId>
1010
<dependencies>
1111
<dependency>
12-
<groupId>com.rabbitmq</groupId>
13-
<artifactId>amqp-client</artifactId>
14-
<version>2.2.0</version>
12+
<groupId>ch.qos.logback.amqp</groupId>
13+
<artifactId>logback-amqp-common</artifactId>
14+
<version>${project.version}</version>
1515
</dependency>
1616
</dependencies>
1717
</project>

logback-amqp-appender/src/main/java/ch/qos/logback/amqp/AmqpAppender.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22
package ch.qos.logback.amqp;
33

44

5+
import java.io.Serializable;
56
import java.util.concurrent.LinkedBlockingDeque;
67

78
import ch.qos.logback.amqp.tools.Callbacks;
8-
99
import ch.qos.logback.amqp.tools.DefaultBinarySerializer;
1010
import ch.qos.logback.amqp.tools.DefaultContextAwareCallbacks;
1111
import ch.qos.logback.amqp.tools.DefaultMutator;
1212
import ch.qos.logback.amqp.tools.Mutator;
13-
import ch.qos.logback.amqp.tools.PubLoggingEventVO;
13+
import ch.qos.logback.amqp.tools.SerializableLoggingEvent1;
1414
import ch.qos.logback.amqp.tools.Serializer;
1515
import ch.qos.logback.classic.PatternLayout;
1616
import ch.qos.logback.classic.spi.ILoggingEvent;
@@ -195,7 +195,7 @@ public final void stop ()
195195

196196
protected final void append (final ILoggingEvent originalEvent)
197197
{
198-
final PubLoggingEventVO event = this.prepare (originalEvent);
198+
final Serializable event = this.prepare (originalEvent);
199199
byte[] data;
200200
try {
201201
data = this.serializer.serialize (event);
@@ -226,9 +226,9 @@ protected void postStop ()
226226
protected void preStop ()
227227
{}
228228

229-
private final PubLoggingEventVO prepare (final ILoggingEvent originalEvent)
229+
private final Serializable prepare (final ILoggingEvent originalEvent)
230230
{
231-
final PubLoggingEventVO newEvent = PubLoggingEventVO.build (originalEvent);
231+
final SerializableLoggingEvent1 newEvent = SerializableLoggingEvent1.build (originalEvent);
232232
if (this.mutator != null)
233233
this.mutator.mutate (newEvent);
234234
return (newEvent);

logback-amqp-appender/src/main/java/ch/qos/logback/amqp/tools/DefaultMutator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public long getSequence ()
4343
return (this.sequence);
4444
}
4545

46-
public void mutate (final PubLoggingEventVO event)
46+
public void mutate (final SerializableLoggingEvent1 event)
4747
{
4848
long sequence;
4949
synchronized (this) {

logback-amqp-appender/src/main/java/ch/qos/logback/amqp/tools/Mutator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@
44

55
public interface Mutator
66
{
7-
public abstract void mutate (final PubLoggingEventVO event);
7+
public abstract void mutate (final SerializableLoggingEvent1 event);
88
}

logback-amqp-common/pom.xml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project>
3+
<modelVersion>4.0.0</modelVersion>
4+
<parent>
5+
<groupId>ch.qos.logback.amqp</groupId>
6+
<artifactId>logback-amqp-parent</artifactId>
7+
<version>0.1-SNAPSHOT</version>
8+
</parent>
9+
<artifactId>logback-amqp-common</artifactId>
10+
<dependencies>
11+
<dependency>
12+
<groupId>com.rabbitmq</groupId>
13+
<artifactId>amqp-client</artifactId>
14+
<version>2.2.0</version>
15+
</dependency>
16+
</dependencies>
17+
</project>

logback-amqp-appender/src/main/java/ch/qos/logback/amqp/tools/PubLoggingEventVO.java renamed to logback-amqp-common/src/main/java/ch/qos/logback/amqp/tools/SerializableLoggingEvent1.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import org.slf4j.helpers.MessageFormatter;
2424

2525

26-
public class PubLoggingEventVO
26+
public class SerializableLoggingEvent1
2727
implements
2828
ILoggingEvent,
2929
Serializable
@@ -36,7 +36,7 @@ public boolean equals (final Object obj)
3636
return false;
3737
if (this.getClass () != obj.getClass ())
3838
return false;
39-
final PubLoggingEventVO other = (PubLoggingEventVO) obj;
39+
final SerializableLoggingEvent1 other = (SerializableLoggingEvent1) obj;
4040
if (this.message == null) {
4141
if (other.message != null)
4242
return false;
@@ -198,11 +198,11 @@ private void readObject (final ObjectInputStream in)
198198
this.level = Level.toLevel (levelInt);
199199

200200
final int argArrayLen = in.readInt ();
201-
if (argArrayLen != PubLoggingEventVO.NULL_ARGUMENT_ARRAY) {
201+
if (argArrayLen != SerializableLoggingEvent1.NULL_ARGUMENT_ARRAY) {
202202
this.argumentArray = new String[argArrayLen];
203203
for (int i = 0; i < argArrayLen; i++) {
204204
final Object val = in.readObject ();
205-
if (!PubLoggingEventVO.NULL_ARGUMENT_ARRAY_ELEMENT.equals (val)) {
205+
if (!SerializableLoggingEvent1.NULL_ARGUMENT_ARRAY_ELEMENT.equals (val)) {
206206
this.argumentArray[i] = val;
207207
}
208208
}
@@ -221,11 +221,11 @@ private void writeObject (final ObjectOutputStream out)
221221
if (element != null) {
222222
out.writeObject (element.toString ());
223223
} else {
224-
out.writeObject (PubLoggingEventVO.NULL_ARGUMENT_ARRAY_ELEMENT);
224+
out.writeObject (SerializableLoggingEvent1.NULL_ARGUMENT_ARRAY_ELEMENT);
225225
}
226226
}
227227
} else {
228-
out.writeInt (PubLoggingEventVO.NULL_ARGUMENT_ARRAY);
228+
out.writeInt (SerializableLoggingEvent1.NULL_ARGUMENT_ARRAY);
229229
}
230230
}
231231

@@ -243,10 +243,10 @@ private void writeObject (final ObjectOutputStream out)
243243
public long timeStamp;
244244
private transient String formattedMessage;
245245

246-
public static PubLoggingEventVO build (final ILoggingEvent original)
246+
public static SerializableLoggingEvent1 build (final ILoggingEvent original)
247247
{
248248
// taken from `LoggingEventVO.build` but constructing a `PubLoggingEventVO`
249-
final PubLoggingEventVO clone = new PubLoggingEventVO ();
249+
final SerializableLoggingEvent1 clone = new SerializableLoggingEvent1 ();
250250
clone.loggerName = original.getLoggerName ();
251251
clone.loggerContextVO = original.getLoggerContextVO ();
252252
clone.threadName = original.getThreadName ();

logback-webapp/pom.xml renamed to logback-amqp-consumer-webapp/pom.xml

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<artifactId>logback-amqp-parent</artifactId>
77
<version>0.1-SNAPSHOT</version>
88
</parent>
9-
<artifactId>logback-webapp</artifactId>
9+
<artifactId>logback-amqp-consumer-webapp</artifactId>
1010
<packaging>war</packaging>
1111
<dependencies>
1212
<dependency>
@@ -15,10 +15,9 @@
1515
<version>${project.version}</version>
1616
</dependency>
1717
<dependency>
18-
<groupId>javax.servlet</groupId>
19-
<artifactId>servlet-api</artifactId>
20-
<version>2.5</version>
21-
<scope>provided</scope>
18+
<groupId>ch.qos.logback.amqp</groupId>
19+
<artifactId>logback-webapp-lib</artifactId>
20+
<version>${project.version}</version>
2221
</dependency>
2322
</dependencies>
2423
<build>
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
<configuration debug="false">
4+
5+
<statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />
6+
7+
<newRule pattern="/configuration/amqpConsumerAgent" actionClass="ch.qos.logback.amqp.AmqpConsumerAgentMain$AgentAction"/>
8+
9+
<amqpConsumerAgent>
10+
<host>127.0.0.1</host>
11+
<port>5672</port>
12+
<virtualHost>/</virtualHost>
13+
<username>guest</username>
14+
<password>guest</password>
15+
<exchange>logback</exchange>
16+
<queue></queue>
17+
<routingKey>#</routingKey>
18+
</amqpConsumerAgent>
19+
20+
<appender name="event-viewer" class="ch.qos.logback.webapp.EventViewerAppender" />
21+
22+
<root level="trace">
23+
<appender-ref ref="event-viewer" />
24+
</root>
25+
26+
</configuration>

logback-webapp/src/main/webapp/WEB-INF/web.xml renamed to logback-amqp-consumer-webapp/src/main/webapp/WEB-INF/web.xml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,15 @@
1010
<servlet-name>event-viewer</servlet-name>
1111
<servlet-class>ch.qos.logback.webapp.EventViewer</servlet-class>
1212
<load-on-startup>0</load-on-startup>
13+
<init-param>
14+
<param-name>appender</param-name>
15+
<param-value>event-viewer</param-value>
16+
</init-param>
1317
</servlet>
1418

1519
<servlet-mapping>
1620
<servlet-name>event-viewer</servlet-name>
17-
<url-pattern>/logback</url-pattern>
21+
<url-pattern>/</url-pattern>
1822
</servlet-mapping>
1923

2024
</web-app>

logback-amqp-consumer/pom.xml

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,9 @@
1010
<dependencies>
1111
<dependency>
1212
<groupId>ch.qos.logback.amqp</groupId>
13-
<artifactId>logback-amqp-appender</artifactId>
13+
<artifactId>logback-amqp-common</artifactId>
1414
<version>${project.version}</version>
1515
</dependency>
16-
<dependency>
17-
<groupId>com.rabbitmq</groupId>
18-
<artifactId>amqp-client</artifactId>
19-
<version>2.2.0</version>
20-
</dependency>
21-
<dependency>
22-
<groupId>janino</groupId>
23-
<artifactId>janino</artifactId>
24-
<version>2.5.10</version>
25-
</dependency>
2616
</dependencies>
2717
<build>
2818
<plugins>

logback-amqp-consumer/src/test/java/ch/qos/logback/amqp/tests/AmqpConsumerTests.java renamed to logback-amqp-consumer/src/test/java/ch/qos/logback/amqp/tests/AmqpConsumerAgentTests.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@
1515
import org.junit.Test;
1616

1717

18-
public final class AmqpConsumerTests
18+
public final class AmqpConsumerAgentTests
1919
{
2020
@Test
2121
public final void testAgent ()
2222
throws Throwable
2323
{
24-
final Logger realLogger = (Logger) LoggerFactory.getLogger (AmqpConsumerTests.class.getName ());
24+
final Logger realLogger = (Logger) LoggerFactory.getLogger (AmqpConsumerAgentTests.class.getName ());
2525

26-
final Logger testLogger = (Logger) LoggerFactory.getLogger (AmqpConsumerTests.testLoggerName);
26+
final Logger testLogger = (Logger) LoggerFactory.getLogger (AmqpConsumerAgentTests.testLoggerName);
2727

2828
realLogger.debug ("initializing collector appender");
2929
final LinkedList<String> collectedMessages = new LinkedList<String> ();
@@ -47,20 +47,20 @@ protected final void append (final ILoggingEvent event)
4747
agent.start ();
4848

4949
realLogger.debug ("waiting for message draining (i.e. until we receive enough)");
50-
for (int tries = 0; tries < AmqpConsumerTests.timeoutTries; tries++) {
51-
if (collectedMessages.size () >= AmqpConsumerTests.messageCount)
50+
for (int tries = 0; tries < AmqpConsumerAgentTests.timeoutTries; tries++) {
51+
if (collectedMessages.size () >= AmqpConsumerAgentTests.messageCount)
5252
break;
53-
Thread.sleep (AmqpConsumerTests.timeout);
53+
Thread.sleep (AmqpConsumerAgentTests.timeout);
5454
}
5555

5656
realLogger.debug ("stopping amqp consumer agent");
5757
agent.stop ();
5858

5959
realLogger.debug ("joining amqp consumer agent");
60-
for (int tries = 0; tries < AmqpConsumerTests.timeoutTries; tries++) {
60+
for (int tries = 0; tries < AmqpConsumerAgentTests.timeoutTries; tries++) {
6161
if (!agent.isRunning ())
6262
break;
63-
Thread.sleep (AmqpConsumerTests.timeout);
63+
Thread.sleep (AmqpConsumerAgentTests.timeout);
6464
}
6565

6666
Assert.assertTrue (agent.isDrained ());

logback-webapp-lib/pom.xml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project>
3+
<modelVersion>4.0.0</modelVersion>
4+
<parent>
5+
<groupId>ch.qos.logback.amqp</groupId>
6+
<artifactId>logback-amqp-parent</artifactId>
7+
<version>0.1-SNAPSHOT</version>
8+
</parent>
9+
<artifactId>logback-webapp-lib</artifactId>
10+
<dependencies>
11+
<dependency>
12+
<groupId>javax.servlet</groupId>
13+
<artifactId>servlet-api</artifactId>
14+
<version>2.5</version>
15+
<scope>provided</scope>
16+
</dependency>
17+
</dependencies>
18+
</project>
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
2+
package ch.qos.logback.webapp;
3+
4+
5+
import java.io.IOException;
6+
import java.io.PrintWriter;
7+
8+
import javax.servlet.ServletConfig;
9+
import javax.servlet.ServletException;
10+
import javax.servlet.http.HttpServlet;
11+
import javax.servlet.http.HttpServletRequest;
12+
import javax.servlet.http.HttpServletResponse;
13+
14+
import ch.qos.logback.classic.Logger;
15+
import ch.qos.logback.classic.LoggerContext;
16+
import ch.qos.logback.classic.html.HTMLLayout;
17+
import ch.qos.logback.classic.spi.ILoggingEvent;
18+
import org.slf4j.LoggerFactory;
19+
20+
21+
public class EventViewer
22+
extends HttpServlet
23+
{
24+
public EventViewer ()
25+
{
26+
super ();
27+
}
28+
29+
public void destroy ()
30+
{
31+
super.destroy ();
32+
this.appender = null;
33+
this.layout.stop ();
34+
this.layout = null;
35+
}
36+
37+
public void init (final ServletConfig configuration)
38+
throws ServletException
39+
{
40+
final String appenderName = configuration.getInitParameter (EventViewer.appenderParameterName);
41+
if ((appenderName == null) || appenderName.isEmpty ())
42+
throw (new ServletException (String.format (
43+
"logback event viewer `%s` parameter is not set; aborting!", EventViewer.appenderParameterName)));
44+
final String eventPattern = configuration.getInitParameter (EventViewer.eventPatternParameterName);
45+
46+
this.rootLogger = (Logger) LoggerFactory.getLogger (org.slf4j.Logger.ROOT_LOGGER_NAME);
47+
final LoggerContext context = this.rootLogger.getLoggerContext ();
48+
49+
final Object appender = context.getObject (appenderName);
50+
if (appender == null)
51+
throw (new ServletException (String.format (
52+
"logback event viewer `%s` parameter value `%s` is wrong (no appender of such name found)",
53+
EventViewer.appenderParameterName, appenderName)));
54+
if (!(appender instanceof EventViewerAppender))
55+
throw (new ServletException (String.format (
56+
"logback event viewer `%s` parameter value `%s` is wrong (appender has wrong class `%s`)",
57+
EventViewer.appenderParameterName, appenderName, appender.getClass ().getName ())));
58+
59+
super.init ();
60+
61+
this.appender = (EventViewerAppender) appender;
62+
63+
this.layout = new HTMLLayout ();
64+
this.layout.setContext (context);
65+
if (eventPattern != null)
66+
this.layout.setPattern (eventPattern);
67+
this.layout.start ();
68+
}
69+
70+
protected void doGet (final HttpServletRequest request, final HttpServletResponse response)
71+
throws IOException
72+
{
73+
synchronized (this.appender.monitor) {
74+
this.appender.drainEvents ();
75+
response.setHeader ("Content-Type", "text/html");
76+
final PrintWriter stream = response.getWriter ();
77+
stream.write (this.layout.getFileHeader ());
78+
stream.write (this.layout.getPresentationHeader ());
79+
for (final ILoggingEvent event : this.appender.getEvents ())
80+
stream.write (this.layout.doLayout (event));
81+
stream.write (this.layout.getPresentationFooter ());
82+
stream.write (this.layout.getFileFooter ());
83+
stream.close ();
84+
}
85+
}
86+
87+
private EventViewerAppender appender;
88+
private HTMLLayout layout;
89+
private Logger rootLogger;
90+
91+
public static final String appenderParameterName = "appender";
92+
public static final String eventPatternParameterName = "event-pattern";
93+
private static final long serialVersionUID = 1L;
94+
}

0 commit comments

Comments
 (0)