Log all violations for on-the-fly debugging by default, configurable.

This reduces the complexity of explanation :). Performance savers can
turn it off, to prevent the hook registering at all.
This commit is contained in:
asofold 2015-11-28 21:09:10 +01:00
parent 6e602af816
commit 4a8f19ef7a
4 changed files with 28 additions and 13 deletions

View File

@ -51,6 +51,7 @@ public abstract class ConfPaths {
private static final String LOGGING_EXTENDED = LOGGING + "extended.";
public static final String LOGGING_EXTENDED_STATUS = LOGGING_EXTENDED + "status";
private static final String LOGGING_EXTENDED_ALLVIOLATIONS = LOGGING_EXTENDED + "allviolations.";
public static final String LOGGING_EXTENDED_ALLVIOLATIONS_DEBUG = LOGGING_EXTENDED_ALLVIOLATIONS + "debug";
public static final String LOGGING_EXTENDED_ALLVIOLATIONS_DEBUGONLY = LOGGING_EXTENDED_ALLVIOLATIONS + "debugonly";
private static final String LOGGING_EXTENDED_ALLVIOLATIONS_BACKEND = LOGGING_EXTENDED_ALLVIOLATIONS + "backend.";
public static final String LOGGING_EXTENDED_ALLVIOLATIONS_BACKEND_TRACE = LOGGING_EXTENDED_ALLVIOLATIONS_BACKEND + "trace";

View File

@ -40,6 +40,7 @@ public class DefaultConfig extends ConfigFile {
set(ConfPaths.LOGGING_ACTIVE, true);
set(ConfPaths.LOGGING_MAXQUEUESIZE, 5000);
set(ConfPaths.LOGGING_EXTENDED_STATUS, false);
set(ConfPaths.LOGGING_EXTENDED_ALLVIOLATIONS_DEBUG, true);
set(ConfPaths.LOGGING_EXTENDED_ALLVIOLATIONS_DEBUGONLY, false);
set(ConfPaths.LOGGING_EXTENDED_ALLVIOLATIONS_BACKEND_TRACE, false);
set(ConfPaths.LOGGING_EXTENDED_ALLVIOLATIONS_BACKEND_NOTIFY, false);

View File

@ -15,7 +15,10 @@ public class AllViolationsConfig {
/** Log all violations to the in-game notification channel. */
public final boolean allToNotify;
/** Log all violations for players/checks for which debug flags are set. */
public final boolean debug;
/** Only log if the player is being "debugged". Currently incomplete. */
public final boolean debugOnly;
@ -23,13 +26,14 @@ public class AllViolationsConfig {
// TODO: More filtering like in TestNCP.
public AllViolationsConfig(ConfigFile config) {
debugOnly = config.getBoolean(ConfPaths.LOGGING_EXTENDED_ALLVIOLATIONS_DEBUGONLY);
allToTrace = config.getBoolean(ConfPaths.LOGGING_EXTENDED_ALLVIOLATIONS_BACKEND_TRACE);
allToNotify = config.getBoolean(ConfPaths.LOGGING_EXTENDED_ALLVIOLATIONS_BACKEND_NOTIFY);
debug = config.getBoolean(ConfPaths.LOGGING_EXTENDED_ALLVIOLATIONS_DEBUG);
debugOnly = config.getBoolean(ConfPaths.LOGGING_EXTENDED_ALLVIOLATIONS_DEBUGONLY) || debug && !allToTrace && !allToNotify;
}
public boolean doesLogAnything() {
return allToTrace || allToNotify;
return allToTrace || allToNotify || debug;
}
}

View File

@ -90,22 +90,31 @@ public class AllViolationsHook implements NCPHook, ILast, IStats {
if (config == null) {
return false;
}
if (config.debugOnly) {
boolean debugSet = false;
if (config.debugOnly || config.debug) {
// TODO: Better mix the debug flag into IViolationInfo, for best performance.
final CheckDataFactory factory = checkType.getDataFactory();
if (factory == null) {
return false;
}
final ICheckData data = factory.getData(player);
if (data == null || !data.getDebug()) {
if (config.debugOnly && factory == null) {
return false;
} else {
final ICheckData data = factory.getData(player);
if (data == null) {
if (config.debugOnly) {
return false;
}
} else {
debugSet = data.getDebug();
if (config.debugOnly && !debugSet) {
return false;
}
}
}
}
log(checkType, player, info, config);
log(checkType, player, info, config.allToTrace || debugSet, config.allToNotify);
return false;
}
private void log(final CheckType checkType, final Player player, final IViolationInfo info, final AllViolationsConfig config) {
private void log(final CheckType checkType, final Player player, final IViolationInfo info, final boolean toTrace, final boolean toNotify) {
// Generate the message.
// TODO: More colors?
final StringBuilder builder = new StringBuilder(300);
@ -130,10 +139,10 @@ public class AllViolationsHook implements NCPHook, ILast, IStats {
final String message = builder.toString();
// Send the message.
final LogManager logManager = NCPAPIProvider.getNoCheatPlusAPI().getLogManager();
if (config.allToNotify) {
if (toNotify) {
logManager.info(Streams.NOTIFY_INGAME, message);
}
if (config.allToTrace) {
if (toTrace) {
logManager.info(Streams.TRACE_FILE, ChatColor.stripColor(message));
}
}