/** * LOG4J2-471: prevent deadlock when RingBuffer is full and object being logged calls Logger.log() from its * toString() method * * @param fqcn fully qualified caller name * @param level log level * @param marker optional marker * @param message log message * @param thrown optional exception */ void logMessageInCurrentThread(final String fqcn, final Level level, final Marker marker, final Message message, final Throwable thrown) { // bypass RingBuffer and invoke Appender directly final ReliabilityStrategy strategy = privateConfig.loggerConfig.getReliabilityStrategy(); strategy.log(this, getName(), fqcn, marker, level, message, thrown); }
@Override public void log(final Supplier<LoggerConfig> reconfigured, final String loggerName, final String fqcn, final Marker marker, final Level level, final Message data, final Throwable t) { final LoggerConfig config = getActiveLoggerConfig(reconfigured); try { config.log(loggerName, fqcn, marker, level, data, t); } finally { config.getReliabilityStrategy().afterLogEvent(); } }
@Override public LoggerConfig getActiveLoggerConfig(final Supplier<LoggerConfig> next) { LoggerConfig result = this.loggerConfig; if (!beforeLogEvent()) { result = next.get(); return result.getReliabilityStrategy().getActiveLoggerConfig(next); } return result; }
@Override public LoggerConfig getActiveLoggerConfig(final Supplier<LoggerConfig> next) { LoggerConfig result = this.loggerConfig; if (!beforeLogEvent()) { result = next.get(); return result.getReliabilityStrategy().getActiveLoggerConfig(next); } return result; }
@Override public void log(final Supplier<LoggerConfig> reconfigured, final String loggerName, final String fqcn, final Marker marker, final Level level, final Message data, final Throwable t) { final LoggerConfig config = getActiveLoggerConfig(reconfigured); try { config.log(loggerName, fqcn, marker, level, data, t); } finally { config.getReliabilityStrategy().afterLogEvent(); } }
@Override public void log(final Supplier<LoggerConfig> reconfigured, final LogEvent event) { final LoggerConfig config = getActiveLoggerConfig(reconfigured); try { config.log(event); } finally { config.getReliabilityStrategy().afterLogEvent(); } }
@Override public void logMessage(final String fqcn, final Level level, final Marker marker, final Message message, final Throwable t) { final Message msg = message == null ? new SimpleMessage(Strings.EMPTY) : message; final ReliabilityStrategy strategy = privateConfig.loggerConfig.getReliabilityStrategy(); strategy.log(this, getName(), fqcn, marker, level, msg, t); }
@Override public void log(final Supplier<LoggerConfig> reconfigured, final LogEvent event) { final LoggerConfig config = getActiveLoggerConfig(reconfigured); try { config.log(event); } finally { config.getReliabilityStrategy().afterLogEvent(); } }
loggerConfig.getReliabilityStrategy().beforeStopConfiguration(this); root.getReliabilityStrategy().beforeStopConfiguration(this); loggerConfig.getReliabilityStrategy().beforeStopAppenders(); root.getReliabilityStrategy().beforeStopAppenders();
final ReliabilityStrategy strategy = privateConfig.loggerConfig.getReliabilityStrategy(); strategy.log(this, event);