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

fi.evolver.basics.spring.log.LogMetadataAttribute Maven / Gradle / Ivy

package fi.evolver.basics.spring.log;

import fi.evolver.utils.ContextUtils;
import fi.evolver.utils.attribute.ContextRegistrableAttribute;
import org.slf4j.MDC;

import java.util.Optional;


/**
 * A combined attribute for setting a metadata for both Slf4j and message logs.
 *
 * Note: make sure to clean the value afterwards to avoid MDC leaks.
 *
 * @see fi.evolver.utils.attribute.Slf4jMdcAttribute
 * @see MessageLogMetadataAttribute
 */
public class LogMetadataAttribute implements ContextRegistrableAttribute {
	private final String name;
	/**
	 * Create a new log metadata attribute.
	 *
	 * @param name The name of the attribute.
	 */
	public LogMetadataAttribute(String name) {
		this.name = name;
	}


	@Override
	public String name() {
		return name;
	}

	@Override
	public Optional get() {
		return Optional.ofNullable(MDC.get(name));
	}

	@Override
	public void set(String value) {
		if (value != null) {
			MDC.put(name, value);
			MessageLogMetadataAttribute.CONTEXT_LOG_METADATA.get().put(name, value);
			ContextUtils.register(this);
		}
		else {
			MDC.remove(name());
			MessageLogMetadataAttribute.CONTEXT_LOG_METADATA.get().remove(name, value);
		}
	}

	@Override
	public Class type() {
		return String.class;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy