3
0
Mirror von https://github.com/PaperMC/Paper.git synchronisiert 2024-12-25 07:40:06 +01:00
Paper/src/main/java/net/minecraft/server/ConsoleLogManager.java
2013-03-15 13:28:59 -05:00

159 Zeilen
5.2 KiB
Java

package net.minecraft.server;
import java.util.logging.ConsoleHandler;
import java.util.logging.FileHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.io.File; // CraftBukkit
public class ConsoleLogManager implements IConsoleLogManager {
private final Logger a;
private final String b;
private final String c;
private final String d;
public static Logger global = Logger.getLogger(""); // CraftBukkit
public ConsoleLogManager(String s, String s1, String s2) {
this.a = Logger.getLogger(s);
this.c = s;
this.d = s1;
this.b = s2;
this.b();
}
private void b() {
this.a.setUseParentHandlers(false);
Handler[] ahandler = this.a.getHandlers();
int i = ahandler.length;
for (int j = 0; j < i; ++j) {
Handler handler = ahandler[j];
this.a.removeHandler(handler);
}
ConsoleLogFormatter consolelogformatter = new ConsoleLogFormatter(this, (EmptyClass3) null);
// CraftBukkit start
MinecraftServer server = MinecraftServer.getServer();
ConsoleHandler consolehandler = new org.bukkit.craftbukkit.util.TerminalConsoleHandler(server.reader);
// CraftBukkit end
consolehandler.setFormatter(consolelogformatter);
this.a.addHandler(consolehandler);
// CraftBukkit start
for (java.util.logging.Handler handler : global.getHandlers()) {
global.removeHandler(handler);
}
consolehandler.setFormatter(new org.bukkit.craftbukkit.util.ShortConsoleLogFormatter(server));
global.addHandler(consolehandler);
// CraftBukkit end
try {
// CraftBukkit start
String pattern = (String) server.options.valueOf("log-pattern");
// We have to parse the pattern ourself so we can create directories as needed (java #6244047)
String tmpDir = System.getProperty("java.io.tmpdir");
String homeDir = System.getProperty("user.home");
if (tmpDir == null) {
tmpDir = homeDir;
}
// We only care about parsing for directories, FileHandler can do file names by itself
File parent = new File(pattern).getParentFile();
StringBuilder fixedPattern = new StringBuilder();
String parentPath = "";
if (parent != null) {
parentPath = parent.getPath();
}
int j = 0;
while (j < parentPath.length()) {
char ch = parentPath.charAt(j);
char ch2 = 0;
if (j + 1 < parentPath.length()) {
ch2 = Character.toLowerCase(pattern.charAt(j + 1));
}
if (ch == '%') {
if (ch2 == 'h') {
j += 2;
fixedPattern.append(homeDir);
continue;
} else if (ch2 == 't') {
j += 2;
fixedPattern.append(tmpDir);
continue;
} else if (ch2 == '%') {
// Even though we don't care about this we have to skip it to avoid matching %%t
j += 2;
fixedPattern.append("%%");
continue;
} else if (ch2 != 0) {
throw new java.io.IOException("log-pattern can only use %t and %h for directories, got %" + ch2);
}
}
fixedPattern.append(ch);
j++;
}
// Try to create needed parent directories
parent = new File(fixedPattern.toString());
if (parent != null) {
parent.mkdirs();
}
int limit = (Integer) server.options.valueOf("log-limit");
int count = (Integer) server.options.valueOf("log-count");
boolean append = (Boolean) server.options.valueOf("log-append");
FileHandler filehandler = new FileHandler(pattern, limit, count, append);
// CraftBukkit end
filehandler.setFormatter(consolelogformatter);
this.a.addHandler(filehandler);
global.addHandler(filehandler); // CraftBukkit
} catch (Exception exception) {
this.a.log(Level.WARNING, "Failed to log " + this.c + " to " + this.b, exception);
}
}
public Logger getLogger() {
return this.a;
}
public void info(String s) {
this.a.log(Level.INFO, s);
}
public void warning(String s) {
this.a.log(Level.WARNING, s);
}
public void warning(String s, Object... aobject) {
this.a.log(Level.WARNING, s, aobject);
}
public void warning(String s, Throwable throwable) {
this.a.log(Level.WARNING, s, throwable);
}
public void severe(String s) {
this.a.log(Level.SEVERE, s);
}
public void severe(String s, Throwable throwable) {
this.a.log(Level.SEVERE, s, throwable);
}
static String a(ConsoleLogManager consolelogmanager) {
return consolelogmanager.d;
}
}