Skip to content

Commit

Permalink
Implement RateLimitedLogger to reduce log spamming in some scenarios
Browse files Browse the repository at this point in the history
  • Loading branch information
Xitee1 committed Jan 1, 2024
1 parent 642fe48 commit 992d0ba
Show file tree
Hide file tree
Showing 3 changed files with 105 additions and 6 deletions.
7 changes: 7 additions & 0 deletions src/main/java/de/xite/scoreboard/main/PowerBoard.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package de.xite.scoreboard.main;

import de.xite.scoreboard.utils.RateLimitedLogger;
import de.xite.scoreboard.versions.VersionSpecific;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
Expand Down Expand Up @@ -29,6 +30,7 @@ public class PowerBoard extends JavaPlugin {

private static Updater updater;
private static TPSCalc tpsCalc;
private static RateLimitedLogger rateLimitedLogger;

public static final String permissionPrefix = "powerboard.";
public static final int spigotMCPluginID = 73854;
Expand All @@ -48,6 +50,7 @@ public void onEnable() {
instance = this;
updater = new Updater(spigotMCPluginID);
tpsCalc = new TPSCalc();
rateLimitedLogger = new RateLimitedLogger(this);

VersionSpecific.init();

Expand Down Expand Up @@ -152,6 +155,10 @@ public static TPSCalc getTPSCalc() {
return tpsCalc;
}

public static RateLimitedLogger getRateLimitedLogger() {
return rateLimitedLogger;
}

public static String getPermissionPrefix() {
return permissionPrefix;
}
Expand Down
21 changes: 15 additions & 6 deletions src/main/java/de/xite/scoreboard/utils/Placeholders.java
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,11 @@ public static String replace(Player p, String s) {
for(CustomPlaceholders ph : ph) {
String output = ph.replace(p, s);
if(output == null) {
pl.getLogger().severe("Output of CustomPlaceholders#replace cannot be null!" +
"This is NOT a bug in PowerBoard! It is caused by a CustomPlaceholder which was registered from another plugin.");
PowerBoard.getRateLimitedLogger().addSevere(
"Output of CustomPlaceholders#replace cannot be null! This is NOT a bug in PowerBoard! " +
"It is caused by a CustomPlaceholder that was registered by another plugin.",
true
);
}else
s = output;
}
Expand All @@ -57,9 +60,12 @@ public static String replace(Player p, String s) {
try {
s = PlaceholderAPI.setPlaceholders(p, s);
}catch (Exception e) {
pl.getLogger().severe("Could not replace PAPI Placeholders in String "+s+". This is NOT a bug of PowerBoard!"
+ "Instead it is caused by an external plugin that provides placeholders to PAPI."
+ "It just says PowerBoard there, because PB requests these placeholders from PAPI and therefore is the root cause.");
PowerBoard.getRateLimitedLogger().addSevere(
"Could not replace PAPI Placeholders in String "+s+". This is NOT a bug of PowerBoard!"
+ "Instead it is caused by an external plugin that provides placeholders to PAPI."
+ "It just says PowerBoard there, because PB requests these placeholders from PAPI and therefore is the root cause.",
true
);
if(PowerBoard.debug) {
e.printStackTrace();
}
Expand All @@ -72,7 +78,10 @@ public static String replace(Player p, String s) {
String newPH = ph.getValue();
if(s.contains(oldPH)) {
s = s.replace(oldPH, newPH);
pl.getLogger().warning("You are using deprecated placeholders! Change "+oldPH+" to "+newPH+" - The old placeholders will be removed soon.");
PowerBoard.getRateLimitedLogger().addWarn(
"You are using deprecated placeholders! Change "+oldPH+" to "+newPH+" - The old placeholders will be removed soon.",
true
);
}
}

Expand Down
83 changes: 83 additions & 0 deletions src/main/java/de/xite/scoreboard/utils/RateLimitedLogger.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package de.xite.scoreboard.utils;

import de.xite.scoreboard.main.PowerBoard;
import org.bukkit.Bukkit;

import java.util.ArrayList;
import java.util.logging.Logger;

public class RateLimitedLogger {
private PowerBoard pb;
private Logger logger;

private int scheduler;
private ArrayList<String> severe = new ArrayList<>();
private ArrayList<String> warns = new ArrayList<>();
private ArrayList<String> infos = new ArrayList<>();

public RateLimitedLogger(PowerBoard pb) {
this.pb = pb;
this.logger = pb.getLogger();
startScheduler();
}


public void addSevere(String msg, boolean printNow) {
if(!severe.contains(msg)) {
severe.add(msg);
if(printNow)
logger.severe(msg);
}
}

public void removeSevere(String msg) {
severe.remove(msg);
}


public void addWarn(String msg, boolean printNow) {
if(!warns.contains(msg)) {
warns.add(msg);
if(printNow)
logger.warning(msg);
}
}

public void removeWarn(String msg) {
warns.remove(msg);
}


public void addInfo(String msg, boolean printNow) {
if(!infos.contains(msg)) {
infos.add(msg);
if(printNow)
logger.info(msg);
}
}

public void removeInfo(String msg) {
infos.remove(msg);
}

public void stopScheduler() {
Bukkit.getScheduler().cancelTask(scheduler);
}

private void startScheduler() {
int interval = 120;

scheduler = Bukkit.getScheduler().runTaskTimerAsynchronously(pb, this::printLogs, 20 * interval, 20 * interval).getTaskId();
}

private void printLogs() {
for(String msg : severe)
logger.severe(msg);

for(String msg : warns)
logger.warning(msg);

for(String msg : infos)
logger.info(msg);
}
}

0 comments on commit 992d0ba

Please sign in to comment.