ReplaceableLogger.java

package io.jstach.rainbowgum.slf4j;

import org.slf4j.Logger;
import org.slf4j.event.Level;

import io.jstach.rainbowgum.slf4j.LogEventHandler.EventHandlerChangeable;
import io.jstach.rainbowgum.slf4j.spi.LoggerDecoratorService.DepthAwareLogger;

class ReplaceableLogger
		implements ForwardingLogger, LevelChangeable, EventHandlerChangeable, DepthAwareLogger, HandlerSource {

	private volatile LevelLogger logger;

	private ReplaceableLogger(LevelLogger logger) {
		super();
		this.logger = logger;
	}

	static ReplaceableLogger of(Level level, LogEventHandler handler) {
		var logger = LevelLogger.of(level, handler);
		return new ReplaceableLogger(logger);
	}

	@Override
	public Logger delegate() {
		return this.logger;
	}

	@Override
	public void setLevel(Level level) {
		this.logger = LevelLogger.of(level, logger.handler());
	}

	@Override
	public void setEventHandler(LogEventHandler eventHandler) {
		this.logger = LevelLogger.of(logger.level(), eventHandler);
	}

	@Override
	public LogEventHandler currentHandler() {
		return logger.handler();
	}

	@Override
	public ReplaceableLogger withDepth(int depth) {
		return new ReplaceableLogger(logger.withDepth(depth));
	}

	@Override
	public String toString() {
		return "ReplaceableLogger [logger=" + logger + "]";
	}

}