Try to make parent directories for --log-pattern path. Fixes BUKKIT-680
Dieser Commit ist enthalten in:
Ursprung
e385ffaefc
Commit
6a37511144
@ -6,10 +6,10 @@ import java.util.logging.Level;
|
|||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
// CraftBukkit start
|
// CraftBukkit start
|
||||||
|
import java.io.File;
|
||||||
import java.util.logging.Handler;
|
import java.util.logging.Handler;
|
||||||
import org.bukkit.craftbukkit.util.ShortConsoleLogFormatter;
|
import org.bukkit.craftbukkit.util.ShortConsoleLogFormatter;
|
||||||
import org.bukkit.craftbukkit.util.TerminalConsoleHandler;
|
import org.bukkit.craftbukkit.util.TerminalConsoleHandler;
|
||||||
|
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
|
|
||||||
public class ConsoleLogManager {
|
public class ConsoleLogManager {
|
||||||
@ -41,6 +41,56 @@ public class ConsoleLogManager {
|
|||||||
try {
|
try {
|
||||||
// CraftBukkit start
|
// CraftBukkit start
|
||||||
String pattern = (String) server.options.valueOf("log-pattern");
|
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();
|
||||||
|
String parentPath = parent.getPath();
|
||||||
|
StringBuilder fixedPattern = new StringBuilder();
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
while (i < parentPath.length()) {
|
||||||
|
char ch = parentPath.charAt(i);
|
||||||
|
char ch2 = 0;
|
||||||
|
if (i + 1 < parentPath.length()) {
|
||||||
|
ch2 = Character.toLowerCase(pattern.charAt(i + 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ch == '%') {
|
||||||
|
if (ch2 == 'h') {
|
||||||
|
i += 2;
|
||||||
|
fixedPattern.append(homeDir);
|
||||||
|
continue;
|
||||||
|
} else if (ch2 == 't') {
|
||||||
|
i += 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
|
||||||
|
i += 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);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Try to create needed parent directories
|
||||||
|
parent = new File(fixedPattern.toString());
|
||||||
|
if (parent != null) {
|
||||||
|
parent.mkdirs();
|
||||||
|
}
|
||||||
|
|
||||||
int limit = ((Integer) server.options.valueOf("log-limit")).intValue();
|
int limit = ((Integer) server.options.valueOf("log-limit")).intValue();
|
||||||
int count = ((Integer) server.options.valueOf("log-count")).intValue();
|
int count = ((Integer) server.options.valueOf("log-count")).intValue();
|
||||||
boolean append = ((Boolean) server.options.valueOf("log-append")).booleanValue();
|
boolean append = ((Boolean) server.options.valueOf("log-append")).booleanValue();
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren