migrate to slf4j #18

Merged
tueem merged 4 commits from migrate/slf4j into dev 2025-03-17 19:34:27 +00:00
22 changed files with 101 additions and 38 deletions

View File

@ -3,7 +3,7 @@
[versions] [versions]
junit-jupiter = "5.10.2" junit-jupiter = "5.10.2"
log4j = "2.24.1" slf4j = "2.0.17"
javacord = "3.8.0" javacord = "3.8.0"
discord4j = "3.2.7" discord4j = "3.2.7"
geantyref = "2.0.0" geantyref = "2.0.0"
@ -11,7 +11,7 @@ mockito = "5.15.2"
[libraries] [libraries]
junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit-jupiter" } junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit-jupiter" }
log4j = { module = "org.apache.logging.log4j:log4j-api", version.ref = "log4j"} slf4j = { module = "org.slf4j:slf4j-api", version.ref = "slf4j"}
javacord = { module = "org.javacord:javacord", version.ref = "javacord"} javacord = { module = "org.javacord:javacord", version.ref = "javacord"}
discord4j = { module = "com.discord4j:discord4j-core", version.ref = "discord4j"} discord4j = { module = "com.discord4j:discord4j-core", version.ref = "discord4j"}
geantyref = { module = "io.leangen.geantyref:geantyref", version.ref = "geantyref"} geantyref = { module = "io.leangen.geantyref:geantyref", version.ref = "geantyref"}

View File

@ -20,7 +20,7 @@ dependencies {
testImplementation(libs.junit.jupiter) testImplementation(libs.junit.jupiter)
testRuntimeOnly("org.junit.platform:junit-platform-launcher") testRuntimeOnly("org.junit.platform:junit-platform-launcher")
implementation(libs.log4j) implementation(libs.slf4j)
implementation(libs.geantyref) implementation(libs.geantyref)
} }

View File

@ -1,6 +1,6 @@
package net.tomatentum.marinara; package net.tomatentum.marinara;
import org.apache.logging.log4j.Logger; import org.slf4j.Logger;
import net.tomatentum.marinara.registry.InteractionCheckRegistry; import net.tomatentum.marinara.registry.InteractionCheckRegistry;
import net.tomatentum.marinara.registry.InteractionRegistry; import net.tomatentum.marinara.registry.InteractionRegistry;

View File

@ -5,7 +5,7 @@ import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.Arrays; import java.util.Arrays;
import org.apache.logging.log4j.Logger; import org.slf4j.Logger;
import net.tomatentum.marinara.util.LoggerUtil; import net.tomatentum.marinara.util.LoggerUtil;
import net.tomatentum.marinara.util.ReflectionUtil; import net.tomatentum.marinara.util.ReflectionUtil;
@ -27,7 +27,7 @@ public record AppliedCheck(InteractionCheck<?> check, Annotation annotation) {
logger.debug("Pre Check {} {} with context {}", check.getClass().getName(), result ? "succeeded" : "failed", context.toString()); logger.debug("Pre Check {} {} with context {}", check.getClass().getName(), result ? "succeeded" : "failed", context.toString());
return result; return result;
} catch (IllegalAccessException | InvocationTargetException | SecurityException e) { } catch (IllegalAccessException | InvocationTargetException | SecurityException e) {
logger.fatal(e); logger.error("Failed executing pre-check", e);
return false; return false;
} }
} }
@ -43,7 +43,7 @@ public record AppliedCheck(InteractionCheck<?> check, Annotation annotation) {
logger.debug("Executing post check {} with context {}", check.getClass().getName(), context.toString()); logger.debug("Executing post check {} with context {}", check.getClass().getName(), context.toString());
method.invoke(check, context, annotation); method.invoke(check, context, annotation);
} catch (IllegalAccessException | InvocationTargetException | SecurityException e) { } catch (IllegalAccessException | InvocationTargetException | SecurityException e) {
logger.fatal(e); logger.error("Failed executing post-check", e);
} }
} }

View File

