classpublicPriority 3
HytaleLogFormatter
com.hypixel.hytale.logger.backend.HytaleLogFormatter
extends Formatter
2
Methods
2
Public Methods
3
Fields
1
Constructors
Constants
PatternANSI_CONTROL_CODES= Pattern.compile("\u001b\\[[
DateTimeFormatterDATE_FORMATTER= DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss")
Constructors
public
HytaleLogFormatter(BooleanSupplier ansi)Methods
Public Methods (2)
public
String format(LogRecord record)@Nonnull@Override
publicstatic
String stripAnsi(String message)Fields
Public Fields (1)
public
int maxModuleNamePrivate/Package Fields (2)
private
BooleanSupplier ansiprivate
int shorterCountInheritance
Parent
Current
Interface
Child
Use mouse wheel to zoom, drag to pan. Click nodes to navigate.
Source Code
package com.hypixel.hytale.logger.backend;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.function.BooleanSupplier;
import java.util.logging.Formatter;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.regex.Pattern;
import javax.annotation.Nonnull;
public class HytaleLogFormatter extends Formatter {
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
private static final Pattern ANSI_CONTROL_CODES = Pattern.compile("\u001b\\[[;\\d]*m");
private BooleanSupplier ansi;
public int maxModuleName;
private int shorterCount;
public HytaleLogFormatter(BooleanSupplier ansi) {
this.ansi = ansi;
}
@Nonnull
@Override
public String format(@Nonnull LogRecord record) {
String message = record.getMessage();
if (message == null) {
message = "null";
}
if (record.getParameters() != null && record.getParameters().length > 0) {
try {
message = String.format(message, record.getParameters());
} catch (RuntimeException var9) {
throw new IllegalArgumentException("Error logging using format string: " + record.getMessage(), var9);
}
}
if (record.getThrown() != null) {
StringWriter writer = new StringWriter();
record.getThrown().printStackTrace(new PrintWriter(writer));
message = message + "\n" + writer.toString();
}
boolean ansi = this.ansi.getAsBoolean();
if (ansi) {
message = message + "\u001b[m";
}
if (record instanceof HytaleLoggerBackend.RawLogRecord) {
return !ansi ? stripAnsi(message) + "\n" : message + "\n";
} else {
String loggerName = record.getLoggerName();
int moduleNameTextSize = loggerName.length() + 3;
if ((moduleNameTextSize <= this.maxModuleName || moduleNameTextSize >= 35) && this.shorterCount <= 500) {
if (moduleNameTextSize < this.maxModuleName) {
this.shorterCount++;
}
} else {
this.maxModuleName = moduleNameTextSize;
this.shorterCount = 0;
}
StringBuilder sb = new StringBuilder(33 + this.maxModuleName + message.length());
if (ansi) {
String color = null;
int level = record.getLevel().intValue();
if (level <= Level.ALL.intValue()) {
color = "\u001b[37m";
} else if (level <= Level.FINEST.intValue()) {
color = "\u001b[36m";
} else if (level <= Level.FINER.intValue()) {
color = "\u001b[34m";
} else if (level <= Level.FINE.intValue()) {
color = "\u001b[35m";
} else if (level <= Level.CONFIG.intValue()) {
color = "\u001b[32m";
} else if (level <= Level.INFO.intValue()) {
color = "\u001b[m";
} else if (level <= Level.WARNING.intValue()) {
color = "\u001b[33m";
} else if (level <= Level.SEVERE.intValue()) {
color = "\u001b[31m";
}
if (color != null) {
sb.append(color);
}
}
sb.append('[');
DATE_FORMATTER.formatTo(LocalDateTime.ofInstant(record.getInstant(), ZoneOffset.UTC), sb);
sb.append(' ');
String levelx;
if (Level.WARNING.equals(record.getLevel())) {
levelx = "WARN";
} else {
levelx = record.getLevel().getName();
}
int levelLength = levelx.length();
if (levelLength < 6) {
sb.append(" ".repeat(6 - levelLength));
sb.append(levelx);
} else {
sb.append(levelx, 0, 6);
}
sb.append("] ");
sb.append(" ".repeat(Math.max(0, this.maxModuleName - moduleNameTextSize)));
sb.append('[').append(loggerName).append("] ").append(ansi ? message : stripAnsi(message)).append('\n');
return sb.toString();
}
}
public static String stripAnsi(@Nonnull String message) {
return ANSI_CONTROL_CODES.matcher(message).replaceAll("");
}
}