Home / Class/ LoggerConfiguration Class — spring-boot Architecture

LoggerConfiguration Class — spring-boot Architecture

Architecture documentation for the LoggerConfiguration class in LoggerConfiguration.java from the spring-boot codebase.

Entity Profile

Relationship Graph

Source Code

core/spring-boot/src/main/java/org/springframework/boot/logging/LoggerConfiguration.java lines 33–253

public final class LoggerConfiguration {

	private final String name;

	private final @Nullable LevelConfiguration levelConfiguration;

	private final LevelConfiguration inheritedLevelConfiguration;

	/**
	 * Create a new {@link LoggerConfiguration instance}.
	 * @param name the name of the logger
	 * @param configuredLevel the configured level of the logger
	 * @param effectiveLevel the effective level of the logger
	 */
	public LoggerConfiguration(String name, @Nullable LogLevel configuredLevel, LogLevel effectiveLevel) {
		Assert.notNull(name, "'name' must not be null");
		Assert.notNull(effectiveLevel, "'effectiveLevel' must not be null");
		this.name = name;
		this.levelConfiguration = (configuredLevel != null) ? LevelConfiguration.of(configuredLevel) : null;
		this.inheritedLevelConfiguration = LevelConfiguration.of(effectiveLevel);
	}

	/**
	 * Create a new {@link LoggerConfiguration instance}.
	 * @param name the name of the logger
	 * @param levelConfiguration the level configuration
	 * @param inheritedLevelConfiguration the inherited level configuration
	 * @since 2.7.13
	 */
	public LoggerConfiguration(String name, @Nullable LevelConfiguration levelConfiguration,
			LevelConfiguration inheritedLevelConfiguration) {
		Assert.notNull(name, "'name' must not be null");
		Assert.notNull(inheritedLevelConfiguration, "'inheritedLevelConfiguration' must not be null");
		this.name = name;
		this.levelConfiguration = levelConfiguration;
		this.inheritedLevelConfiguration = inheritedLevelConfiguration;
	}

	/**
	 * Returns the name of the logger.
	 * @return the name of the logger
	 */
	public String getName() {
		return this.name;
	}

	/**
	 * Returns the configured level of the logger.
	 * @return the configured level of the logger
	 * @see #getLevelConfiguration(ConfigurationScope)
	 */
	public @Nullable LogLevel getConfiguredLevel() {
		LevelConfiguration configuration = getLevelConfiguration(ConfigurationScope.DIRECT);
		return (configuration != null) ? configuration.getLevel() : null;
	}

	/**
	 * Returns the effective level of the logger.
	 * @return the effective level of the logger
	 * @see #getLevelConfiguration(ConfigurationScope)
	 */
	public LogLevel getEffectiveLevel() {
		return getLevelConfiguration().getLevel();
	}

	/**
	 * Return the level configuration, considering inherited loggers.
	 * @return the level configuration
	 * @since 2.7.13
	 */
	public LevelConfiguration getLevelConfiguration() {
		LevelConfiguration result = getLevelConfiguration(ConfigurationScope.INHERITED);
		Assert.state(result != null, "Inherited level configuration must not be null");
		return result;
	}

	/**
	 * Return the level configuration for the given scope.
	 * @param scope the configuration scope
	 * @return the level configuration or {@code null} for
	 * {@link ConfigurationScope#DIRECT direct scope} results without applied
	 * configuration
	 * @since 2.7.13
	 */
	public @Nullable LevelConfiguration getLevelConfiguration(ConfigurationScope scope) {
		return (scope != ConfigurationScope.DIRECT) ? this.inheritedLevelConfiguration : this.levelConfiguration;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}
		if (obj == null || getClass() != obj.getClass()) {
			return false;
		}
		LoggerConfiguration other = (LoggerConfiguration) obj;
		return ObjectUtils.nullSafeEquals(this.name, other.name)
				&& ObjectUtils.nullSafeEquals(this.levelConfiguration, other.levelConfiguration)
				&& ObjectUtils.nullSafeEquals(this.inheritedLevelConfiguration, other.inheritedLevelConfiguration);
	}

	@Override
	public int hashCode() {
		return Objects.hash(this.name, this.levelConfiguration, this.inheritedLevelConfiguration);
	}

	@Override
	public String toString() {
		return "LoggerConfiguration [name=" + this.name + ", levelConfiguration=" + this.levelConfiguration
				+ ", inheritedLevelConfiguration=" + this.inheritedLevelConfiguration + "]";
	}

	/**
	 * Supported logger configuration scopes.
	 *
	 * @since 2.7.13
	 */
	public enum ConfigurationScope {

		/**
		 * Only return configuration that has been applied directly. Often referred to as
		 * 'configured' or 'assigned' configuration.
		 */
		DIRECT,

		/**
		 * May return configuration that has been applied to a parent logger. Often
		 * referred to as 'effective' configuration.
		 */
		INHERITED

	}

	/**
	 * Logger level configuration.
	 *
	 * @since 2.7.13
	 */
	public static final class LevelConfiguration {

		private final String name;

		private final @Nullable LogLevel logLevel;

		private LevelConfiguration(String name, @Nullable LogLevel logLevel) {
			this.name = name;
			this.logLevel = logLevel;
		}

		/**
		 * Return the name of the level.
		 * @return the level name
		 */
		public String getName() {
			return this.name;
		}

		/**
		 * Return the actual level value if possible.
		 * @return the level value
		 * @throws IllegalStateException if this is a {@link #isCustom() custom} level
		 */
		public LogLevel getLevel() {
			Assert.state(this.logLevel != null, () -> "Unable to provide LogLevel for '" + this.name + "'");
			return this.logLevel;
		}

		/**
		 * Return if this is a custom level and cannot be represented by {@link LogLevel}.
		 * @return if this is a custom level
		 */
		public boolean isCustom() {
			return this.logLevel == null;
		}

		@Override
		public boolean equals(Object obj) {
			if (this == obj) {
				return true;
			}
			if (obj == null || getClass() != obj.getClass()) {
				return false;
			}
			LevelConfiguration other = (LevelConfiguration) obj;
			return this.logLevel == other.logLevel && ObjectUtils.nullSafeEquals(this.name, other.name);
		}

		@Override
		public int hashCode() {
			return Objects.hash(this.logLevel, this.name);
		}

		@Override
		public String toString() {
			return "LevelConfiguration [name=" + this.name + ", logLevel=" + this.logLevel + "]";
		}

		/**
		 * Create a new {@link LevelConfiguration} instance of the given {@link LogLevel}.
		 * @param logLevel the log level
		 * @return a new {@link LevelConfiguration} instance
		 */
		public static LevelConfiguration of(LogLevel logLevel) {
			Assert.notNull(logLevel, "'logLevel' must not be null");
			return new LevelConfiguration(logLevel.name(), logLevel);
		}

		/**
		 * Create a new {@link LevelConfiguration} instance for a custom level name.
		 * @param name the log level name
		 * @return a new {@link LevelConfiguration} instance
		 */
		public static LevelConfiguration ofCustom(String name) {
			Assert.hasText(name, "'name' must not be empty");
			return new LevelConfiguration(name, null);
		}

	}

}

Domain

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free