Class AbstractLogEventWrapperEntity

  • All Implemented Interfaces:
    java.io.Serializable, LogEvent
    Direct Known Subclasses:
    BasicLogEventEntity

    @MappedSuperclass
    public abstract class AbstractLogEventWrapperEntity
    extends java.lang.Object
    implements LogEvent

    Users of the JPA appender MUST extend this class, using JPA annotations on the concrete class and all of its accessor methods (as needed) to map them to the proper table and columns. Accessors you do not want persisted should be annotated with @Transient. All accessors should call getWrappedEvent() and delegate the call to the underlying event. Users may want to instead extend BasicLogEventEntity, which takes care of all of this for you.

    The concrete class must have two constructors: a public no-arg constructor to convince the JPA provider that it's a valid entity, and a public constructor that takes a single event and passes it to the parent class with super(event). Furthermore, the concrete class must be annotated @Entity and @Table and must implement a fully mutable ID property annotated with @Id and @GeneratedValue to tell the JPA provider how to calculate an ID for new events.

    Many of the return types of LogEvent methods (e.g., StackTraceElement, Message, Marker, Throwable, ThreadContext.ContextStack, and Map<String, String>) will not be recognized by the JPA provider. In conjunction with @Convert, you can use the converters in the org.apache.logging.log4j.core.appender.db.jpa.converter package to convert these types to database columns. If you want to retrieve log events from the database, you can create a true POJO entity and also use these converters for extracting persisted values.

    The mutator methods in this class not specified in LogEvent are no-op methods, implemented to satisfy the JPA requirement that accessor methods have matching mutator methods. If you create additional accessor methods, you must likewise create matching no-op mutator methods.

    See Also:
    BasicLogEventEntity, Serialized Form
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      ReadOnlyStringMap getContextData()
      Gets the context map.
      protected LogEvent getWrappedEvent()
      All eventual accessor methods must call this method and delegate the method call to the underlying wrapped event.
      boolean isEndOfBatch()
      Indicates whether this event is the last one in a batch.
      boolean isIncludeLocation()
      Indicates whether the source of the logging request is required downstream.
      void setContextData​(ReadOnlyStringMap contextData)
      A no-op mutator to satisfy JPA requirements, as this entity is write-only.
      void setContextMap​(java.util.Map<java.lang.String,​java.lang.String> map)
      A no-op mutator to satisfy JPA requirements, as this entity is write-only.
      void setContextStack​(ThreadContext.ContextStack contextStack)
      A no-op mutator to satisfy JPA requirements, as this entity is write-only.
      void setEndOfBatch​(boolean endOfBatch)
      Sets whether this event is the last one in a batch.
      void setIncludeLocation​(boolean locationRequired)
      Sets whether the source of the logging request is required downstream.
      void setLevel​(Level level)
      A no-op mutator to satisfy JPA requirements, as this entity is write-only.
      void setLoggerFqcn​(java.lang.String fqcn)
      A no-op mutator to satisfy JPA requirements, as this entity is write-only.
      void setLoggerName​(java.lang.String loggerName)
      A no-op mutator to satisfy JPA requirements, as this entity is write-only.
      void setMarker​(Marker marker)
      A no-op mutator to satisfy JPA requirements, as this entity is write-only.
      void setMessage​(Message message)
      A no-op mutator to satisfy JPA requirements, as this entity is write-only.
      void setNanoTime​(long nanoTime)
      A no-op mutator to satisfy JPA requirements, as this entity is write-only.
      void setSource​(java.lang.StackTraceElement source)
      A no-op mutator to satisfy JPA requirements, as this entity is write-only.
      void setThreadId​(long threadId)
      A no-op mutator to satisfy JPA requirements, as this entity is write-only.
      void setThreadName​(java.lang.String threadName)
      A no-op mutator to satisfy JPA requirements, as this entity is write-only.
      void setThreadPriority​(int threadPriority)
      A no-op mutator to satisfy JPA requirements, as this entity is write-only.
      void setThrown​(java.lang.Throwable throwable)
      A no-op mutator to satisfy JPA requirements, as this entity is write-only.
      void setTimeMillis​(long millis)
      A no-op mutator to satisfy JPA requirements, as this entity is write-only.
      LogEvent toImmutable()
      Returns an immutable version of this log event, which MAY BE a copy of this event.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • AbstractLogEventWrapperEntity

        protected AbstractLogEventWrapperEntity()
        Instantiates this base class. All concrete implementations must have a constructor matching this constructor's signature. The no-argument constructor is required for a standards-compliant JPA provider to accept this as an entity.
      • AbstractLogEventWrapperEntity

        protected AbstractLogEventWrapperEntity​(LogEvent wrappedEvent)
        Instantiates this base class. All concrete implementations must have a constructor matching this constructor's signature. This constructor is used for wrapping this entity around a logged event.
        Parameters:
        wrappedEvent - The underlying event from which information is obtained.
    • 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
      • getWrappedEvent

        protected final LogEvent getWrappedEvent()
        All eventual accessor methods must call this method and delegate the method call to the underlying wrapped event. Annotated Transient so as not to be included in the persisted entity.
        Returns:
        The underlying event from which information is obtained.
      • setLevel

        public void setLevel​(Level level)
        A no-op mutator to satisfy JPA requirements, as this entity is write-only.
        Parameters:
        level - Ignored.
      • setLoggerName

        public void setLoggerName​(java.lang.String loggerName)
        A no-op mutator to satisfy JPA requirements, as this entity is write-only.
        Parameters:
        loggerName - Ignored.
      • setSource

        public void setSource​(java.lang.StackTraceElement source)
        A no-op mutator to satisfy JPA requirements, as this entity is write-only.
        Parameters:
        source - Ignored.
      • setMessage

        public void setMessage​(Message message)
        A no-op mutator to satisfy JPA requirements, as this entity is write-only.
        Parameters:
        message - Ignored.
      • setMarker

        public void setMarker​(Marker marker)
        A no-op mutator to satisfy JPA requirements, as this entity is write-only.
        Parameters:
        marker - Ignored.
      • setThreadId

        public void setThreadId​(long threadId)
        A no-op mutator to satisfy JPA requirements, as this entity is write-only.
        Parameters:
        threadId - Ignored.
      • setThreadName

        public void setThreadName​(java.lang.String threadName)
        A no-op mutator to satisfy JPA requirements, as this entity is write-only.
        Parameters:
        threadName - Ignored.
      • setThreadPriority

        public void setThreadPriority​(int threadPriority)
        A no-op mutator to satisfy JPA requirements, as this entity is write-only.
        Parameters:
        threadPriority - Ignored.
      • setNanoTime

        public void setNanoTime​(long nanoTime)
        A no-op mutator to satisfy JPA requirements, as this entity is write-only.
        Parameters:
        nanoTime - Ignored.
      • setTimeMillis

        public void setTimeMillis​(long millis)
        A no-op mutator to satisfy JPA requirements, as this entity is write-only.
        Parameters:
        millis - Ignored.
      • setThrown

        public void setThrown​(java.lang.Throwable throwable)
        A no-op mutator to satisfy JPA requirements, as this entity is write-only.
        Parameters:
        throwable - Ignored.
      • setContextData

        public void setContextData​(ReadOnlyStringMap contextData)
        A no-op mutator to satisfy JPA requirements, as this entity is write-only.
        Parameters:
        contextData - Ignored.
      • setContextMap

        public void setContextMap​(java.util.Map<java.lang.String,​java.lang.String> map)
        A no-op mutator to satisfy JPA requirements, as this entity is write-only.
        Parameters:
        map - Ignored.
      • setContextStack

        public void setContextStack​(ThreadContext.ContextStack contextStack)
        A no-op mutator to satisfy JPA requirements, as this entity is write-only.
        Parameters:
        contextStack - Ignored.
      • setLoggerFqcn

        public void setLoggerFqcn​(java.lang.String fqcn)
        A no-op mutator to satisfy JPA requirements, as this entity is write-only.
        Parameters:
        fqcn - Ignored.
      • isIncludeLocation

        public final boolean isIncludeLocation()
        Indicates whether the source of the logging request is required downstream. Annotated @Transient so as to not be included in the persisted entity.
        Specified by:
        isIncludeLocation in interface LogEvent
        Returns:
        whether the source of the logging request is required downstream.
        See Also:
        LogEvent.getSource()
      • setIncludeLocation

        public final void setIncludeLocation​(boolean locationRequired)
        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:
        locationRequired - true if the source of the logging request is required downstream, false otherwise.
        See Also:
        LogEvent.getSource()
      • isEndOfBatch

        public final boolean isEndOfBatch()
        Indicates whether this event is the last one in a batch. Annotated @Transient so as to not be included in the persisted entity.
        Specified by:
        isEndOfBatch in interface LogEvent
        Returns:
        whether this event is the last one in a batch.
      • setEndOfBatch

        public final 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.