Skip to content

Commit 1a8dbec

Browse files
Heavily refactored modules around. Added RandomEventGenerator. Added CSS for EventLogServlet.
1 parent 9e822f9 commit 1a8dbec

File tree

32 files changed

+704
-326
lines changed

32 files changed

+704
-326
lines changed

logback-amqp-appender/src/main/java/ro/volution/dev/logback/amqp/appender/AmqpAppender.java

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,19 @@
55
import java.io.Serializable;
66
import java.util.concurrent.LinkedBlockingDeque;
77

8-
import ro.volution.dev.logback.amqp.common.DefaultMutator;
9-
import ro.volution.dev.logback.amqp.common.Mutator;
10-
11-
import ro.volution.dev.logback.amqp.common.Callbacks;
12-
import ro.volution.dev.logback.amqp.common.DefaultBinarySerializer;
13-
import ro.volution.dev.logback.amqp.common.DefaultContextAwareCallbacks;
14-
import ro.volution.dev.logback.amqp.common.SerializableLoggingEvent1;
15-
import ro.volution.dev.logback.amqp.common.Serializer;
16-
17-
import ro.volution.dev.logback.amqp.accessors.AmqpMessage;
18-
import ro.volution.dev.logback.amqp.accessors.AmqpPublisher;
19-
20-
218
import ch.qos.logback.classic.PatternLayout;
229
import ch.qos.logback.classic.spi.ILoggingEvent;
2310
import ch.qos.logback.core.Context;
2411
import ch.qos.logback.core.UnsynchronizedAppenderBase;
12+
import ro.volution.dev.logback.amqp.accessors.AmqpMessage;
13+
import ro.volution.dev.logback.amqp.accessors.AmqpPublisher;
14+
import ro.volution.dev.logback.common.Callbacks;
15+
import ro.volution.dev.logback.common.DefaultBinarySerializer;
16+
import ro.volution.dev.logback.common.DefaultContextAwareCallbacks;
17+
import ro.volution.dev.logback.common.DefaultEventMutator;
18+
import ro.volution.dev.logback.common.DefaultSerializableEvent1;
19+
import ro.volution.dev.logback.common.EventMutator;
20+
import ro.volution.dev.logback.common.Serializer;
2521

2622

2723
public class AmqpAppender
@@ -36,7 +32,7 @@ public AmqpAppender ()
3632
this.routingKeyLayout = new PatternLayout ();
3733
this.exchangeLayout.setPattern (AmqpAppender.defaultExchangeKeyPattern);
3834
this.routingKeyLayout.setPattern (AmqpAppender.defaultRoutingKeyPattern);
39-
this.mutator = new DefaultMutator ();
35+
this.mutator = new DefaultEventMutator ();
4036
this.serializer = new DefaultBinarySerializer ();
4137
this.publisher = null;
4238
}
@@ -51,7 +47,7 @@ public final String getHost ()
5147
return (this.host);
5248
}
5349

54-
public final Mutator getMutator ()
50+
public final EventMutator getMutator ()
5551
{
5652
return (this.mutator);
5753
}
@@ -120,7 +116,7 @@ public final void setHost (final String host)
120116
this.host = host;
121117
}
122118

