Daniel Marcotte Daniel Marcotte - 3 months ago 25
Java Question

How to log FATAL (or any custom log level) with SLF4J and Log4j2

I have those specific requirements :


  • Need to be able to log in FATAL level

  • Need to use SLF4J

  • Need to use Log4j2



Right now, here's my implementation:

final Logger logger = LoggerFactory.getLogger(HelloWorld.class);
final Marker marker = MarkerFactory.getMarker("FATAL");
logger.error(marker, "!!! Fatal World !!!");


Here's my PatternLayout (in yaml):

PatternLayout:
Pattern: "%d{ISO8601_BASIC} %-5level %marker [%t] %logger{3.} - %msg%n"


Here's my log output :

20150506T155705,158 ERROR FATAL [main] - !!! Fatal World !!!


Do you have any idea about how to efficiently to remove the "ERROR" from the log output?

Thank you very much

Answer

Here's the closest working solution I came with some colleagues :

  1. Create a Fatal Marker class using SLF4J Markers.
  2. Using a RoutingAppender, use the Marker as the routing pattern: "$${marker:}"
  3. Configure a Fatal-specific appender that has its own PatternLayout that doesn't include the LogLevel but a hardcoded FATAL level.

Here's the Java sample :

Marker fatal = MarkerFactory.getMarker("FATAL");
// Usage example
final Logger logger = LoggerFactory.getLogger(FatalLogger.class);
logger.log(fatal, "this is a fatal message");

// Log sample : 
20150514T115144,279  FATAL [main] FatalLogger - this is a fatal message

Here's the YAML sample :

Configuration:
  status: debug

  Appenders:
    RandomAccessFile:
      - name: APPLICATION_APPENDER
        fileName: logs/application.log
        PatternLayout:
          Pattern: "%d{ISO8601_BASIC} %-5level %msg%n"
      - name: FATAL_APPENDER
        fileName: logs/application.log
        PatternLayout:
          Pattern: "%d{ISO8601_BASIC} FATAL %msg%n"

    Routing:
      name: ROUTING_APPENDER
      Routes:
        pattern: "$${marker:}"
        Route:
        - key: FATAL
          ref: FATAL_APPENDER
        - ref: APPLICATION_APPENDER #DefaultRoute

  Loggers:
    Root:
      level: trace
      AppenderRef:
        - ref: ROUTING_APPENDER