mirror of
https://github.com/dmulloy2/ProtocolLib.git
synced 2024-11-24 11:36:51 +01:00
Prevent plugins from spamming the console.
This commit is contained in:
parent
e855be64ad
commit
7117545509
@ -4,7 +4,7 @@
|
|||||||
<groupId>com.comphenix.protocol</groupId>
|
<groupId>com.comphenix.protocol</groupId>
|
||||||
<artifactId>ProtocolLib</artifactId>
|
<artifactId>ProtocolLib</artifactId>
|
||||||
<name>ProtocolLib</name>
|
<name>ProtocolLib</name>
|
||||||
<version>1.8.0</version>
|
<version>1.8.1-SNAPSHOT</version>
|
||||||
<description>Provides read/write access to the Minecraft protocol.</description>
|
<description>Provides read/write access to the Minecraft protocol.</description>
|
||||||
<url>http://dev.bukkit.org/server-mods/protocollib/</url>
|
<url>http://dev.bukkit.org/server-mods/protocollib/</url>
|
||||||
<developers>
|
<developers>
|
||||||
|
@ -6,6 +6,9 @@ import java.lang.ref.WeakReference;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
import java.util.concurrent.ConcurrentMap;
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
@ -35,6 +38,9 @@ public class DetailedErrorReporter implements ErrorReporter {
|
|||||||
// We don't want to spam the server
|
// We don't want to spam the server
|
||||||
public static final int DEFAULT_MAX_ERROR_COUNT = 20;
|
public static final int DEFAULT_MAX_ERROR_COUNT = 20;
|
||||||
|
|
||||||
|
// Prevent spam per plugin too
|
||||||
|
private ConcurrentMap<String, AtomicInteger> warningCount = new ConcurrentHashMap<String, AtomicInteger>();
|
||||||
|
|
||||||
protected String prefix;
|
protected String prefix;
|
||||||
protected String supportURL;
|
protected String supportURL;
|
||||||
|
|
||||||
@ -97,23 +103,65 @@ public class DetailedErrorReporter implements ErrorReporter {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void reportMinimal(Plugin sender, String methodName, Throwable error, Object... parameters) {
|
public void reportMinimal(Plugin sender, String methodName, Throwable error, Object... parameters) {
|
||||||
reportMinimal(sender, methodName, error);
|
if (reportMinimalNoSpam(sender, methodName, error)) {
|
||||||
|
// Print parameters, if they are given
|
||||||
// Print parameters, if they are given
|
if (parameters != null && parameters.length > 0) {
|
||||||
if (parameters != null && parameters.length > 0) {
|
logger.log(Level.SEVERE, " Parameters:");
|
||||||
logger.log(Level.SEVERE, " Parameters:");
|
|
||||||
|
// Print each parameter
|
||||||
// Print each parameter
|
for (Object parameter : parameters) {
|
||||||
for (Object parameter : parameters) {
|
logger.log(Level.SEVERE, " " + getStringDescription(parameter));
|
||||||
logger.log(Level.SEVERE, " " + getStringDescription(parameter));
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void reportMinimal(Plugin sender, String methodName, Throwable error) {
|
public void reportMinimal(Plugin sender, String methodName, Throwable error) {
|
||||||
logger.log(Level.SEVERE, "[" + PLUGIN_NAME + "] Unhandled exception occured in " + methodName + " for " +
|
reportMinimalNoSpam(sender, methodName, error);
|
||||||
PacketAdapter.getPluginName(sender), error);
|
}
|
||||||
|
|
||||||
|
public boolean reportMinimalNoSpam(Plugin sender, String methodName, Throwable error) {
|
||||||
|
String pluginName = PacketAdapter.getPluginName(sender);
|
||||||
|
AtomicInteger counter = warningCount.get(pluginName);
|
||||||
|
|
||||||
|
// Thread safe pattern
|
||||||
|
if (counter == null) {
|
||||||
|
AtomicInteger created = new AtomicInteger();
|
||||||
|
counter = warningCount.putIfAbsent(pluginName, created);
|
||||||
|
|
||||||
|
if (counter == null) {
|
||||||
|
counter = created;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final int errorCount = counter.incrementAndGet();
|
||||||
|
|
||||||
|
// See if we should print the full error
|
||||||
|
if (errorCount < getMaxErrorCount()) {
|
||||||
|
logger.log(Level.SEVERE, "[" + PLUGIN_NAME + "] Unhandled exception occured in " +
|
||||||
|
methodName + " for " + pluginName, error);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// Nope - only print the error count occationally
|
||||||
|
if (isPowerOfTwo(errorCount)) {
|
||||||
|
logger.log(Level.SEVERE, "[" + PLUGIN_NAME + "] Unhandled exception number " + errorCount + " occured in " +
|
||||||
|
methodName + " for " + pluginName);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if a given number is a power of two.
|
||||||
|
* <p>
|
||||||
|
* That is, if there exists an N such that 2^N = number.
|
||||||
|
* @param number - the number to check.
|
||||||
|
* @return TRUE if the given number is a power of two, FALSE otherwise.
|
||||||
|
*/
|
||||||
|
private boolean isPowerOfTwo(int number) {
|
||||||
|
return (number & (number - 1)) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
Reference in New Issue
Block a user