From fbfb934c12c189f7bc160b47f8f359530367f19a Mon Sep 17 00:00:00 2001 From: "Bernhard J. Berger" <bernhard.berger@uni-bremen.de> Date: Wed, 8 Feb 2023 20:46:07 +0100 Subject: [PATCH] Fine tuning in logging. --- src/core/de.evoal.core.main/pom.xml | 12 ++++++++--- src/core/de.evoal.core.main/scripts/paths.env | 1 - .../de/evoal/core/api/board/Blackboard.java | 21 +++++++++++++++++++ .../core/api/board/CoreBlackboardEntries.java | 6 ++++++ .../de/evoal/core/api/ea/cdi/Fitness.java | 19 +++++++++++++++++ .../main/java/de/evoal/core/main/Evoal.java | 13 ++++++++++-- .../search/HeuristicSearchEvaluation.java | 2 +- .../statistics/fitness/FitnessStatistics.java | 3 --- .../src/main/java/module-info.java | 2 ++ .../src/main/resources/logback.xml | 8 ++----- 10 files changed, 71 insertions(+), 16 deletions(-) create mode 100644 src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/cdi/Fitness.java diff --git a/src/core/de.evoal.core.main/pom.xml b/src/core/de.evoal.core.main/pom.xml index de42bfc5..9cbf74e5 100644 --- a/src/core/de.evoal.core.main/pom.xml +++ b/src/core/de.evoal.core.main/pom.xml @@ -45,12 +45,18 @@ <scope>runtime</scope> </dependency> - <!-- logback for logging (@runtime) --> + <!-- logback for logging --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> - <version>1.4.0</version> - <scope>runtime</scope> + <version>1.4.5</version> + </dependency> + + <!-- Deltaspike uses JUL. Use the JUL bridge to reroute it SLF4J --> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>jul-to-slf4j</artifactId> + <version>2.0.6</version> </dependency> <!-- deltaspike --> diff --git a/src/core/de.evoal.core.main/scripts/paths.env b/src/core/de.evoal.core.main/scripts/paths.env index bd1e3b7e..b627c074 100644 --- a/src/core/de.evoal.core.main/scripts/paths.env +++ b/src/core/de.evoal.core.main/scripts/paths.env @@ -4,7 +4,6 @@ PLUGIN_PATHS=`ls -d "${EVOALPATH}/plugins"/* | tr '\n' ':'` CLASSPATH="-Dorg.jboss.logging.provider=slf4j \ --module-path ${EVOALPATH}/modules/:$PLUGIN_PATHS \ --add-modules ALL-MODULE-PATH \ - --add-opens java.base/java.lang=guice \ --add-exports io.jenetics.base/io.jenetics.internal.math=de.evoal.core.main \ --add-exports io.jenetics.base/io.jenetics.internal.collection=de.evoal.core.main \ --add-exports io.jenetics.base/io.jenetics.internal.util=de.evoal.core.main \ diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/board/Blackboard.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/board/Blackboard.java index 93064d2d..9f4b77b9 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/board/Blackboard.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/board/Blackboard.java @@ -3,8 +3,11 @@ package de.evoal.core.api.board; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.event.Event; +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; import lombok.NonNull; import lombok.extern.slf4j.Slf4j; +import org.slf4j.LoggerFactory; import javax.inject.Inject; import java.util.HashMap; @@ -91,6 +94,24 @@ public class Blackboard { * @param args The command line arguments. */ public void readArguments(final String[] args) { + for(String arg : args) { + if(!arg.startsWith("-B")) { + continue; + } + + arg = arg.substring(2); + final int colonIndex = arg.indexOf('='); + + final String entry = arg.substring(0, colonIndex); + final String value = arg.substring(colonIndex + 1); + + if(CoreBlackboardEntries.LOGGING_LEVEL.equals(entry)) { + final Logger root = (Logger) LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME); + final Level level = Level.toLevel(value); + root.setLevel(level); + } + } + for(String arg : args) { if(!arg.startsWith("-B")) { continue; diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/board/CoreBlackboardEntries.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/board/CoreBlackboardEntries.java index e665ecf7..379ec68d 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/board/CoreBlackboardEntries.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/board/CoreBlackboardEntries.java @@ -19,6 +19,12 @@ public class CoreBlackboardEntries implements BlackboardEntries { */ public static final String CONSTRAINT_FOLDER = "core:constraint-folder"; + /** + * Parameter to specify for logging leven. + */ + @Commandline(main = "", name = "core:logging", doc = "Logging level to use (ERROR,WARN,INFO,DEBUG)") + public static final String LOGGING_LEVEL = "core:logging"; + /** * Number of evaluation runs. */ diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/cdi/Fitness.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/cdi/Fitness.java new file mode 100644 index 00000000..f56446d9 --- /dev/null +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/api/ea/cdi/Fitness.java @@ -0,0 +1,19 @@ +package de.evoal.core.api.ea.cdi; + +import javax.enterprise.util.Nonbinding; +import javax.inject.Qualifier; +import java.lang.annotation.*; + +/** + * Annotation for marking fitness functions. + */ +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Qualifier +@Target({ElementType.TYPE}) +public @interface Fitness { + /** + * @return Name of the fitness calculator. + */ + public String value(); +} diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/Evoal.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/Evoal.java index 4360f37e..eee035a3 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/Evoal.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/Evoal.java @@ -14,6 +14,7 @@ import org.apache.deltaspike.cdise.api.CdiContainer; import org.apache.deltaspike.cdise.api.CdiContainerLoader; import org.apache.deltaspike.core.api.provider.BeanProvider; import org.apache.deltaspike.core.util.metadata.AnnotationInstanceProvider; +import org.slf4j.bridge.SLF4JBridgeHandler; import java.lang.reflect.Field; import java.util.*; @@ -25,14 +26,17 @@ import java.util.*; @Slf4j public final class Evoal { public static void main(final String ... args) { + installJavaLoggingToSLF4JBridge(); + log.info("Starting up EvoAl"); log.info("Booting CDI container"); final CdiContainer cdiContainer = CdiContainerLoader.getCdiContainer(); cdiContainer.boot(); - cdiContainer.getContextControl().startContext(ApplicationScoped.class); + cdiContainer.getContextControl() + .startContext(ApplicationScoped.class); - if(args.length == 0) { + if(args.length == 0 || args.length == 1 && "--help".equals(args[0])) { printUsage(); } else { log.info("Setting up black board"); @@ -62,6 +66,11 @@ public final class Evoal { cdiContainer.shutdown(); } + private static void installJavaLoggingToSLF4JBridge() { + SLF4JBridgeHandler.removeHandlersForRootLogger(); + SLF4JBridgeHandler.install(); + } + private static void printUsage() { System.out.println(); System.out.println(); diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/search/HeuristicSearchEvaluation.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/search/HeuristicSearchEvaluation.java index a676ebfa..d5cabac5 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/search/HeuristicSearchEvaluation.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/search/HeuristicSearchEvaluation.java @@ -31,7 +31,7 @@ documentation = """ Evaluates a heuristic search using multiple targets. Each target is searched for 'core:evaluation-iterations' times to allow a -proper empirical evaluation. +proper empirical evaluation. """ ) @ApplicationScoped diff --git a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/fitness/FitnessStatistics.java b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/fitness/FitnessStatistics.java index ad59cb8b..c5c323f6 100644 --- a/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/fitness/FitnessStatistics.java +++ b/src/core/de.evoal.core.main/src/main/java/de/evoal/core/main/statistics/fitness/FitnessStatistics.java @@ -1,9 +1,6 @@ package de.evoal.core.main.statistics.fitness; -import de.evoal.core.api.board.CoreBlackboardEntries; -import de.evoal.core.api.cdi.BlackboardValue; import de.evoal.core.api.ea.fitness.comparator.FitnessValue; -import de.evoal.core.api.properties.Properties; import de.evoal.core.api.properties.PropertiesSpecification; import de.evoal.core.api.statistics.*; import de.evoal.languages.model.instance.Instance; diff --git a/src/core/de.evoal.core.main/src/main/java/module-info.java b/src/core/de.evoal.core.main/src/main/java/module-info.java index aad17264..375e9181 100644 --- a/src/core/de.evoal.core.main/src/main/java/module-info.java +++ b/src/core/de.evoal.core.main/src/main/java/module-info.java @@ -13,6 +13,8 @@ module de.evoal.core.main { requires lombok; requires org.slf4j; + requires jul.to.slf4j; + requires ch.qos.logback.classic; requires io.jenetics.base; requires io.jenetics.ext; diff --git a/src/core/de.evoal.core.main/src/main/resources/logback.xml b/src/core/de.evoal.core.main/src/main/resources/logback.xml index b5396d36..ae0cb0a6 100644 --- a/src/core/de.evoal.core.main/src/main/resources/logback.xml +++ b/src/core/de.evoal.core.main/src/main/resources/logback.xml @@ -1,15 +1,11 @@ <configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> - <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> + <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern> </encoder> </appender> - <logger name="de.evoal" level="INFO" /> - <logger name="org.jboss.weld" level="DEBUG" /> - <logger name="org.jboss.weld.level" level="DEBUG" /> - - <root level="INFO"> + <root level="ERROR"> <appender-ref ref="STDOUT" /> </root> </configuration> \ No newline at end of file -- GitLab