diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Executable.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Executable.java index 348bb79e..f60e2f07 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Executable.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Executable.java @@ -19,8 +19,8 @@ public class Executable { String[] cmd; if (System.getProperty("os.name").toLowerCase().startsWith("windows")) { if (gitbash != null && (exec.startsWith("bash ") || exec.startsWith("sh "))) - exec = "\"" + gitbash + ((gitbash.endsWith(File.separator))?"":File.separator) + "bin" + File.separatorChar + "sh.exe\" -lc \"" + - exec.replace("\\", "/\\").replace("\"", "\\\"").replace("^", "^^").replace("%", "^%").replace("&", "^&").replace("<", "^<").replace(">", "^>").replace("|", "^|") + "\""; + exec = '"' + gitbash + ((gitbash.endsWith(File.separator))?"":File.separator) + "bin" + File.separatorChar + "sh.exe\" -lc \"" + + exec.replace("\\", "/\\").replace("\"", "\\\"").replace("^", "^^").replace("%", "^%").replace("&", "^&").replace("<", "^<").replace(">", "^>").replace("|", "^|") + '"'; cmd = new String[]{"cmd.exe", "/q", "/c", '"'+exec+'"'}; } else { cmd = new String[]{"sh", "-lc", exec}; diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalSubLogger.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalSubLogger.java index dff28645..dfffaf1f 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalSubLogger.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/External/ExternalSubLogger.java @@ -71,22 +71,8 @@ public class ExternalSubLogger extends SubLogger { } } - /** - * Get the External Logger Address - * - * @return External Address - */ - public UUID getExternalAddress() { - return id; - } - - /** - * Log a Message - * - * @param line Message - */ @SuppressWarnings("deprecation") - public void log(String line) { + private void log(String line) { if (started) { String msg = line; Level level; @@ -134,12 +120,18 @@ public class ExternalSubLogger extends SubLogger { writer.println(line); writer.flush(); } - - gc++; - gc(); } } + /** + * Get the External Logger Address + * + * @return External Address + */ + public UUID getExternalAddress() { + return id; + } + @Override public void registerFilter(SubLogFilter filter) { if (Util.isNull(filter)) throw new NullPointerException(); diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubLogger.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubLogger.java index 3b3537b8..113b8b65 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubLogger.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/Internal/InternalSubLogger.java @@ -78,57 +78,7 @@ public class InternalSubLogger extends SubLogger { BufferedReader br = new BufferedReader(new InputStreamReader(in)); String line; while ((line = br.readLine()) != null) { - if (!line.startsWith(">")) { - String msg = line; - Level level; - - // REGEX Formatting - String type = ""; - Matcher matcher = Pattern.compile("^((?:\\s*\\[?([0-9]{2}:[0-9]{2}:[0-9]{2})]?)?[\\s\\/\\\\\\|]*(?:\\[|\\[.*\\/)?(MESSAGE|INFO|WARNING|WARN|ERROR|ERR|SEVERE)\\]?:?(?:\\s*>)?\\s*)").matcher(msg.replaceAll("\u001B\\[[;\\d]*m", "")); - while (matcher.find()) { - type = matcher.group(3).toUpperCase(); - } - - msg = msg.replaceAll("^((?:\\s*\\[?([0-9]{2}:[0-9]{2}:[0-9]{2})]?)?[\\s\\/\\\\\\|]*(?:\\[|\\[.*\\/)?(MESSAGE|INFO|WARNING|WARN|ERROR|ERR|SEVERE)\\]?:?(?:\\s*>)?\\s*)", ""); - - // Determine LOG LEVEL - switch (type) { - case "WARNING": - case "WARN": - level = Level.WARNING; - break; - case "SEVERE": - case "ERROR": - case "ERR": - level = Level.SEVERE; - break; - default: - level = Level.INFO; - } - - // Filter Message - boolean allow = log.get() && (!SubAPI.getInstance().getInternals().canSudo || SubAPI.getInstance().getInternals().sudo == null || SubAPI.getInstance().getInternals().sudo == getHandler()); - List filters = new ArrayList(); - filters.addAll(this.filters); - for (SubLogFilter filter : filters) - try { - allow = (filter.log(level, msg) && allow); - } catch (Throwable e) { - new InvocationTargetException(e, "Exception while running SubLogger Event").printStackTrace(); - } - - // Log to CONSOLE - if (allow) ProxyServer.getInstance().getLogger().log(level, name + " > " + msg); - - // Log to FILE - if (writer != null) { - writer.println(line); - writer.flush(); - } - - gc++; - gc(); - } + log(line); } } catch (IOException e) {} finally { if (isErr) { @@ -141,6 +91,57 @@ public class InternalSubLogger extends SubLogger { } } + private void log(String line) { + if (!line.startsWith(">")) { + String msg = line; + Level level; + + // REGEX Formatting + String type = ""; + Matcher matcher = Pattern.compile("^((?:\\s*\\[?([0-9]{2}:[0-9]{2}:[0-9]{2})]?)?[\\s\\/\\\\\\|]*(?:\\[|\\[.*\\/)?(MESSAGE|INFO|WARNING|WARN|ERROR|ERR|SEVERE)\\]?:?(?:\\s*>)?\\s*)").matcher(msg.replaceAll("\u001B\\[[;\\d]*m", "")); + while (matcher.find()) { + type = matcher.group(3).toUpperCase(); + } + + msg = msg.replaceAll("^((?:\\s*\\[?([0-9]{2}:[0-9]{2}:[0-9]{2})]?)?[\\s\\/\\\\\\|]*(?:\\[|\\[.*\\/)?(MESSAGE|INFO|WARNING|WARN|ERROR|ERR|SEVERE)\\]?:?(?:\\s*>)?\\s*)", ""); + + // Determine LOG LEVEL + switch (type) { + case "WARNING": + case "WARN": + level = Level.WARNING; + break; + case "SEVERE": + case "ERROR": + case "ERR": + level = Level.SEVERE; + break; + default: + level = Level.INFO; + } + + // Filter Message + boolean allow = log.get() && (!SubAPI.getInstance().getInternals().canSudo || SubAPI.getInstance().getInternals().sudo == null || SubAPI.getInstance().getInternals().sudo == getHandler()); + List filters = new ArrayList(); + filters.addAll(this.filters); + for (SubLogFilter filter : filters) + try { + allow = (filter.log(level, msg) && allow); + } catch (Throwable e) { + new InvocationTargetException(e, "Exception while running SubLogger Event").printStackTrace(); + } + + // Log to CONSOLE + if (allow) ProxyServer.getInstance().getLogger().log(level, name + " > " + msg); + + // Log to FILE + if (writer != null) { + writer.println(line); + writer.flush(); + } + } + } + @Override public void stop() { if (out != null) out.interrupt(); diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubLogger.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubLogger.java index 059e684d..ca8632e5 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubLogger.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Host/SubLogger.java @@ -4,17 +4,6 @@ package net.ME1312.SubServers.Bungee.Host; * SubLogger Layout Class */ public abstract class SubLogger { - public static final int MAX_GC = Integer.getInteger("subservers.logging.max_gc", 4096); - private static boolean gc_running = false; - protected static int gc = 0; - protected static void gc() { - if (!gc_running && MAX_GC > 0 && gc >= MAX_GC) { - gc_running = true; - System.gc(); - gc = 0; - gc_running = false; - } - } /** * Gets the Name of the task logging diff --git a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketInExLogMessage.java b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketInExLogMessage.java index 9fba704a..3642218e 100644 --- a/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketInExLogMessage.java +++ b/SubServers.Bungee/src/net/ME1312/SubServers/Bungee/Network/Packet/PacketInExLogMessage.java @@ -7,6 +7,7 @@ import net.ME1312.SubServers.Bungee.Library.Version.Version; import net.ME1312.SubServers.Bungee.Network.Client; import net.ME1312.SubServers.Bungee.Network.PacketIn; +import java.lang.reflect.Method; import java.util.HashMap; import java.util.UUID; @@ -25,7 +26,10 @@ public class PacketInExLogMessage implements PacketIn { public void execute(Client client, YAMLSection data) { try { if (data.contains("h") && data.contains("m") && data.getRawString("m").length() != 0 && loggers.keySet().contains(UUID.fromString(data.getRawString("h")))) { - loggers.get(UUID.fromString(data.getRawString("h"))).log(data.getRawString("m")); + Method m = ExternalSubLogger.class.getDeclaredMethod("log", String.class); + m.setAccessible(true); + m.invoke(loggers.get(UUID.fromString(data.getRawString("h"))), data.getRawString("m")); + m.setAccessible(false); } } catch (Exception e) { e.printStackTrace(); diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/Executable.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/Executable.java index 8675a574..d9fe3a13 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/Executable.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/Executable.java @@ -19,8 +19,8 @@ public class Executable { String[] cmd; if (System.getProperty("os.name").toLowerCase().startsWith("windows")) { if (gitbash != null && (exec.startsWith("bash ") || exec.startsWith("sh "))) - exec = "\"" + gitbash + ((gitbash.endsWith(File.separator))?"":File.separator) + "bin" + File.separatorChar + "sh.exe\" -lc \"" + - exec.replace("\\", "/\\").replace("\"", "\\\"").replace("^", "^^").replace("%", "^%").replace("&", "^&").replace("<", "^<").replace(">", "^>").replace("|", "^|") + "\""; + exec = '"' + gitbash + ((gitbash.endsWith(File.separator))?"":File.separator) + "bin" + File.separatorChar + "sh.exe\" -lc \"" + + exec.replace("\\", "/\\").replace("\"", "\\\"").replace("^", "^^").replace("%", "^%").replace("&", "^&").replace("<", "^<").replace(">", "^>").replace("|", "^|") + '"'; cmd = new String[]{"cmd.exe", "/q", "/c", '"'+exec+'"'}; } else { cmd = new String[]{"sh", "-lc", exec}; diff --git a/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/SubLogger.java b/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/SubLogger.java index c68bc710..ca7e4a59 100644 --- a/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/SubLogger.java +++ b/SubServers.Host/src/net/ME1312/SubServers/Host/Executable/SubLogger.java @@ -17,7 +17,6 @@ import java.util.regex.Pattern; * Internal Process Logger Class */ public class SubLogger { - public static final int MAX_GC = Integer.getInteger("subservers.logging.max_gc", 4096); protected Process process; private Object handle; protected final Logger logger; @@ -50,17 +49,6 @@ public class SubLogger { this.file = file; } - private static boolean gc_running = false; - private static int gc = 0; - private static void gc() { - if (!gc_running && MAX_GC > 0 && gc >= MAX_GC) { - gc_running = true; - System.gc(); - gc = 0; - gc_running = false; - } - } - /** * Start Logger */ @@ -83,55 +71,12 @@ public class SubLogger { @SuppressWarnings("deprecation") private void start(InputStream in, boolean isErr) { try { - YAMLSection yaml = SubAPI.getInstance().getInternals().config.get().getSection("Settings"); + boolean network = SubAPI.getInstance().getInternals().config.get().getSection("Settings").getBoolean("Network-Log", true), + console = SubAPI.getInstance().getInternals().config.get().getSection("Settings").getBoolean("Console-Log", true); BufferedReader br = new BufferedReader(new InputStreamReader(in)); String line; while ((line = br.readLine()) != null) { - if (!line.startsWith(">")) { - String msg = line; - LogStream level; - - // REGEX Formatting - String type = ""; - Matcher matcher = Pattern.compile("^((?:\\s*\\[?([0-9]{2}:[0-9]{2}:[0-9]{2})]?)?[\\s\\/\\\\\\|]*(?:\\[|\\[.*\\/)?(MESSAGE|INFO|WARNING|WARN|ERROR|ERR|SEVERE)\\]?:?(?:\\s*>)?\\s*)").matcher(msg.replaceAll("\u001B\\[[;\\d]*m", "")); - while (matcher.find()) { - type = matcher.group(3).toUpperCase(); - } - - msg = msg.replaceAll("^((?:\\s*\\[?([0-9]{2}:[0-9]{2}:[0-9]{2})]?)?[\\s\\/\\\\\\|]*(?:\\[|\\[.*\\/)?(MESSAGE|INFO|WARNING|WARN|ERROR|ERR|SEVERE)\\]?:?(?:\\s*>)?\\s*)", ""); - - // Determine LOG LEVEL - switch (type) { - case "WARNING": - case "WARN": - level = logger.warn; - break; - case "SEVERE": - level = logger.severe; - break; - case "ERROR": - case "ERR": - level = logger.error; - break; - default: - level = logger.info; - } - - // Log to NETWORK - if (log.get() && yaml.getBoolean("Network-Log", true)) SubAPI.getInstance().getSubDataNetwork().sendPacket(new PacketOutExLogMessage(address, line)); - - // Log to CONSOLE - if (log.get() && yaml.getBoolean("Console-Log", true)) level.println(TextColor.convertColor(msg)); - - // Log to FILE - if (writer != null) { - writer.println(line); - writer.flush(); - } - - gc++; - gc(); - } + log(line, network, console); } } catch (IOException e) {} finally { if (isErr) { @@ -144,6 +89,51 @@ public class SubLogger { } } + private void log(String line, boolean network, boolean console) { + if (!line.startsWith(">")) { + String msg = line; + LogStream level; + + // REGEX Formatting + String type = ""; + Matcher matcher = Pattern.compile("^((?:\\s*\\[?([0-9]{2}:[0-9]{2}:[0-9]{2})]?)?[\\s\\/\\\\\\|]*(?:\\[|\\[.*\\/)?(MESSAGE|INFO|WARNING|WARN|ERROR|ERR|SEVERE)\\]?:?(?:\\s*>)?\\s*)").matcher(msg.replaceAll("\u001B\\[[;\\d]*m", "")); + while (matcher.find()) { + type = matcher.group(3).toUpperCase(); + } + + msg = msg.replaceAll("^((?:\\s*\\[?([0-9]{2}:[0-9]{2}:[0-9]{2})]?)?[\\s\\/\\\\\\|]*(?:\\[|\\[.*\\/)?(MESSAGE|INFO|WARNING|WARN|ERROR|ERR|SEVERE)\\]?:?(?:\\s*>)?\\s*)", ""); + + // Determine LOG LEVEL + switch (type) { + case "WARNING": + case "WARN": + level = logger.warn; + break; + case "SEVERE": + level = logger.severe; + break; + case "ERROR": + case "ERR": + level = logger.error; + break; + default: + level = logger.info; + } + + // Log to NETWORK + if (log.get() && network) SubAPI.getInstance().getSubDataNetwork().sendPacket(new PacketOutExLogMessage(address, line)); + + // Log to CONSOLE + if (log.get() && console) level.println(TextColor.convertColor(msg)); + + // Log to FILE + if (writer != null) { + writer.println(line); + writer.flush(); + } + } + } + /** * Stop Logger */