public class AmqpAppender
extends org.apache.log4j.AppenderSkeleton
A fully-configured AmqpAppender, with every option set to their defaults, would look like this:
log4j.appender.amqp=org.springframework.amqp.log4j.AmqpAppender
#-------------------------------
## Connection settings
#-------------------------------
log4j.appender.amqp.host=localhost
log4j.appender.amqp.port=5672
log4j.appender.amqp.username=guest
log4j.appender.amqp.password=guest
log4j.appender.amqp.virtualHost=/
#-------------------------------
## Exchange name and type
#-------------------------------
log4j.appender.amqp.exchangeName=logs
log4j.appender.amqp.exchangeType=topic
#-------------------------------
## Log4J-format pattern to use to create a routing key.
## The application id is available as %X{applicationId}.
#-------------------------------
log4j.appender.amqp.routingKeyPattern=%c.%p
#-------------------------------
## Whether or not to declare this configured exchange
#-------------------------------
log4j.appender.amqp.declareExchange=false
#-------------------------------
## Flags to use when declaring the exchange
#-------------------------------
log4j.appender.amqp.durable=true
log4j.appender.amqp.autoDelete=false
#-------------------------------
## Message properties
#-------------------------------
log4j.appender.amqp.contentType=text/plain
#log4j.appender.amqp.contentEncoding=null
log4j.appender.amqp.generateId=false
#log4j.appender.amqp.charset=null
#-------------------------------
## Sender configuration
#-------------------------------
log4j.appender.amqp.senderPoolSize=2
log4j.appender.amqp.maxSenderRetries=30
#log4j.appender.amqp.applicationId=null
#-------------------------------
## Standard Log4J stuff
#-------------------------------
log4j.appender.amqp.layout=org.apache.log4j.PatternLayout
log4j.appender.amqp.layout.ConversionPattern=%d %p %t [%c] - <%m>%n
| Modifier and Type | Class and Description |
|---|---|
protected class |
AmqpAppender.Event
Small helper class to encapsulate a LoggingEvent, its MDC properties, and the number of retries.
|
protected class |
AmqpAppender.EventSender
Helper class to actually send LoggingEvents asynchronously.
|
| Modifier and Type | Field and Description |
|---|---|
static java.lang.String |
APPLICATION_ID
Key name for the application id (if there is one set via the appender config) in the message properties.
|
private java.lang.String |
applicationId
Configuration arbitrary application ID.
|
private boolean |
autoDelete |
static java.lang.String |
CATEGORY_LEVEL
Key name for the logger level name in the message properties
|
static java.lang.String |
CATEGORY_NAME
Key name for the logger category name in the message properties
|
private java.lang.String |
charset
charset to use when converting String to byte[], default null (system default charset used).
|
private AbstractConnectionFactory |
connectionFactory
RabbitMQ ConnectionFactory.
|
private java.lang.String |
contentEncoding
Default content-encoding of log messages.
|
private java.lang.String |
contentType
Default content-type of log messages.
|
private boolean |
declareExchange
Whether or not to try and declare the configured exchange when this appender starts.
|
private boolean |
durable |
private java.util.concurrent.LinkedBlockingQueue<AmqpAppender.Event> |
events
Where LoggingEvents are queued to send.
|
private java.util.concurrent.atomic.AtomicBoolean |
exchangeDeclared
Whether or not we've tried to declare this exchange yet.
|
private java.lang.String |
exchangeName
Name of the exchange to publish log events to.
|
private java.lang.String |
exchangeType
Type of the exchange to publish log events to.
|
private boolean |
generateId
Used to determine whether
MessageProperties.setMessageId(String) is set. |
private java.lang.String |
host
RabbitMQ host to connect to.
|
private java.util.concurrent.atomic.AtomicBoolean |
initializing |
private java.lang.Object |
layoutMutex
Used to synchronize access to pattern layouts.
|
private int |
maxSenderRetries
How many times to retry sending a message if the broker is unavailable or there is some other error.
|
private java.lang.String |
password
RabbitMQ password for this user.
|
private int |
port
RabbitMQ port to connect to.
|
private java.util.Timer |
retryTimer
Retries are delayed like: N ^ log(N), where N is the retry number.
|
private org.apache.log4j.Layout |
routingKeyLayout
Log4J Layout to use to generate routing key.
|
private java.lang.String |
routingKeyPattern
Log4J pattern format to use to generate a routing key.
|
private java.util.concurrent.ExecutorService |
senderPool
The pool of senders.
|
private int |
senderPoolSize
How many senders to use at once.
|
private java.lang.String |
username
RabbitMQ user to connect as.
|
private java.lang.String |
virtualHost
RabbitMQ virtual host to connect to.
|
| Constructor and Description |
|---|
AmqpAppender() |
| Modifier and Type | Method and Description |
|---|---|
void |
append(org.apache.log4j.spi.LoggingEvent event) |
void |
close() |
java.lang.String |
getApplicationId() |
java.lang.String |
getCharset() |
java.lang.String |
getContentEncoding() |
java.lang.String |
getContentType() |
java.lang.String |
getExchangeName() |
java.lang.String |
getExchangeType() |
java.lang.String |
getHost() |
int |
getMaxSenderRetries() |
java.lang.String |
getPassword() |
int |
getPort() |
java.lang.String |
getRoutingKeyPattern() |
int |
getSenderPoolSize() |
java.lang.String |
getUsername() |
java.lang.String |
getVirtualHost() |
boolean |
isAutoDelete() |
boolean |
isDeclareExchange() |
boolean |
isDurable() |
boolean |
isGenerateId() |
protected void |
maybeDeclareExchange()
Maybe declare the exchange.
|
boolean |
requiresLayout() |
void |
setApplicationId(java.lang.String applicationId) |
void |
setAutoDelete(boolean autoDelete) |
void |
setCharset(java.lang.String charset) |
void |
setContentEncoding(java.lang.String contentEncoding) |
void |
setContentType(java.lang.String contentType) |
void |
setDeclareExchange(boolean declareExchange) |
void |
setDurable(boolean durable) |
void |
setExchangeName(java.lang.String exchangeName) |
void |
setExchangeType(java.lang.String exchangeType) |
void |
setGenerateId(boolean generateId) |
void |
setHost(java.lang.String host) |
void |
setMaxSenderRetries(int maxSenderRetries) |
void |
setPassword(java.lang.String password) |
void |
setPort(int port) |
void |
setRoutingKeyPattern(java.lang.String routingKeyPattern) |
void |
setSenderPoolSize(int senderPoolSize) |
void |
setUsername(java.lang.String username) |
void |
setVirtualHost(java.lang.String virtualHost) |
protected void |
startSenders()
Submit the required number of senders into the pool.
|
public static final java.lang.String APPLICATION_ID
public static final java.lang.String CATEGORY_NAME
public static final java.lang.String CATEGORY_LEVEL
private java.lang.String exchangeName
private java.lang.String exchangeType
private java.lang.String routingKeyPattern
private org.apache.log4j.Layout routingKeyLayout
private final java.lang.Object layoutMutex
private final java.util.concurrent.atomic.AtomicBoolean exchangeDeclared
private java.lang.String applicationId
private final java.util.concurrent.LinkedBlockingQueue<AmqpAppender.Event> events
private java.util.concurrent.ExecutorService senderPool
private int senderPoolSize
private int maxSenderRetries
private final java.util.Timer retryTimer
private AbstractConnectionFactory connectionFactory
private java.lang.String host
private java.lang.String virtualHost
private int port
private java.lang.String username
private java.lang.String password
private java.lang.String contentType
private java.lang.String contentEncoding
private boolean declareExchange
private java.lang.String charset
private boolean durable
private boolean autoDelete
private boolean generateId
MessageProperties.setMessageId(String) is set.private final java.util.concurrent.atomic.AtomicBoolean initializing
public java.lang.String getHost()
public void setHost(java.lang.String host)
public int getPort()
public void setPort(int port)
public java.lang.String getVirtualHost()
public void setVirtualHost(java.lang.String virtualHost)
public java.lang.String getUsername()
public void setUsername(java.lang.String username)
public java.lang.String getPassword()
public void setPassword(java.lang.String password)
public java.lang.String getExchangeName()
public void setExchangeName(java.lang.String exchangeName)
public java.lang.String getExchangeType()
public void setExchangeType(java.lang.String exchangeType)
public java.lang.String getRoutingKeyPattern()
public void setRoutingKeyPattern(java.lang.String routingKeyPattern)
public boolean isDeclareExchange()
public void setDeclareExchange(boolean declareExchange)
public java.lang.String getContentType()
public void setContentType(java.lang.String contentType)
public java.lang.String getContentEncoding()
public void setContentEncoding(java.lang.String contentEncoding)
public java.lang.String getApplicationId()
public void setApplicationId(java.lang.String applicationId)
public int getSenderPoolSize()
public void setSenderPoolSize(int senderPoolSize)
public int getMaxSenderRetries()
public void setMaxSenderRetries(int maxSenderRetries)
public boolean isDurable()
public void setDurable(boolean durable)
public boolean isAutoDelete()
public void setAutoDelete(boolean autoDelete)
public boolean isGenerateId()
public void setGenerateId(boolean generateId)
public java.lang.String getCharset()
public void setCharset(java.lang.String charset)
protected void startSenders()
protected void maybeDeclareExchange()
public void append(org.apache.log4j.spi.LoggingEvent event)
append in class org.apache.log4j.AppenderSkeletonpublic void close()
public boolean requiresLayout()