Class AbstractDatabaseManager
- java.lang.Object
-
- org.apache.logging.log4j.core.appender.AbstractManager
-
- org.apache.logging.log4j.core.appender.db.AbstractDatabaseManager
-
- All Implemented Interfaces:
java.io.Flushable,java.lang.AutoCloseable
- Direct Known Subclasses:
JdbcDatabaseManager,NoSqlDatabaseManager
public abstract class AbstractDatabaseManager extends AbstractManager implements java.io.Flushable
Manager that allows database appenders to have their configuration reloaded without losing events.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static classAbstractDatabaseManager.AbstractFactoryDataImplementations should extend this class for passing data between the getManager method and the manager factory class.
-
Field Summary
Fields Modifier and Type Field Description private java.util.ArrayList<LogEvent>bufferprivate intbufferSizeprivate Layout<? extends java.io.Serializable>layoutprivate booleanrunning-
Fields inherited from class org.apache.logging.log4j.core.appender.AbstractManager
count, LOGGER
-
-
Constructor Summary
Constructors Modifier Constructor Description protectedAbstractDatabaseManager(java.lang.String name, int bufferSize)Deprecated.protectedAbstractDatabaseManager(java.lang.String name, int bufferSize, Layout<? extends java.io.Serializable> layout)Deprecated.protectedAbstractDatabaseManager(java.lang.String name, int bufferSize, Layout<? extends java.io.Serializable> layout, Configuration configuration)Constructs the base manager.
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods Modifier and Type Method Description protected voidbuffer(LogEvent event)protected abstract booleancommitAndClose()Commits any active transaction (if applicable) and disconnects from the database (returns the connection to the connection pool).protected abstract voidconnectAndStart()Connects to the database and starts a transaction (if applicable).voidflush()This method is called automatically when the buffer size reaches its maximum or at the beginning of a call toshutdown().protected static <M extends AbstractDatabaseManager,T extends AbstractDatabaseManager.AbstractFactoryData>
MgetManager(java.lang.String name, T data, ManagerFactory<M,T> factory)Implementations should define their own getManager method and call this method from that to create or get existing managers.protected booleanisBuffered()booleanisRunning()Indicates whether the manager is currently connectedstartup()has been called andshutdown()has not been called).booleanreleaseSub(long timeout, java.util.concurrent.TimeUnit timeUnit)May be overridden by managers to perform processing while the manager is being released and the lock is held.booleanshutdown()This method is called from theAbstractManager.close()method when the appender is stopped or the appender's manager is replaced.protected abstract booleanshutdownInternal()Implementations should implement this method to perform any proprietary disconnection / shutdown operations.voidstartup()This method is called within the appender when the appender is started.protected abstract voidstartupInternal()Implementations should implement this method to perform any proprietary startup operations.java.lang.StringtoString()voidwrite(LogEvent event)Deprecated.since 2.11.0 Usewrite(LogEvent, Serializable).voidwrite(LogEvent event, java.io.Serializable serializable)This method manages buffering and writing of events.protected voidwriteInternal(LogEvent event)Deprecated.protected abstract voidwriteInternal(LogEvent event, java.io.Serializable serializable)Performs the actual writing of the event in an implementation-specific way.protected voidwriteThrough(LogEvent event, java.io.Serializable serializable)-
Methods inherited from class org.apache.logging.log4j.core.appender.AbstractManager
close, getContentFormat, getCount, getLoggerContext, getManager, getName, getStrSubstitutor, hasManager, log, logDebug, logError, logger, logWarn, narrow, release, stop, updateData
-
-
-
-
Constructor Detail
-
AbstractDatabaseManager
@Deprecated protected AbstractDatabaseManager(java.lang.String name, int bufferSize)Deprecated.Constructs the base manager.- Parameters:
name- The manager name, which should include any configuration details that one might want to be able to reconfigure at runtime, such as database name, username, (hashed) password, etc.bufferSize- The size of the log event buffer.
-
AbstractDatabaseManager
@Deprecated protected AbstractDatabaseManager(java.lang.String name, int bufferSize, Layout<? extends java.io.Serializable> layout)Deprecated.Constructs the base manager.- Parameters:
name- The manager name, which should include any configuration details that one might want to be able to reconfigure at runtime, such as database name, username, (hashed) password, etc.layout- the Appender-level layout.bufferSize- The size of the log event buffer.
-
AbstractDatabaseManager
protected AbstractDatabaseManager(java.lang.String name, int bufferSize, Layout<? extends java.io.Serializable> layout, Configuration configuration)Constructs the base manager.- Parameters:
name- The manager name, which should include any configuration details that one might want to be able to reconfigure at runtime, such as database name, username, (hashed) password, etc.layout- the Appender-level layout.bufferSize- The size of the log event buffer.configuration- My configuration.
-
-
Method Detail
-
getManager
protected static <M extends AbstractDatabaseManager,T extends AbstractDatabaseManager.AbstractFactoryData> M getManager(java.lang.String name, T data, ManagerFactory<M,T> factory)
Implementations should define their own getManager method and call this method from that to create or get existing managers.- Type Parameters:
M- The concrete manager type.T- The concreteAbstractDatabaseManager.AbstractFactoryDatatype.- Parameters:
name- The manager name, which should include any configuration details that one might want to be able to reconfigure at runtime, such as database name, username, (hashed) password, etc.data- The concrete instance ofAbstractDatabaseManager.AbstractFactoryDataappropriate for the given manager.factory- A factory instance for creating the appropriate manager.- Returns:
- a new or existing manager of the specified type and name.
-
buffer
protected void buffer(LogEvent event)
-
commitAndClose
protected abstract boolean commitAndClose()
Commits any active transaction (if applicable) and disconnects from the database (returns the connection to the connection pool). With buffering enabled, this is called when flushing the buffer completes, after the last call towriteInternal(org.apache.logging.log4j.core.LogEvent). With buffering disabled, this is called immediately after every invocation ofwriteInternal(org.apache.logging.log4j.core.LogEvent).- Returns:
- true if all resources were closed normally, false otherwise.
-
connectAndStart
protected abstract void connectAndStart()
Connects to the database and starts a transaction (if applicable). With buffering enabled, this is called when flushing the buffer begins, before the first call towriteInternal(org.apache.logging.log4j.core.LogEvent). With buffering disabled, this is called immediately before every invocation ofwriteInternal(org.apache.logging.log4j.core.LogEvent).
-
flush
public final void flush()
This method is called automatically when the buffer size reaches its maximum or at the beginning of a call toshutdown(). It can also be called manually to flush events to the database.- Specified by:
flushin interfacejava.io.Flushable
-
isBuffered
protected boolean isBuffered()
-
isRunning
public final boolean isRunning()
Indicates whether the manager is currently connectedstartup()has been called andshutdown()has not been called).- Returns:
trueif the manager is connected.
-
releaseSub
public final boolean releaseSub(long timeout, java.util.concurrent.TimeUnit timeUnit)Description copied from class:AbstractManagerMay be overridden by managers to perform processing while the manager is being released and the lock is held. A timeout is passed for implementors to use as they see fit.- Overrides:
releaseSubin classAbstractManager- Parameters:
timeout- timeouttimeUnit- timeout time unit- Returns:
- true if all resources were closed normally, false otherwise.
-
shutdown
public final boolean shutdown()
This method is called from theAbstractManager.close()method when the appender is stopped or the appender's manager is replaced. If it has not already been called, it callsshutdownInternal()and catches any exceptions it might throw.- Returns:
- true if all resources were closed normally, false otherwise.
-
shutdownInternal
protected abstract boolean shutdownInternal() throws java.lang.ExceptionImplementations should implement this method to perform any proprietary disconnection / shutdown operations. This method will never be called twice on the same instance, and it will only be called afterstartupInternal(). It is safe to throw any exceptions from this method. This method does not necessarily disconnect from the database for the same reasons outlined instartupInternal().- Returns:
- true if all resources were closed normally, false otherwise.
- Throws:
java.lang.Exception
-
startup
public final void startup()
This method is called within the appender when the appender is started. If it has not already been called, it callsstartupInternal()and catches any exceptions it might throw.
-
startupInternal
protected abstract void startupInternal() throws java.lang.ExceptionImplementations should implement this method to perform any proprietary startup operations. This method will never be called twice on the same instance. It is safe to throw any exceptions from this method. This method does not necessarily connect to the database, as it is generally unreliable to connect once and use the same connection for hours.- Throws:
java.lang.Exception
-
toString
public final java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
write
@Deprecated public final void write(LogEvent event)
Deprecated.since 2.11.0 Usewrite(LogEvent, Serializable).This method manages buffering and writing of events.- Parameters:
event- The event to write to the database.
-
write
public final void write(LogEvent event, java.io.Serializable serializable)
This method manages buffering and writing of events.- Parameters:
event- The event to write to the database.serializable- Serializable event
-
writeInternal
@Deprecated protected void writeInternal(LogEvent event)
Deprecated.Performs the actual writing of the event in an implementation-specific way. This method is called immediately fromwrite(LogEvent, Serializable)if buffering is off, or fromflush()if the buffer has reached its limit.- Parameters:
event- The event to write to the database.
-
writeInternal
protected abstract void writeInternal(LogEvent event, java.io.Serializable serializable)
Performs the actual writing of the event in an implementation-specific way. This method is called immediately fromwrite(LogEvent, Serializable)if buffering is off, or fromflush()if the buffer has reached its limit.- Parameters:
event- The event to write to the database.
-
writeThrough
protected void writeThrough(LogEvent event, java.io.Serializable serializable)
-
-