Class BackTraceFileHandler

java.lang.Object
java.util.logging.Handler
org.jboss.logmanager.ExtHandler
org.jboss.logmanager.handlers.WriterHandler
org.jboss.logmanager.handlers.OutputStreamHandler
org.jboss.logmanager.handlers.FileHandler
org.jboss.logmanager.handlers.PeriodicRotatingFileHandler
de.stefanfrings.utils.BackTraceFileHandler
All Implemented Interfaces:
Closeable, Flushable, AutoCloseable, org.jboss.logmanager.handlers.FlushableCloseable, org.jboss.logmanager.Protectable

public class BackTraceFileHandler extends org.jboss.logmanager.handlers.PeriodicRotatingFileHandler
For Jboss/Wildfly: Write debug messages only when an error occurs.

This handler holds back debug messages in a buffer and writes them only to the file when an error occurs.

You should clear the buffer at the beginning or end of each HTTP request, to ensure that the buffer does not contain old stuff when processing the next HTTP request.

You have to put the utilities.jar file into the Wildfly folder modules/de/stefanfrings/utils/main together with a modules.xml file:

 <?xml version="1.0" encoding="UTF-8"?>
 <module xmlns="urn:jboss:module:1.3" name="de.stefanfrings.utils">
     <resources>
         <resource-root path="utilities.jar"/>
     </resources>
     <dependencies>
         <module name="org.jboss.logmanager"/>
     </dependencies>
 </module>
 

Example of the required settings in standalone.xml:

 <!-- Write log messages >= INFO to server.log, without exceptions -->
 <periodic-rotating-file-handler name="serverLog" autoflush="false">
    <level name="INFO"/>
    <formatter>
       <pattern-formatter pattern="%-5p %date{YYYY-MM-DD HH:mm:ss.SSS} %X{requestID} [%t] %-50c{50} %s%n"/>
    </formatter>
    <file relative-to="jboss.server.log.dir" path="server.log"/>
    <suffix value=".yyyy-MM-dd"/>
    <append value="true"/>
 </periodic-rotating-file-handler>

 <!-- Write buffered log messages to debug.log when a warning or error occurs -->
 <custom-handler name="debugLog" class="de.stefanfrings.utils.BackTraceFileHandler" module="de.stefanfrings.utils">
     <formatter>
         <pattern-formatter pattern="%-5p %date{YYYY-MM-DD HH:mm:ss.SSS} %X{requestID} [%t] %-50c{50} %s%e%n"/>
     </formatter>
     <properties>
         <property name="fileName" value="${jboss.server.log.dir}/debug.log"/>
         <property name="suffix" value=".yyyy-MM-dd"/>
         <property name="bufferSize" value="100"/>
         <property name="allowedLevel" value="OFF"/>
         <property name="triggerLevel" value="WARN"/>
     </properties>
 </custom-handler>

 <!-- Log level for specific classes or packages -->
 <logger category="de.stefanfrings">
     <level name="DEBUG"/>
 </logger>

 <!-- Default log level and output -->
 <root-logger>
     <level name="INFO"/>
     <handlers>
         <handler name="debugLog"/>
         <handler name="serverLog"/>
     </handlers>
 </root-logger>
 
Author:
Stefan Frings, http://stefanfrings.de/javautils
  • Nested Class Summary

    Nested classes/interfaces inherited from class org.jboss.logmanager.handlers.PeriodicRotatingFileHandler

    org.jboss.logmanager.handlers.PeriodicRotatingFileHandler.Period
  • Field Summary

    Fields inherited from class org.jboss.logmanager.handlers.WriterHandler

    outputLock

    Fields inherited from class org.jboss.logmanager.ExtHandler

    handlers, handlersUpdater
  • Constructor Summary

    Constructors
    Constructor
    Description
    Constructor.
  • Method Summary

    Modifier and Type
    Method
    Description
    static void
    Clear the buffer of the current thread.
    void
    Close this handler, release buffer memory.
    protected void
    doPublish(org.jboss.logmanager.ExtLogRecord record)
     
    void
    Set the log level.
    void
    Set buffer size-
    void
    Set trigger level.

    Methods inherited from class org.jboss.logmanager.handlers.PeriodicRotatingFileHandler

    getNextSuffix, getTimeZone, preWrite, setFile, setSuffix, setTimeZone

    Methods inherited from class org.jboss.logmanager.handlers.FileHandler

    getFile, setAppend, setFileName

    Methods inherited from class org.jboss.logmanager.handlers.OutputStreamHandler

    getEncoding, setEncoding, setOutputStream, setWriter

    Methods inherited from class org.jboss.logmanager.handlers.WriterHandler

    flush, safeClose

    Methods inherited from class org.jboss.logmanager.ExtHandler

    addHandler, checkAccess, checkAccess, clearHandlers, disableAccess, enableAccess, getHandlers, isAutoFlush, isEnabled, protect, publish, publish, removeHandler, setAutoFlush, setEnabled, setErrorManager, setFilter, setFormatter, setHandlers, setLevel, unprotect

    Methods inherited from class java.util.logging.Handler

    getErrorManager, getFilter, getFormatter, getLevel, isLoggable, reportError

    Methods inherited from class java.lang.Object

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

    • BackTraceFileHandler

      public BackTraceFileHandler()
      Constructor.
  • Method Details

    • close

      public void close()
      Close this handler, release buffer memory.
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Overrides:
      close in class org.jboss.logmanager.handlers.WriterHandler
    • clearBuffer

      public static void clearBuffer()
      Clear the buffer of the current thread.
    • doPublish

      protected void doPublish(org.jboss.logmanager.ExtLogRecord record)
      Overrides:
      doPublish in class org.jboss.logmanager.handlers.WriterHandler
    • setAllowedLevel

      public void setAllowedLevel(String level)
      Set the log level.
      Parameters:
      level - Log messages to output immediately: TRACE, DEBUG, INFO, WARN, ERROR or OFF
    • setTriggerLevel

      public void setTriggerLevel(String level)
      Set trigger level.
      Parameters:
      level - Log messages that trigger output of buffered messages: WARN or ERROR
    • setBufferSize

      public void setBufferSize(String size)
      Set buffer size-
      Parameters:
      size - Maximum number of buffered messages for each thread