[Log Utils] Make Non-Static/Modify backend.
@Jonathing ya está trabajando en esto.
Desde el 15/5/2025.
Evaluación
Este issue todavía no se ha evaluado.
Descripción
Currently I am using a custom Logger that allows for using the Log4J backend.
Specifically its the use of the StringFormatterMessageFactory which allows for String.format style log commands:
info("[%3d/%3d] Running test", current, max)
[INFO] [ 1/100] Running Test
As well as exception as last argument support:
info("Failed to download %s", fileName, ex)
[INFO] Failed to download version.json
java.io.IOException: File Not Found
at whatever
I also made it implement Closeable so I can do things like:
try (var l = log.push()) {
log.info("This is indented");
}
log.info("This is not");
At the end of the day it just drills down to log(Level, String) and log(Level, String, Object[]) so it doesn't need to use L4J levels, but allowing things to be instance based would allow the consumer to choose. I specifically care because I like L4J's logging to a file. Tho that can be easily duplicated without L4J.
package net.minecraftforge.ir.util;
import java.io.Closeable;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.message.StringFormatterMessageFactory;
public class Log implements Closeable {
private static Class<?> getCallerClass() {
StackTraceElement ste = Thread.currentThread().getStackTrace()[3];
try {
return Class.forName(ste.getClassName());
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
private final Logger logger;
private int tabLevel = 0;
public Log() {
this(LogManager.getLogger(getCallerClass(), StringFormatterMessageFactory.INSTANCE));
}
public Log(Logger logger) {
this.logger = logger;
}
@Override
public void close() {
tabLevel--;
}
public Log push() {
tabLevel++;
return this;
}
public Log pop() {
tabLevel--;
return this;
}
private String getIndent() {
return " ".repeat(tabLevel);
}
private void log(Level level, String message) {
logger.log(level, getIndent() + message);
}
private void log(Level level, String message, Object[] args) {
logger.log(level, getIndent() + message, args);
}
public void info(String message) {
log(Level.INFO, message);
}
public void info(String message, Object... args) {
log(Level.INFO, message, args);
}
public void warn(String message) {
log(Level.WARN, message);
}
public void warn(String message, Object... args) {
log(Level.WARN, message, args);
}
public void error(String message) {
log(Level.ERROR, message);
}
public void error(String message, Object... args) {
log(Level.ERROR, message, args);
}
public void debug(String message) {
log(Level.DEBUG, message);
}
public void debug(String message, Object... args) {
log(Level.DEBUG, message, args);
}
}
- Lenguaje dominante
- Java
- Estrellas
- 0
- Forks
- 5
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de MinecraftForge/Utils
-
MinecraftForge/Utils#8 · 1 asignado ·
-
[Download Utils] Path support Abierto
MinecraftForge/Utils#3 · 1 asignado ·
-
[Hash Utils] CRC32 support Abierto
MinecraftForge/Utils#2 · 2 asignados ·
-
Logger Utils Discussion Abierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 15/100
MinecraftForge/Utils#1 · 4 comentarios ·
-
MinecraftForge/Utils#13 · 2 comentarios · 1 asignado ·
Todos los issues de MinecraftForge/Utils
Issues similares
-
certification
Dificultad 1/5 Menos de una hora Aptitud para principiantes 80/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
[BUG] ECR GetAuthorizationToken returns a proxyEndpoint for the default region, not the request's Abiertobug ecr
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
Needs: Triage Type: Feature request
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
AntennaPod/AntennaPod#8794 ·
-
agentic-workflows
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
github/copilot-sdk#2760 ·