Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

[Log Utils] Make Non-Static/Modify backend.

Abierto
#6 3 comentarios 0 reacciones 1 asignado Ver en GitHub

@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

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de MinecraftForge/Utils

Todos los issues de MinecraftForge/Utils

Issues similares

Más issues de Java

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.