@ -4,7 +4,7 @@ import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import org.apache.logging.log4j.Logger; import org.slf4j.Logger;
import net.tomatentum.marinara.interaction.commands.annotation.SlashCommandOption; import net.tomatentum.marinara.interaction.commands.annotation.SlashCommandOption;
import net.tomatentum.marinara.interaction.commands.annotation.SlashCommandOption.PlaceHolderEnum; import net.tomatentum.marinara.interaction.commands.annotation.SlashCommandOption.PlaceHolderEnum;

View File

@ -7,7 +7,7 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import org.apache.logging.log4j.Logger; import org.slf4j.Logger;
import net.tomatentum.marinara.Marinara; import net.tomatentum.marinara.Marinara;
import net.tomatentum.marinara.checks.AppliedCheck; import net.tomatentum.marinara.checks.AppliedCheck;
@ -69,7 +69,7 @@ public abstract class InteractionMethod {
try { try {
method.invoke(handler, getParameters(context)); method.invoke(handler, getParameters(context));
}catch (IllegalAccessException | InvocationTargetException ex) { }catch (IllegalAccessException | InvocationTargetException ex) {
logger.fatal(ex); logger.error("InteractionMethod failed to run", ex);
} }
this.appliedChecks.forEach(x -> x.post(context)); this.appliedChecks.forEach(x -> x.post(context));

View File

@ -3,7 +3,7 @@ package net.tomatentum.marinara.parser;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.function.Consumer; import java.util.function.Consumer;
import org.apache.logging.log4j.Logger; import org.slf4j.Logger;
import net.tomatentum.marinara.interaction.annotation.Button; import net.tomatentum.marinara.interaction.annotation.Button;
import net.tomatentum.marinara.util.LoggerUtil; import net.tomatentum.marinara.util.LoggerUtil;

View File

@ -6,7 +6,7 @@ import java.util.Arrays;
import java.util.Optional; import java.util.Optional;
import java.util.function.Consumer; import java.util.function.Consumer;
import org.apache.logging.log4j.Logger; import org.slf4j.Logger;
import net.tomatentum.marinara.checks.AppliedCheck; import net.tomatentum.marinara.checks.AppliedCheck;
import net.tomatentum.marinara.checks.InteractionCheck; import net.tomatentum.marinara.checks.InteractionCheck;

View File

@ -3,7 +3,7 @@ package net.tomatentum.marinara.parser;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.function.Consumer; import java.util.function.Consumer;
import org.apache.logging.log4j.Logger; import org.slf4j.Logger;
import net.tomatentum.marinara.interaction.InteractionType; import net.tomatentum.marinara.interaction.InteractionType;
import net.tomatentum.marinara.interaction.commands.annotation.SlashCommand; import net.tomatentum.marinara.interaction.commands.annotation.SlashCommand;
@ -59,7 +59,7 @@ public class SlashCommandParser implements AnnotationParser {
.build(isAutoComplete); .build(isAutoComplete);
} }
logger.trace("Parsed using SlashCommandParser for method {} with the result:\n{}", ReflectionUtil.getFullMethodName(method), lastIdentifier.toString()); logger.trace("Parsed using SlashCommandParser for method {} with the result: {}", ReflectionUtil.getFullMethodName(method), lastIdentifier.toString());
consumer.accept((SlashCommandIdentifier) lastIdentifier); consumer.accept((SlashCommandIdentifier) lastIdentifier);
} }

View File

@ -6,7 +6,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import org.apache.logging.log4j.Logger; import org.slf4j.Logger;
import io.leangen.geantyref.GenericTypeReflector; import io.leangen.geantyref.GenericTypeReflector;
import net.tomatentum.marinara.checks.InteractionCheck; import net.tomatentum.marinara.checks.InteractionCheck;

View File

