All Downloads are FREE. Search and download functionalities are using the official Maven repository.

nl.demon.shadowland.freedumbytes.java.util.logging.jersey.Slf4jLoggingFeatureLevelWrapper Maven / Gradle / Ivy

package nl.demon.shadowland.freedumbytes.java.util.logging.jersey;


import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;

import org.slf4j.LoggerFactory;

import lombok.extern.slf4j.Slf4j;


/**
 * Jersey {@code LoggingFeature} Slf4j Wrapper to handle all logging of package or class as if of supplied level and uses {@link #isLoggable} to check if {@code log4j.xml} is set to this level or higher.
 *
 * 

* Alternative Logger for Jersey {@code LoggingFeature} that doesn't require {@code SLF4JBridgeHandler}. *

*

* The jul-to-slf4j.jar artifact includes a {@code java.util.logging} (jul) handler, namely {@code SLF4JBridgeHandler}, which routes all incoming jul records to the SLF4J API. *

*

* If you are concerned about application performance, then use of {@code SLF4JBridgeHandler} is appropriate only if any one of the following two conditions is true: *

* *
    *
  1. few j.u.l. logging statements are in play;
  2. *
  3. {@code LevelChangePropagator} has been installed.
  4. *
* * @see Bridging legacy APIs * @see How to make Jersey to use SLF4J instead of JUL? * @see Eclipse EE4J Jersey logging * @see Apache CXF logging */ @Slf4j public class Slf4jLoggingFeatureLevelWrapper extends Logger { private static final int TRACE_LEVEL_THRESHOLD = Level.FINEST.intValue(); private static final int DEBUG_LEVEL_THRESHOLD = Level.FINE.intValue(); private static final int INFO_LEVEL_THRESHOLD = Level.INFO.intValue(); private static final int WARN_LEVEL_THRESHOLD = Level.WARNING.intValue(); private String name; private Level asIfLevel; public Slf4jLoggingFeatureLevelWrapper(Class clazz, String resourceBundleName, Level asIfLevel) { this(clazz.getName(), resourceBundleName, asIfLevel); } public Slf4jLoggingFeatureLevelWrapper(String name, String resourceBundleName, Level asIfLevel) { super(name, resourceBundleName); this.name = name; this.asIfLevel = asIfLevel; } @Override public boolean isLoggable(Level julLevel) { boolean isLoggable; int asIfLevelValue = asIfLevel.intValue(); if (asIfLevelValue <= TRACE_LEVEL_THRESHOLD) { isLoggable = getLogger().isTraceEnabled(); } else if (asIfLevelValue <= DEBUG_LEVEL_THRESHOLD) { isLoggable = getLogger().isDebugEnabled(); } else if (asIfLevelValue <= INFO_LEVEL_THRESHOLD) { isLoggable = getLogger().isInfoEnabled(); } else if (asIfLevelValue <= WARN_LEVEL_THRESHOLD) { isLoggable = getLogger().isWarnEnabled(); } else { isLoggable = getLogger().isErrorEnabled(); } log.debug("isLoggable {} for original level {} but overruled with asIfLevel {}", isLoggable, julLevel, asIfLevel); return isLoggable; } @Override public void log(LogRecord record) { int julLevelValue = asIfLevel.intValue(); log.debug("record loggername {}, level {} and overrule asIfLevel {}", record.getLoggerName(), record.getLevel(), asIfLevel); if (julLevelValue <= TRACE_LEVEL_THRESHOLD) { getLogger().trace(record.getMessage()); } else if (julLevelValue <= DEBUG_LEVEL_THRESHOLD) { getLogger().debug(record.getMessage()); } else if (julLevelValue <= INFO_LEVEL_THRESHOLD) { getLogger().info(record.getMessage()); } else if (julLevelValue <= WARN_LEVEL_THRESHOLD) { getLogger().warn(record.getMessage()); } else { getLogger().error(record.getMessage()); } } private org.slf4j.Logger getLogger() { return LoggerFactory.getLogger(name); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy