@@ -126,7 +126,7 @@ public class AmqpAppender extends AbstractAppender {
126
126
/**
127
127
* The template.
128
128
*/
129
- private final RabbitTemplate rabbitTemplate = new RabbitTemplate () ;
129
+ private RabbitTemplate rabbitTemplate ;
130
130
131
131
/**
132
132
* Where LoggingEvents are queued to send.
@@ -250,18 +250,12 @@ public static Builder newBuilder() {
250
250
* Submit the required number of senders into the pool.
251
251
*/
252
252
private void startSenders () {
253
- this .rabbitTemplate .setConnectionFactory (this .manager .connectionFactory );
254
253
if (this .manager .async ) {
254
+ this .manager .senderPool = Executors .newCachedThreadPool ();
255
255
for (int i = 0 ; i < this .manager .senderPoolSize ; i ++) {
256
256
this .manager .senderPool .submit (new EventSender ());
257
257
}
258
258
}
259
- else if (this .manager .maxSenderRetries > 0 ) {
260
- RetryTemplate retryTemplate = new RetryTemplate ();
261
- RetryPolicy retryPolicy = new SimpleRetryPolicy (this .manager .maxSenderRetries );
262
- retryTemplate .setRetryPolicy (retryPolicy );
263
- this .rabbitTemplate .setRetryTemplate (retryTemplate );
264
- }
265
259
}
266
260
267
261
@ Override
@@ -287,6 +281,22 @@ protected Message postProcessMessageBeforeSend(Message message, Event event) {
287
281
}
288
282
289
283
protected void sendEvent (Event event , Map <?, ?> properties ) {
284
+ synchronized (this ) {
285
+ if (this .rabbitTemplate == null ) {
286
+ if (this .manager .activateOptions ()) {
287
+ this .rabbitTemplate = new RabbitTemplate (this .manager .connectionFactory );
288
+ if (!this .manager .async && this .manager .maxSenderRetries > 0 ) {
289
+ RetryTemplate retryTemplate = new RetryTemplate ();
290
+ RetryPolicy retryPolicy = new SimpleRetryPolicy (this .manager .maxSenderRetries );
291
+ retryTemplate .setRetryPolicy (retryPolicy );
292
+ this .rabbitTemplate .setRetryTemplate (retryTemplate );
293
+ }
294
+ }
295
+ else {
296
+ throw new AmqpException ("Cannot create template" );
297
+ }
298
+ }
299
+ }
290
300
LogEvent logEvent = event .getEvent ();
291
301
String name = logEvent .getLoggerName ();
292
302
Level level = logEvent .getLevel ();
@@ -352,7 +362,7 @@ protected void doSend(Event event, LogEvent logEvent, MessageProperties amqpProp
352
362
message = new Message (msgBody .toString ().getBytes (), amqpProps ); //NOSONAR (default charset)
353
363
}
354
364
message = postProcessMessageBeforeSend (message , event );
355
- this .rabbitTemplate .send (this .manager .exchangeName , routingKey , message );
365
+ this .rabbitTemplate .send (this .manager .exchangeName , routingKey , message ); // NOSONAR (sync)
356
366
}
357
367
catch (AmqpException e ) {
358
368
int retries = event .incrementRetries ();
@@ -645,7 +655,7 @@ protected AmqpManager(LoggerContext loggerContext, String name) {
645
655
super (loggerContext , name );
646
656
}
647
657
648
- private boolean activateOptions () {
658
+ boolean activateOptions () {
649
659
ConnectionFactory rabbitConnectionFactory = createRabbitConnectionFactory ();
650
660
if (rabbitConnectionFactory != null ) {
651
661
Assert .state (this .applicationId != null , "applicationId is required" );
@@ -667,7 +677,6 @@ private boolean activateOptions() {
667
677
this .clientConnectionProperties );
668
678
}
669
679
setUpExchangeDeclaration ();
670
- this .senderPool = Executors .newCachedThreadPool ();
671
680
return true ;
672
681
}
673
682
return false ;
@@ -1182,11 +1191,8 @@ public AmqpAppender build() {
1182
1191
}
1183
1192
1184
1193
AmqpAppender appender = buildInstance (this .name , this .filter , theLayout , this .ignoreExceptions , manager , eventQueue );
1185
- if (manager .activateOptions ()) {
1186
- appender .startSenders ();
1187
- return appender ;
1188
- }
1189
- return null ;
1194
+ appender .startSenders ();
1195
+ return appender ;
1190
1196
}
1191
1197
1192
1198
/**
0 commit comments