@ -3,7 +3,7 @@ package net.tomatentum.marinara.registry;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import org.apache.logging.log4j.Logger; import org.slf4j.Logger;
import net.tomatentum.marinara.interaction.InteractionType; import net.tomatentum.marinara.interaction.InteractionType;
import net.tomatentum.marinara.interaction.ident.InteractionIdentifier; import net.tomatentum.marinara.interaction.ident.InteractionIdentifier;

View File

@ -7,7 +7,7 @@ import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.Set; import java.util.Set;
import org.apache.logging.log4j.Logger; import org.slf4j.Logger;
import net.tomatentum.marinara.Marinara; import net.tomatentum.marinara.Marinara;
import net.tomatentum.marinara.interaction.InteractionHandler; import net.tomatentum.marinara.interaction.InteractionHandler;
@ -66,7 +66,6 @@ public class InteractionRegistry {
.toArray(SlashCommandDefinition[]::new); .toArray(SlashCommandDefinition[]::new);
marinara.getWrapper().getRegisterer().register(defs); marinara.getWrapper().getRegisterer().register(defs);
logger.info("Registered all SlashCommands");
} }
public void handle(Object context) { public void handle(Object context) {

View File

@ -1,21 +1,14 @@
package net.tomatentum.marinara.util; package net.tomatentum.marinara.util;
import java.util.Properties; import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.logging.log4j.Level; import org.slf4j.helpers.NOPLoggerFactory;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.simple.SimpleLogger;
import org.apache.logging.log4j.util.PropertiesUtil;
import org.apache.logging.log4j.util.ProviderUtil;
public class LoggerUtil { public class LoggerUtil {
public static Logger getLogger(String name) { public static Logger getLogger(String name) {
if (ProviderUtil.hasProviders()) { if (LoggerFactory.getILoggerFactory() instanceof NOPLoggerFactory)
return LogManager.getLogger(name); return new SimpleLogger(name);
}else return LoggerFactory.getLogger(name);
return new SimpleLogger(name, Level.DEBUG, true, false, true, true, "yyyy-MM-dd HH:mm:ss.SSSZ", null,
new PropertiesUtil(new Properties()), System.out);
} }
public static Logger getLogger(Class<?> clazz) { public static Logger getLogger(Class<?> clazz) {

View File

@ -102,6 +102,6 @@ public final class ReflectionUtil {
} }
public static String getFullMethodName(Method method) { public static String getFullMethodName(Method method) {
return method.getClass().getName() + "." + method.getName(); return method.getDeclaringClass().getName() + "." + method.getName();
} }
} }

View File

@ -0,0 +1,55 @@
package net.tomatentum.marinara.util;
import org.slf4j.Marker;
import org.slf4j.event.Level;
import org.slf4j.helpers.LegacyAbstractLogger;
import org.slf4j.helpers.MessageFormatter;
public class SimpleLogger extends LegacyAbstractLogger {
private String name;
public SimpleLogger(String name) {
this.name = name;
}
@Override
public boolean isTraceEnabled() {
return true;
}
@Override
public boolean isDebugEnabled() {
return true;
}
@Override
public boolean isInfoEnabled() {
return true;
}
@Override
public boolean isWarnEnabled() {
return true;
}
@Override
public boolean isErrorEnabled() {
return true;
}
@Override
protected String getFullyQualifiedCallerName() {
return this.name;
}
@Override
protected void handleNormalizedLoggingCall(Level level, Marker marker, String messagePattern, Object[] arguments,
Throwable throwable) {
String formatted = MessageFormatter.basicArrayFormat(messagePattern, arguments);
System.out.println("[%s] %s => %s".formatted(level, this.name, formatted));
}
}

View File

@ -4,12 +4,15 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import org.slf4j.Logger;
import net.tomatentum.marinara.interaction.commands.SlashCommandDefinition; import net.tomatentum.marinara.interaction.commands.SlashCommandDefinition;
import net.tomatentum.marinara.interaction.commands.annotation.SlashCommandOption; import net.tomatentum.marinara.interaction.commands.annotation.SlashCommandOption;
import net.tomatentum.marinara.interaction.commands.annotation.SlashCommandOptionChoice; import net.tomatentum.marinara.interaction.commands.annotation.SlashCommandOptionChoice;
import net.tomatentum.marinara.interaction.ident.InteractionIdentifier; import net.tomatentum.marinara.interaction.ident.InteractionIdentifier;
import net.tomatentum.marinara.interaction.ident.RootCommandIdentifier; import net.tomatentum.marinara.interaction.ident.RootCommandIdentifier;
import net.tomatentum.marinara.interaction.ident.SlashCommandIdentifier; import net.tomatentum.marinara.interaction.ident.SlashCommandIdentifier;
import net.tomatentum.marinara.util.LoggerUtil;
public class CommandConverter<A extends Object, O extends Object, C extends Object> { public class CommandConverter<A extends Object, O extends Object, C extends Object> {
@ -17,6 +20,8 @@ public class CommandConverter<A extends Object, O extends Object, C extends Obje
return new CommandConverter<>(spec); return new CommandConverter<>(spec);
} }
private Logger logger = LoggerUtil.getLogger(getClass());
private Spec<A, O, C> spec; private Spec<A, O, C> spec;
CommandConverter(Spec<A, O, C> spec) { CommandConverter(Spec<A, O, C> spec) {
@ -24,6 +29,7 @@ public class CommandConverter<A extends Object, O extends Object, C extends Obje
} }
public A convert(SlashCommandDefinition def) { public A convert(SlashCommandDefinition def) {
logger.debug("Converting command {}", def);
List<O> options = new ArrayList<>(); List<O> options = new ArrayList<>();
if (!def.isRootCommand()) { if (!def.isRootCommand()) {
Arrays.stream(def.getSubCommands()).map(this::convertSubCommand).forEach(options::add); Arrays.stream(def.getSubCommands()).map(this::convertSubCommand).forEach(options::add);
@ -35,17 +41,20 @@ public class CommandConverter<A extends Object, O extends Object, C extends Obje
} }
private O convertSubCommandGroup(SlashCommandDefinition def, InteractionIdentifier identifier) { private O convertSubCommandGroup(SlashCommandDefinition def, InteractionIdentifier identifier) {
logger.debug("Converting subCommandGroup {} of {}", identifier, def);
SlashCommandIdentifier[] subCommands = def.getSubCommands(identifier.name()); SlashCommandIdentifier[] subCommands = def.getSubCommands(identifier.name());
List<O> convertedSubCommands = Arrays.stream(subCommands).map(this::convertSubCommand).toList(); List<O> convertedSubCommands = Arrays.stream(subCommands).map(this::convertSubCommand).toList();
return spec.convertSubCommandGroup(identifier, convertedSubCommands); return spec.convertSubCommandGroup(identifier, convertedSubCommands);
} }
private O convertSubCommand(SlashCommandIdentifier identifier) { private O convertSubCommand(SlashCommandIdentifier identifier) {
logger.debug("Converting subCommand {}", identifier);
List<O> options = Arrays.stream(identifier.options()).map(this::convertOption).toList(); List<O> options = Arrays.stream(identifier.options()).map(this::convertOption).toList();
return spec.convertSubCommand(identifier, options); return spec.convertSubCommand(identifier, options);
} }
private O convertOption(SlashCommandOption option) { private O convertOption(SlashCommandOption option) {
logger.debug("Converting option {}", option);
List<C> choices = Arrays.stream(SlashCommandDefinition.getActualChoices(option)).map(spec::convertChoice).toList(); List<C> choices = Arrays.stream(SlashCommandDefinition.getActualChoices(option)).map(spec::convertChoice).toList();
return spec.convertOption(option, choices); return spec.convertOption(option, choices);
} }

View File

@ -4,7 +4,10 @@ import java.util.Arrays;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.slf4j.Logger;
import net.tomatentum.marinara.interaction.commands.SlashCommandDefinition; import net.tomatentum.marinara.interaction.commands.SlashCommandDefinition;
import net.tomatentum.marinara.util.LoggerUtil;
import net.tomatentum.marinara.util.ObjectAggregator; import net.tomatentum.marinara.util.ObjectAggregator;
public class CommandRegisterer<A extends Object> { public class CommandRegisterer<A extends Object> {
@ -13,6 +16,8 @@ public class CommandRegisterer<A extends Object> {
return new CommandRegisterer<A>(strategy, converter); return new CommandRegisterer<A>(strategy, converter);
} }
private Logger logger = LoggerUtil.getLogger(getClass());
private Strategy<A> strategy; private Strategy<A> strategy;
private CommandConverter<A, ?, ?> converter; private CommandConverter<A, ?, ?> converter;
@ -36,6 +41,7 @@ public class CommandRegisterer<A extends Object> {
serverCommands.forEach(strategy::registerServer); serverCommands.forEach(strategy::registerServer);
strategy.registerGlobal(globalCommands); strategy.registerGlobal(globalCommands);
logger.info("Registered all SlashCommands");
} }
public interface Strategy<A extends Object> { public interface Strategy<A extends Object> {

View File

@ -7,7 +7,7 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.apache.logging.log4j.Logger; import org.slf4j.Logger;
import io.leangen.geantyref.GenericTypeReflector; import io.leangen.geantyref.GenericTypeReflector;
import net.tomatentum.marinara.interaction.ident.InteractionIdentifier; import net.tomatentum.marinara.interaction.ident.InteractionIdentifier;

View File

@ -19,11 +19,12 @@ dependencies {
// Use JUnit Jupiter for testing. // Use JUnit Jupiter for testing.
testImplementation(libs.junit.jupiter) testImplementation(libs.junit.jupiter)
testImplementation(libs.mockito) testImplementation(libs.mockito)
testImplementation(libs.discord4j)
testRuntimeOnly("org.junit.platform:junit-platform-launcher") testRuntimeOnly("org.junit.platform:junit-platform-launcher")
implementation(libs.log4j) implementation(libs.slf4j)
implementation(libs.discord4j) { implementation(libs.discord4j) {
// exclude(module="discord4j-voice") exclude(module="discord4j-voice")
} }
implementation(libs.geantyref) implementation(libs.geantyref)
implementation(project(":lib")) implementation(project(":lib"))

View File

@ -3,7 +3,7 @@ package net.tomatentum.marinara.wrapper.discord4j;
import java.util.List; import java.util.List;
import java.util.function.Function; import java.util.function.Function;
import org.apache.logging.log4j.Logger; import org.slf4j.Logger;
import discord4j.core.GatewayDiscordClient; import discord4j.core.GatewayDiscordClient;
import discord4j.core.event.domain.interaction.InteractionCreateEvent; import discord4j.core.event.domain.interaction.InteractionCreateEvent;

View File

@ -21,7 +21,7 @@ dependencies {
testImplementation(libs.mockito) testImplementation(libs.mockito)
testRuntimeOnly("org.junit.platform:junit-platform-launcher") testRuntimeOnly("org.junit.platform:junit-platform-launcher")
implementation(libs.log4j) implementation(libs.slf4j)
implementation(libs.javacord) implementation(libs.javacord)
implementation(libs.geantyref) implementation(libs.geantyref)
implementation(project(":lib")) implementation(project(":lib"))

View File

@ -1,8 +1,8 @@
package net.tomatentum.marinara.wrapper.javacord; package net.tomatentum.marinara.wrapper.javacord;
import org.apache.logging.log4j.Logger;
import org.javacord.api.DiscordApi; import org.javacord.api.DiscordApi;
import org.javacord.api.interaction.SlashCommandBuilder; import org.javacord.api.interaction.SlashCommandBuilder;
import org.slf4j.Logger;
import net.tomatentum.marinara.wrapper.CommandConverter; import net.tomatentum.marinara.wrapper.CommandConverter;
import net.tomatentum.marinara.wrapper.CommandRegisterer; import net.tomatentum.marinara.wrapper.CommandRegisterer;