001// Generated by delombok at Fri Mar 03 17:40:07 UTC 2023 002package de.cuioss.test.juli; 003 004import static de.cuioss.tools.string.MoreStrings.isEmpty; 005import static java.util.Objects.requireNonNull; 006import java.util.EnumSet; 007import java.util.logging.Level; 008import java.util.logging.Logger; 009 010/** 011 * Defines the log-levels with implicit mapping to JUL log level according to: 012 * <a href= 013 * "https://www.slf4j.org/apidocs/org/slf4j/bridge/SLF4JBridgeHandler.html">SLF4JBridgeHandler</a> 014 * 015 * @author Oliver Wolff 016 */ 017public enum TestLogLevel { 018 /** 019 * Trace Level, maps to {@link Level#FINER}. 020 */ 021 TRACE(Level.FINER), /** 022 * Debug Level, maps to {@link Level#FINE}. 023 */ 024 DEBUG(Level.FINE), /** 025 * Info Level, maps to {@link Level#INFO}. 026 */ 027 INFO(Level.INFO), /** 028 * Warn Level, maps to {@link Level#WARNING}. 029 */ 030 WARN(Level.WARNING), /** 031 * Error Level, maps to {@link Level#SEVERE}. 032 */ 033 ERROR(Level.SEVERE); 034 private final Level juliLevel; 035 036 /** 037 * @param logger to be checked, must not be null 038 * @return {@code true} if the log-level is enabled on the logger, false otherwise 039 */ 040 boolean isEnabled(Logger logger) { 041 return logger.isLoggable(getJuliLevel()); 042 } 043 044 /** 045 * Convenient method for setting the root-logger-level in the context of the current 046 * {@link TestLogLevel} 047 * 048 * @return the {@link TestLogLevel} itself in order to us is in a fluent way 049 */ 050 public TestLogLevel setAsRootLevel() { 051 return addLogger(""); 052 } 053 054 /** 055 * Convenient method for setting a Log-Level in the context of the current {@link TestLogLevel} 056 * 057 * @param className if it is {@code null} it will set the root-logger for the actual 058 * Log-Level 059 * @return the {@link TestLogLevel} itself in order to us is in a fluent way 060 */ 061 public TestLogLevel addLogger(Class<?> className) { 062 if (null == className) { 063 return addLogger(""); 064 } 065 return addLogger(className.getName()); 066 } 067 068 /** 069 * Convenient method for setting a Log-Level in context of the current {@link TestLogLevel} 070 * 071 * @param loggerName if it is {@code null} or empty it will set the root-logger for the actual 072 * Log-Level 073 * @return the {@link TestLogLevel} itself in order to us is in a fluent way 074 */ 075 public TestLogLevel addLogger(String loggerName) { 076 TestLoggerFactory.addLogger(this, loggerName); 077 return this; 078 } 079 080 /** 081 * @param level to be parsed, must not be null 082 * @return the mapped level or {@link TestLogLevel#INFO} if the level can not be mapped 083 */ 084 public static TestLogLevel parse(Level level) { 085 requireNonNull(level); 086 for (TestLogLevel testLogLevel : TestLogLevel.values()) { 087 if (testLogLevel.juliLevel.equals(level)) { 088 return testLogLevel; 089 } 090 } 091 return TestLogLevel.INFO; 092 } 093 094 /** 095 * Factory method for deriving a {@link TestLogLevel} from a given String. 096 * 097 * @param levelAsAString The String representation of the desired {@link TestLogLevel} 098 * @param defaultLevel must not be null 099 * @return the desired {@link TestLogLevel} if levelAsAString is null 100 * or empty or is not a defined {@link TestLogLevel} the method will return the given 101 * defaultLevel 102 */ 103 static TestLogLevel getLevelOrDefault(final String levelAsAString, final TestLogLevel defaultLevel) { 104 requireNonNull(defaultLevel); 105 if (isEmpty(levelAsAString)) { 106 return defaultLevel; 107 } 108 try { 109 return TestLogLevel.valueOf(levelAsAString.toUpperCase()); 110 } catch (IllegalArgumentException e) { 111 var message = String.format("Unable to determine logger, expected one of %s, but was %s", EnumSet.allOf(TestLogLevel.class), levelAsAString); 112 Logger.getLogger(TestLogLevel.class.getName()).log(Level.FINE, message, e); 113 return defaultLevel; 114 } 115 } 116 117 @java.lang.SuppressWarnings("all") 118 @lombok.Generated 119 private TestLogLevel(final Level juliLevel) { 120 this.juliLevel = juliLevel; 121 } 122 123 @java.lang.SuppressWarnings("all") 124 @lombok.Generated 125 public Level getJuliLevel() { 126 return this.juliLevel; 127 } 128}