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>>
The
AsyncLogger
uses the asynchronous patter to forward
Logger
functionality to an encapsulated Logger
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 encapsulated Logger
instance from the asynchronous
AsyncLogger
.
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 next Record
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.
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.refcodes.component.Destroyable
org.refcodes.component.Destroyable.DestroyAutomaton
-
Constructor Summary
ConstructorDescriptionInstantiates 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
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.refcodes.logger.LogDecorator
printHead, printTail
-
Constructor Details
-
AsyncLogger
public AsyncLogger()Instantiates a new async logger. -
AsyncLogger
- Parameters:
aLogger
- The a logger which is to be enriched with asynchronous functionality.
-
AsyncLogger
Constructs anAsyncLogger
from the providedLogger
instance.- Parameters:
aExecutorService
- TheExecutorService
to use when creating threads.aLogger
- TheLogger
instances to be used for theAsyncLogger
.
-
-
Method Details
-
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
-
setLogger
- Specified by:
setLogger
in interfaceorg.refcodes.logger.LoggerAccessor.LoggerMutator<T>
-