Class RingBufferLogEvent

    • Field Detail

      • FACTORY

        public static final org.apache.logging.log4j.core.async.RingBufferLogEvent.Factory FACTORY
        The EventFactory for RingBufferLogEvents.
    • Constructor Detail

      • RingBufferLogEvent

        public RingBufferLogEvent()
    • Method Detail

      • toImmutable

        public LogEvent toImmutable()
        Description copied from interface: LogEvent
        Returns an immutable version of this log event, which MAY BE a copy of this event.
        Specified by:
        toImmutable in interface LogEvent
        Returns:
        an immutable version of this log event
      • execute

        public void execute​(boolean endOfBatch)
        Event processor that reads the event from the ringbuffer can call this method.
        Parameters:
        endOfBatch - flag to indicate if this is the last event in a batch from the RingBuffer
      • isEndOfBatch

        public boolean isEndOfBatch()
        Returns true if this event is the end of a batch, false otherwise.
        Specified by:
        isEndOfBatch in interface LogEvent
        Returns:
        true if this event is the end of a batch, false otherwise
      • setEndOfBatch

        public void setEndOfBatch​(boolean endOfBatch)
        Description copied from interface: LogEvent
        Sets whether this event is the last one in a batch. Used by asynchronous Loggers and Appenders to signal to buffered downstream components when to flush to disk, as a more efficient alternative to the immediateFlush=true configuration.
        Specified by:
        setEndOfBatch in interface LogEvent
        Parameters:
        endOfBatch - true if this event is the last one in a batch, false otherwise.
      • isIncludeLocation

        public boolean isIncludeLocation()
        Description copied from interface: LogEvent
        Returns whether the source of the logging request is required downstream. Asynchronous Loggers and Appenders use this flag to determine whether to take a StackTrace snapshot or not before handing off this event to another thread.
        Specified by:
        isIncludeLocation in interface LogEvent
        Returns:
        true if the source of the logging request is required downstream, false otherwise.
        See Also:
        LogEvent.getSource()
      • setIncludeLocation

        public void setIncludeLocation​(boolean includeLocation)
        Description copied from interface: LogEvent
        Sets whether the source of the logging request is required downstream. Asynchronous Loggers and Appenders use this flag to determine whether to take a StackTrace snapshot or not before handing off this event to another thread.
        Specified by:
        setIncludeLocation in interface LogEvent
        Parameters:
        includeLocation - true if the source of the logging request is required downstream, false otherwise.
        See Also:
        LogEvent.getSource()
      • getLoggerName

        public String getLoggerName()
        Description copied from interface: LogEvent
        Gets the logger name.
        Specified by:
        getLoggerName in interface LogEvent
        Returns:
        logger name, may be null.
      • getMarker

        public Marker getMarker()
        Description copied from interface: LogEvent
        Gets the Marker associated with the event.
        Specified by:
        getMarker in interface LogEvent
        Returns:
        Marker or null if no Marker was defined on this LogEvent
      • getLoggerFqcn

        public String getLoggerFqcn()
        Description copied from interface: LogEvent
        Returns the fully qualified class name of the caller of the logging API.
        Specified by:
        getLoggerFqcn in interface LogEvent
        Returns:
        The fully qualified class name of the caller.
      • getLevel

        public Level getLevel()
        Description copied from interface: LogEvent
        Gets the level.
        Specified by:
        getLevel in interface LogEvent
        Returns:
        level.
      • getMessage

        public Message getMessage()
        Description copied from interface: LogEvent
        Gets the message associated with the event.
        Specified by:
        getMessage in interface LogEvent
        Returns:
        message.
      • getFormattedMessage

        public String getFormattedMessage()
        Description copied from interface: Message
        Gets the Message formatted as a String. Each Message implementation determines the appropriate way to format the data encapsulated in the Message. Messages that provide more than one way of formatting the Message will implement MultiformatMessage.

        When configured to log asynchronously, this method is called before the Message is queued, unless this message implements ReusableMessage or is annotated with AsynchronouslyFormattable. This gives the Message implementation class a chance to create a formatted message String with the current value of any mutable objects. The intention is that the Message implementation caches this formatted message and returns it on subsequent calls. (See LOG4J2-763.)

        When logging synchronously, this method will not be called for Messages that implement the StringBuilderFormattable interface: instead, the formatTo(StringBuilder) method will be called so the Message can format its contents without creating intermediate String objects.

        Specified by:
        getFormattedMessage in interface Message
        Returns:
        The message String.
        See Also:
        Message.getFormattedMessage()
      • getFormat

        public String getFormat()
        Description copied from interface: Message
        Gets the format portion of the Message.
        Specified by:
        getFormat in interface Message
        Returns:
        The message format. Some implementations, such as ParameterizedMessage, will use this as the message "pattern". Other Messages may simply return an empty String. TODO Do all messages have a format? What syntax? Using a Formatter object could be cleaner. (RG) In SimpleMessage the format is identical to the formatted message. In ParameterizedMessage and StructuredDataMessage it is not. It is up to the Message implementer to determine what this method will return. A Formatter is inappropriate as this is very specific to the Message implementation so it isn't clear to me how having a Formatter separate from the Message would be cleaner.
        See Also:
        Message.getFormat()
      • swapParameters

        public Object[] swapParameters​(Object[] emptyReplacement)
        Replaces this ReusableMessage's parameter array with the specified value and return the original array
        Specified by:
        swapParameters in interface ReusableMessage
        Parameters:
        emptyReplacement - the parameter array that can be used for subsequent uses of this reusable message
        Returns:
        the original parameter array
        See Also:
        ReusableMessage.swapParameters(Object[])
      • getParameterCount

        public short getParameterCount()
        Description copied from interface: ReusableMessage
        Returns the number of parameters that was used to initialize this reusable message for the current content.

        The parameter array returned by ReusableMessage.swapParameters(Object[]) may be larger than the actual number of parameters. Callers should use this method to determine how many elements the array contains.

        Specified by:
        getParameterCount in interface ReusableMessage
        Returns:
        the current number of parameters
      • forEachParameter

        public <S> void forEachParameter​(ParameterConsumer<S> action,
                                         S state)
        Description copied from interface: ParameterVisitable
        Performs the given action for each parameter until all values have been processed or the action throws an exception.

        The second parameter lets callers pass in a stateful object to be modified with the key-value pairs, so the TriConsumer implementation itself can be stateless and potentially reusable.

        Specified by:
        forEachParameter in interface ParameterVisitable
        Type Parameters:
        S - type of the third parameter
        Parameters:
        action - The action to be performed for each key-value pair in this collection
        state - the object to be passed as the third parameter to each invocation on the specified ParameterConsumer.
      • memento

        public Message memento()
        Description copied from interface: ReusableMessage
        Returns an immutable snapshot of the current internal state of this reusable message. The returned snapshot will not be affected by subsequent modifications of this reusable message.
        Specified by:
        memento in interface ReusableMessage
        Returns:
        an immutable snapshot of this message
      • charAt

        public char charAt​(int index)
        Specified by:
        charAt in interface CharSequence
      • getThrown

        public Throwable getThrown()
        Description copied from interface: LogEvent
        Gets throwable associated with logging request.

        Convenience method for ThrowableProxy.getThrowable();

        Specified by:
        getThrown in interface LogEvent
        Returns:
        throwable, may be null.
      • getThrownProxy

        public ThrowableProxy getThrownProxy()
        Description copied from interface: LogEvent
        Gets throwable proxy associated with logging request.
        Specified by:
        getThrownProxy in interface LogEvent
        Returns:
        throwable, may be null.
      • getContextData

        public ReadOnlyStringMap getContextData()
        Description copied from interface: LogEvent
        Returns the ReadOnlyStringMap object holding context data key-value pairs.

        Context data (also known as Mapped Diagnostic Context or MDC) is data that is set by the application to be included in all subsequent log events. The default source for context data is the ThreadContext (and properties configured on the Logger that logged the event), but users can configure a custom ContextDataInjector to inject key-value pairs from any arbitrary source.

        Specified by:
        getContextData in interface LogEvent
        Returns:
        the ReadOnlyStringMap object holding context data key-value pairs
        See Also:
        ContextDataInjector, ThreadContext
      • getContextMap

        public Map<String,​String> getContextMap()
        Description copied from interface: LogEvent
        Gets the context map (also know as Mapped Diagnostic Context or MDC).
        Specified by:
        getContextMap in interface LogEvent
        Returns:
        The context map, never null.
      • getThreadId

        public long getThreadId()
        Description copied from interface: LogEvent
        Gets the thread ID.
        Specified by:
        getThreadId in interface LogEvent
        Returns:
        thread ID.
      • getThreadName

        public String getThreadName()
        Description copied from interface: LogEvent
        Gets the thread name.
        Specified by:
        getThreadName in interface LogEvent
        Returns:
        thread name, may be null. TODO guess this could go into a thread context object too. (RG) Why?
      • getThreadPriority

        public int getThreadPriority()
        Description copied from interface: LogEvent
        Gets the thread priority.
        Specified by:
        getThreadPriority in interface LogEvent
        Returns:
        thread priority.
      • getSource

        public StackTraceElement getSource()
        Description copied from interface: LogEvent
        Gets the source of logging request.
        Specified by:
        getSource in interface LogEvent
        Returns:
        source of logging request, may be null.
      • getInstant

        public Instant getInstant()
        Description copied from interface: LogEvent
        Returns the Instant when the message was logged.

        Caution: if this LogEvent implementation is mutable and reused for multiple consecutive log messages, then the Instant object returned by this method is also mutable and reused. Client code should not keep a reference to the returned object but make a copy instead.

        Specified by:
        getInstant in interface LogEvent
        Returns:
        the Instant holding Instant details for this log event
      • getNanoTime

        public long getNanoTime()
        Description copied from interface: LogEvent
        Returns the value of the running Java Virtual Machine's high-resolution time source when this event was created, or a dummy value if it is known that this value will not be used downstream.
        Specified by:
        getNanoTime in interface LogEvent
        Returns:
        The value of the running Java Virtual Machine's high-resolution time source when this event was created.
      • clear

        public void clear()
        Release references held by ring buffer to allow objects to be garbage-collected.
      • createMemento

        public LogEvent createMemento()
        Creates and returns a new immutable copy of this RingBufferLogEvent.
        Returns:
        a new immutable copy of the data in this RingBufferLogEvent
      • initializeBuilder

        public void initializeBuilder​(Log4jLogEvent.Builder builder)
        Initializes the specified Log4jLogEvent.Builder from this RingBufferLogEvent.
        Parameters:
        builder - the builder whose fields to populate