Class DelayedHandler
- java.lang.Object
-
- java.util.logging.Handler
-
- org.jboss.logmanager.ExtHandler
-
- org.jboss.logmanager.handlers.DelayedHandler
-
- All Implemented Interfaces:
Closeable
,Flushable
,AutoCloseable
,FlushableCloseable
,Protectable
public class DelayedHandler extends ExtHandler
A handler that queues messages until it's at least one child handler is added or set. If the children handlers are cleared then the handler is no longer considered activated and messages will once again be queued.- Author:
- James R. Perkins
-
-
Field Summary
-
Fields inherited from class org.jboss.logmanager.ExtHandler
handlers, handlersUpdater
-
-
Constructor Summary
Constructors Constructor Description DelayedHandler()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addHandler(Handler handler)
Add a sub-handler to this handler.Handler[]
clearHandlers()
A convenience method to atomically get and clear all sub-handlers.void
close()
Close all child handlers.protected void
doPublish(ExtLogRecord record)
Do the actual work of publication; the record will have been filtered already.boolean
isActivated()
Indicates whether or not this handler has been activated.boolean
isCallerCalculationRequired()
Indicates whether or not the formatter associated with this handler or a formatter from a child handler requires the caller to be calculated.void
removeHandler(Handler handler)
Remove a sub-handler from this handler.void
setCallerCalculationRequired(boolean callerCalculationRequired)
Sets whether or not caller information will be required when formatting records.Handler[]
setHandlers(Handler[] newHandlers)
A convenience method to atomically get and replace the sub-handler array.-
Methods inherited from class org.jboss.logmanager.ExtHandler
checkAccess, checkAccess, disableAccess, enableAccess, flush, getHandlers, isAutoFlush, isCloseChildren, isEnabled, protect, publish, publish, setAutoFlush, setCloseChildren, setEnabled, setEncoding, setErrorManager, setFilter, setFormatter, setLevel, unprotect
-
Methods inherited from class java.util.logging.Handler
getEncoding, getErrorManager, getFilter, getFormatter, getLevel, isLoggable, reportError
-
-
-
-
Method Detail
-
doPublish
protected void doPublish(ExtLogRecord record)
Description copied from class:ExtHandler
Do the actual work of publication; the record will have been filtered already. The default implementation does nothing except to flush if theautoFlush
property is set totrue
; if this behavior is to be preserved in a subclass then this method should be called after the record is physically written.- Overrides:
doPublish
in classExtHandler
- Parameters:
record
- the log record to publish
-
close
public final void close() throws SecurityException
Description copied from class:ExtHandler
Close all child handlers.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Overrides:
close
in classExtHandler
- Throws:
SecurityException
-
addHandler
public void addHandler(Handler handler) throws SecurityException
Add a sub-handler to this handler. Some handler types do not utilize sub-handlers.Note that once this is invoked the handler will be activated and the messages will no longer be queued. If more than one child handler is required the
setHandlers(Handler[])
should be used.- Overrides:
addHandler
in classExtHandler
- Parameters:
handler
- the handler to add- Throws:
SecurityException
- if a security manager exists and if the caller does not haveLoggingPermission(control)
or the handler isprotected
.- See Also:
setHandlers(Handler[])
-
setHandlers
public Handler[] setHandlers(Handler[] newHandlers) throws SecurityException
A convenience method to atomically get and replace the sub-handler array.Note that once this is invoked the handler will be activated and the messages will no longer be queued.
- Overrides:
setHandlers
in classExtHandler
- Parameters:
newHandlers
- the new sub-handlers- Returns:
- the old sub-handler array
- Throws:
SecurityException
- if a security manager exists and if the caller does not haveLoggingPermission(control)
or the handler isprotected
.
-
removeHandler
public void removeHandler(Handler handler) throws SecurityException
Remove a sub-handler from this handler. Some handler types do not utilize sub-handlers.Note that if the last child handler is removed the handler will no longer be activated and the messages will again be queued.
- Overrides:
removeHandler
in classExtHandler
- Parameters:
handler
- the handler to remove- Throws:
SecurityException
- if a security manager exists and if the caller does not haveLoggingPermission(control)
or the handler isprotected
.- See Also:
clearHandlers()
-
clearHandlers
public Handler[] clearHandlers() throws SecurityException
A convenience method to atomically get and clear all sub-handlers.Note that once this is invoked the handler will no longer be activated and messages will again be queued.
- Overrides:
clearHandlers
in classExtHandler
- Returns:
- the old sub-handler array
- Throws:
SecurityException
- if a security manager exists and if the caller does not haveLoggingPermission(control)
or the handler isprotected
.- See Also:
removeHandler(Handler)
-
isCallerCalculationRequired
public boolean isCallerCalculationRequired()
Indicates whether or not the formatter associated with this handler or a formatter from a child handler requires the caller to be calculated.Calculating the caller on a log record can be an expensive operation. Some handlers may be required to copy some data from the log record, but may not need the caller information. If the formatter is a
ExtFormatter
theExtFormatter.isCallerCalculationRequired()
is used to determine if calculation of the caller is required.This can be overridden to always require the caller calculation by setting the
setCallerCalculationRequired(boolean)
value totrue
.- Overrides:
isCallerCalculationRequired
in classExtHandler
- Returns:
true
if the caller should be calculated, otherwisefalse
if it can be skipped- See Also:
setCallerCalculationRequired(boolean)
-
setCallerCalculationRequired
public void setCallerCalculationRequired(boolean callerCalculationRequired)
Sets whether or not caller information will be required when formatting records.If set to
true
the caller information will be calculated for each record that is placed in the queue. A value offalse
means the {@link super#isCallerCalculationRequired()} will be used.Note that the caller information is only attempted to be calculated when the handler has not been activated. Once activated it's up to the children handlers to determine how the record is processed.
- Parameters:
callerCalculationRequired
-true
if the caller information should always be calculated before the record is being placed in the queue
-
isActivated
public final boolean isActivated()
Indicates whether or not this handler has been activated.- Returns:
true
if the handler has been activated, otherwisefalse
-
-