123-
public final void setMutator (final Mutator mutator)
119+
public final void setMutator (final EventMutator mutator)
124120
{
125121
if (this.isStarted ())
126122
throw (new IllegalStateException ("amqp appender is already started"));
@@ -200,23 +196,26 @@ public final void stop ()
200196

201197
protected final void append (final ILoggingEvent originalEvent)
202198
{
203-
final Serializable event = this.prepare (originalEvent);
204-
byte[] data;
199+
final Serializable event;
200+
try {
201+
event = this.prepare (originalEvent);
202+
} catch (final Throwable exception) {
203+
this.addError ("amqp appender encountered an error while preparing the event; ignoring!", exception);
204+
return;
205+
}
206+
final byte[] data;
205207
try {
206208
data = this.serializer.serialize (event);
207209
} catch (final Throwable exception) {
208-
data = null;
209210
this.addError ("amqp appender encountered an error while serializing the event; ignoring!", exception);
211+
return;
210212
}
211-
if (data != null) {
212-
final String exchange = this.exchangeLayout.doLayout (originalEvent);
213-
final String routingKey = this.routingKeyLayout.doLayout (originalEvent);
214-
final AmqpMessage message =
215-
new AmqpMessage (
216-
exchange, routingKey, this.serializer.getContentType (), this.serializer.getContentEncoding (),
217-
data);
218-
this.buffer.add (message);
219-
}
213+
final String exchange = this.exchangeLayout.doLayout (originalEvent);
214+
final String routingKey = this.routingKeyLayout.doLayout (originalEvent);
215+
final AmqpMessage message =
216+
new AmqpMessage (
217+
exchange, routingKey, this.serializer.getContentType (), this.serializer.getContentEncoding (), data);
218+
this.buffer.add (message);
220219
}
221220

222221
protected void postStart ()
@@ -232,8 +231,9 @@ protected void preStop ()
232231
{}
233232

234233
private final Serializable prepare (final ILoggingEvent originalEvent)
234+
throws Throwable
235235
{
236-
final SerializableLoggingEvent1 newEvent = SerializableLoggingEvent1.build (originalEvent);
236+
final DefaultSerializableEvent1 newEvent = DefaultSerializableEvent1.build (originalEvent);
237237
if (this.mutator != null)
238238
this.mutator.mutate (newEvent);
239239
return (newEvent);
@@ -243,7 +243,7 @@ private final Serializable prepare (final ILoggingEvent originalEvent)
243243
private final LinkedBlockingDeque<AmqpMessage> buffer;
244244
private final PatternLayout exchangeLayout;
245245
private String host;
246-
private Mutator mutator;
246+
private EventMutator mutator;
247247
private String password;
248248
private Integer port;
249249
private AmqpPublisher publisher;

logback-amqp-appender/src/test/java/ro/volution/dev/logback/amqp/tests/AmqpAppenderTests.java

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,12 @@
22
package ro.volution.dev.logback.amqp.tests;
33

44

5-
import java.util.UUID;
6-
7-
import ro.volution.dev.logback.amqp.common.DefaultMutator;
8-
9-
import ro.volution.dev.logback.amqp.appender.AmqpAppender;
10-
115
import ch.qos.logback.classic.Logger;
126
import org.slf4j.LoggerFactory;
137
import org.slf4j.MDC;
8+
import ro.volution.dev.logback.amqp.appender.AmqpAppender;
9+
import ro.volution.dev.logback.common.DefaultEventMutator;
10+
import ro.volution.dev.logback.common.RandomEventGenerator;
1411

1512
import org.junit.Assert;
1613
import org.junit.Test;
@@ -35,15 +32,14 @@ public final void testAppender ()
3532
testLogger.addAppender (appender);
3633
testLogger.setAdditive (false);
3734

35+
final RandomEventGenerator generator = new RandomEventGenerator (AmqpAppenderTests.class.getName (), testLogger);
3836
realLogger.debug ("logging generated messages");
37+
MDC.clear ();
3938
for (int index = 0; index < AmqpAppenderTests.messageCount; index++) {
40-
MDC.put (DefaultMutator.applicationKey, String.format ("app-%d", index % 3 + 1));
41-
MDC.put (DefaultMutator.componentKey, String.format ("comp-%d", index % 2 + 1));
42-
final String message = UUID.randomUUID ().toString ();
43-
if (index % 4 != 0)
44-
testLogger.error (message);
45-
else
46-
testLogger.error (message, new Throwable (message));
39+
MDC.put (DefaultEventMutator.applicationKey, String.format ("app-%d", index % 3 + 1));
40+
MDC.put (DefaultEventMutator.componentKey, String.format ("comp-%d", index % 2 + 1));
41+
testLogger.callAppenders (generator.generate ());
42+
MDC.clear ();
4743
}
4844

4945
realLogger.debug ("waiting for message draining (i.e. until their all sent)");

logback-amqp-common/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,10 @@
1414
<artifactId>amqp-client</artifactId>
1515
<version>2.2.0</version>
1616
</dependency>
17+
<dependency>
18+
<groupId>ro.volution.dev</groupId>
19+
<artifactId>logback-common</artifactId>
20+
<version>${project.version}</version>
21+
</dependency>
1722
</dependencies>
1823
</project>

logback-amqp-common/src/main/java/ro/volution/dev/logback/amqp/accessors/AmqpAccessor.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,13 @@
22
package ro.volution.dev.logback.amqp.accessors;
33

44

5-
import ro.volution.dev.logback.amqp.common.Callbacks;
6-
75
import ch.qos.logback.classic.Level;
86
import com.rabbitmq.client.Channel;
97
import com.rabbitmq.client.Connection;
108
import com.rabbitmq.client.ConnectionFactory;
119
import com.rabbitmq.client.ShutdownListener;
1210
import com.rabbitmq.client.ShutdownSignalException;
11+
import ro.volution.dev.logback.common.Callbacks;
1312

1413

1514
public abstract class AmqpAccessor

logback-amqp-common/src/main/java/ro/volution/dev/logback/amqp/accessors/AmqpConsumer.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,13 @@
44

55
import java.util.concurrent.LinkedBlockingQueue;
66

7-
import ro.volution.dev.logback.amqp.common.Callbacks;
8-
97
import ch.qos.logback.classic.Level;
108
import com.rabbitmq.client.AMQP.BasicProperties;
119
import com.rabbitmq.client.Channel;
1210
import com.rabbitmq.client.Consumer;
1311
import com.rabbitmq.client.Envelope;
1412
import com.rabbitmq.client.ShutdownSignalException;
13+
import ro.volution.dev.logback.common.Callbacks;
1514

1615

1716
public final class AmqpConsumer

logback-amqp-common/src/main/java/ro/volution/dev/logback/amqp/accessors/AmqpPublisher.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,10 @@
55
import java.util.concurrent.LinkedBlockingDeque;
66
import java.util.concurrent.TimeUnit;
77

8-
import ro.volution.dev.logback.amqp.common.Callbacks;
9-
108
import ch.qos.logback.classic.Level;
119
import com.rabbitmq.client.AMQP;
1210
import com.rabbitmq.client.Channel;
11+
import ro.volution.dev.logback.common.Callbacks;
1312

1413

1514
public final class AmqpPublisher

logback-amqp-common/src/main/java/ro/volution/dev/logback/amqp/common/Mutator.java

Lines changed: 0 additions & 10 deletions
This file was deleted.

logback-amqp-consumer-webapp/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
</dependency>
1818
<dependency>
1919
<groupId>ro.volution.dev</groupId>
20-
<artifactId>logback-webapp-lib</artifactId>
20+
<artifactId>logback-webapp-common</artifactId>
2121
<version>${project.version}</version>
2222
</dependency>
2323
</dependencies>

logback-amqp-consumer-webapp/src/main/resources/logback.xml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44

55
<statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />
66

7-
<newRule pattern="/configuration/amqpConsumerAgent" actionClass="ro.volution.dev.logback.amqp.consumer.AmqpConsumerAgentMain$AgentAction"/>
7+
<newRule pattern="/configuration/amqpConsumerAgent" actionClass="ro.volution.dev.logback.amqp.consumer.AmqpConsumerAgentMain$JoranAction" />
8+
<newRule pattern="/configuration/randomEventGenerator" actionClass="ro.volution.dev.logback.common.RandomEventGenerator$JoranAction" />
89

910
<amqpConsumerAgent>
1011
<host>127.0.0.1</host>
@@ -17,6 +18,11 @@
1718
<routingKey>#</routingKey>
1819
</amqpConsumerAgent>
1920

21+
<randomEventGenerator>
22+
<count>1000</count>
23+
<interval>250</interval>
24+
</randomEventGenerator>
25+
2026
<appender name="webapp" class="ro.volution.dev.logback.webapp.EventLogAppender" />
2127

2228
<root level="trace">

logback-amqp-consumer/src/main/java/ro/volution/dev/logback/amqp/consumer/AmqpConsumerAgent.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,6 @@
55
import java.util.concurrent.LinkedBlockingQueue;
66
import java.util.concurrent.TimeUnit;
77

8-
import ro.volution.dev.logback.amqp.common.Callbacks;
9-
import ro.volution.dev.logback.amqp.common.DefaultBinarySerializer;
10-
import ro.volution.dev.logback.amqp.common.DefaultContextAwareCallbacks;
11-
import ro.volution.dev.logback.amqp.common.Serializer;
12-
13-
import ro.volution.dev.logback.amqp.accessors.AmqpConsumer;
14-
import ro.volution.dev.logback.amqp.accessors.AmqpMessage;
15-
168
import ch.qos.logback.classic.Level;
179
import ch.qos.logback.classic.Logger;
1810
import ch.qos.logback.classic.spi.ILoggingEvent;
@@ -22,6 +14,12 @@
2214
import ch.qos.logback.core.spi.FilterReply;
2315
import ch.qos.logback.core.spi.LifeCycle;
2416
import org.slf4j.LoggerFactory;
17+
import ro.volution.dev.logback.amqp.accessors.AmqpConsumer;
18+
import ro.volution.dev.logback.amqp.accessors.AmqpMessage;
19+
import ro.volution.dev.logback.common.Callbacks;
20+
import ro.volution.dev.logback.common.DefaultBinarySerializer;
21+
import ro.volution.dev.logback.common.DefaultContextAwareCallbacks;
22+
import ro.volution.dev.logback.common.Serializer;
2523

2624

2725
public class AmqpConsumerAgent

logback-amqp-consumer/src/main/java/ro/volution/dev/logback/amqp/consumer/AmqpConsumerAgentMain.java

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,40 @@ public static final void main (final String[] arguments)
6969
System.exit (1);
7070
}
7171

72-
public static final class AgentAction
72+
public static final class Configurator
73+
extends JoranConfigurator
74+
{
75+
public Configurator (final List<AmqpConsumerAgent> agents)
76+
{
77+
super ();
78+
this.agentAction = new JoranAction (agents, false);
79+
this.agentAction.setContext (this.getContext ());
80+
}
81+
82+
public final void addInstanceRules (final RuleStore rules)
83+
{
84+
super.addInstanceRules (rules);
85+
rules.addRule (new Pattern ("/configuration/amqpConsumerAgent"), this.agentAction);
86+
}
87+
88+
public final void setContext (final Context context)
89+
{
90+
super.setContext (context);
91+
this.agentAction.setContext (context);
92+
}
93+
94+
private final JoranAction agentAction;
95+
}
96+
97+
public static final class JoranAction
7398
extends Action
7499
{
75-
public AgentAction ()
100+
public JoranAction ()
76101
{
77102
this (null, true);
78103
}
79104

80-
public AgentAction (final List<AmqpConsumerAgent> agents, final boolean autoStart)
105+
public JoranAction (final List<AmqpConsumerAgent> agents, final boolean autoStart)
81106
{
82107
super ();
83108
this.agents = agents;
@@ -111,29 +136,4 @@ public void end (final InterpretationContext ic, final String name)
111136
private final List<AmqpConsumerAgent> agents;
112137
private final boolean autoStart;
113138
}
114-
115-
public static final class Configurator
116-
extends JoranConfigurator
117-
{
118-
public Configurator (final List<AmqpConsumerAgent> agents)
119-
{
120-
super ();
121-
this.agentAction = new AgentAction (agents, false);
122-
this.agentAction.setContext (this.getContext ());
123-
}
124-
125-
public final void addInstanceRules (final RuleStore rules)
126-
{
127-
super.addInstanceRules (rules);
128-
rules.addRule (new Pattern ("/configuration/amqpConsumerAgent"), this.agentAction);
129-
}
130-
131-
public final void setContext (final Context context)
132-
{
133-
super.setContext (context);
134-
this.agentAction.setContext (context);
135-
}
136-
137-
private final AgentAction agentAction;
138-
}
139139
}

0 commit comments

Comments
 (0)