- java.lang.Object
-
- org.refcodes.logger.alt.async.AsyncLogger<T>
-
- Type Parameters:
T
- The type of theRecord
instances managed by theLogger
.
- All Implemented Interfaces:
org.refcodes.component.Destroyable
,org.refcodes.logger.LogDecorator
,org.refcodes.logger.Logger<T>
,org.refcodes.logger.LoggerAccessor.LoggerMutator<org.refcodes.logger.Logger<T>>
public class AsyncLogger<T> extends Object implements org.refcodes.logger.Logger<T>, org.refcodes.component.Destroyable, org.refcodes.logger.LoggerAccessor.LoggerMutator<org.refcodes.logger.Logger<T>>
TheAsyncLogger
uses the asynchronous patter to forwardLogger
functionality to an encapsulatedLogger
instance.Internally a log line queue (holding
Record
instances to be logged) as well a daemon thread (taking elements from the log line queue) are used to decouple the encapsulatedLogger
instance from the asynchronousAsyncLogger
.A given number of retries are approached in case there is an overflow of the log line queue; this happens when the queue is full the encapsulated
Logger
instance cannot take the nextRecord
in time.To avoid a building up of the log line queue, eventually causing an out of memory, log lines not being taken into the log line queue within the given number of retries, them log lines are dismissed. In such a case a warning with a
LogPriority.WARN
is printed out.
-
-
Constructor Summary
Constructors Constructor Description AsyncLogger()
Instantiates a new async logger.AsyncLogger(ExecutorService aExecutorService, org.refcodes.logger.Logger<T> aLogger)
Constructs anAsyncLogger
from the providedLogger
instance.AsyncLogger(org.refcodes.logger.Logger<T> aLogger)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
destroy()
void
log(org.refcodes.tabular.Record<? extends T> aRecord)
void
printSeparator()
void
setLogger(org.refcodes.logger.Logger<T> aLogger)
-
-
-
Constructor Detail
-
AsyncLogger
public AsyncLogger()
Instantiates a new async logger.
-
AsyncLogger
public AsyncLogger(org.refcodes.logger.Logger<T> aLogger)
- Parameters:
aLogger
- The a logger which is to be enriched with asynchronous functionality.
-
AsyncLogger
public AsyncLogger(ExecutorService aExecutorService, org.refcodes.logger.Logger<T> aLogger)
Constructs anAsyncLogger
from the providedLogger
instance.- Parameters:
aExecutorService
- TheExecutorService
to use when creating threads.aLogger
- TheLogger
instances to be used for theAsyncLogger
.
-
-
Method Detail
-
log
public void log(org.refcodes.tabular.Record<? extends T> aRecord) throws org.refcodes.logger.IllegalRecordRuntimeException, org.refcodes.logger.UnexpectedLogRuntimeException
- Specified by:
log
in interfaceorg.refcodes.logger.Logger<T>
- Throws:
org.refcodes.logger.IllegalRecordRuntimeException
org.refcodes.logger.UnexpectedLogRuntimeException
-
printSeparator
public void printSeparator()
- Specified by:
printSeparator
in interfaceorg.refcodes.logger.LogDecorator
-
destroy
public void destroy()
- Specified by:
destroy
in interfaceorg.refcodes.component.Destroyable
-
-