Auto-format

This commit is contained in:
James Seibel
2022-08-20 18:25:36 -05:00
parent a179fb9ff9
commit 5819d8c3f3
2 changed files with 269 additions and 193 deletions
@@ -16,7 +16,7 @@
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.seibel.lod.core.logging;
import com.seibel.lod.core.api.internal.a7.ClientApi;
@@ -31,77 +31,104 @@ import java.util.LinkedList;
import java.util.List;
import java.util.function.Supplier;
public class ConfigBasedLogger {
public static final List<WeakReference<ConfigBasedLogger>> loggers
= Collections.synchronizedList(new LinkedList<WeakReference<ConfigBasedLogger>>());
public static synchronized void updateAll() {
loggers.removeIf((logger) -> logger.get()==null);
loggers.forEach((logger) -> {
ConfigBasedLogger l = logger.get();
if (l!=null) l.update();
});
}
private ELoggerMode mode;
private final Supplier<ELoggerMode> getter;
private final Logger logger;
public ConfigBasedLogger(Logger logger, Supplier<ELoggerMode> configQuery) {
getter = configQuery;
mode = getter.get();
this.logger = logger;
loggers.add(new WeakReference<>(this));
}
private String _throwableToDetailString(Throwable t) {
StringBuilder sb = new StringBuilder();
sb.append(t.toString()).append('\n');
StackTraceElement[] stacks = t.getStackTrace();
if (stacks==null || stacks.length == 0)
return sb.append(" at {Stack trace unavailable}").toString();
for (StackTraceElement stack : stacks) {
sb.append(" at ").append(stack.toString()).append("\n");
}
return sb.toString();
}
public void update() {
mode = getter.get();
}
public boolean canMaybeLog() {return mode != ELoggerMode.DISABLED;}
public void log(Level level, String str, Object... param) {
Message msg = logger.getMessageFactory().newMessage(str, param);
String msgStr = msg.getFormattedMessage();
if (mode.levelForFile.isLessSpecificThan(level)) {
Level logLevel = level.isLessSpecificThan(Level.INFO) ? Level.INFO : level;
if (param.length > 0 && param[param.length-1] instanceof Throwable)
logger.log(logLevel, msgStr, (Throwable)param[param.length-1]);
else logger.log(logLevel, msgStr);
}
if (mode.levelForChat.isLessSpecificThan(level)) {
if (param.length > 0 && param[param.length-1] instanceof Throwable)
ClientApi.logToChat(level, msgStr + "\n" +
_throwableToDetailString(((Throwable) param[param.length - 1])));
else ClientApi.logToChat(level, msgStr);
}
}
public void error(String str, Object... param) {
log(Level.ERROR, str, param);
}
public void warn(String str, Object... param) {
log(Level.WARN, str, param);
}
public void info(String str, Object... param) {
log(Level.INFO, str, param);
}
public void debug(String str, Object... param) {
log(Level.DEBUG, str, param);
}
public void trace(String str, Object... param) {
log(Level.TRACE, str, param);
}
public class ConfigBasedLogger
{
public static final List<WeakReference<ConfigBasedLogger>> loggers
= Collections.synchronizedList(new LinkedList<WeakReference<ConfigBasedLogger>>());
public static synchronized void updateAll()
{
loggers.removeIf((logger) -> logger.get() == null);
loggers.forEach((logger) -> {
ConfigBasedLogger l = logger.get();
if (l != null)
l.update();
});
}
private ELoggerMode mode;
private final Supplier<ELoggerMode> getter;
private final Logger logger;
public ConfigBasedLogger(Logger logger, Supplier<ELoggerMode> configQuery)
{
getter = configQuery;
mode = getter.get();
this.logger = logger;
loggers.add(new WeakReference<>(this));
}
private String _throwableToDetailString(Throwable t)
{
StringBuilder sb = new StringBuilder();
sb.append(t.toString()).append('\n');
StackTraceElement[] stacks = t.getStackTrace();
if (stacks == null || stacks.length == 0)
return sb.append(" at {Stack trace unavailable}").toString();
for (StackTraceElement stack : stacks)
{
sb.append(" at ").append(stack.toString()).append("\n");
}
return sb.toString();
}
public void update()
{
mode = getter.get();
}
public boolean canMaybeLog()
{
return mode != ELoggerMode.DISABLED;
}
public void log(Level level, String str, Object... param)
{
Message msg = logger.getMessageFactory().newMessage(str, param);
String msgStr = msg.getFormattedMessage();
if (mode.levelForFile.isLessSpecificThan(level))
{
Level logLevel = level.isLessSpecificThan(Level.INFO) ? Level.INFO : level;
if (param.length > 0 && param[param.length - 1] instanceof Throwable)
logger.log(logLevel, msgStr, (Throwable) param[param.length - 1]);
else
logger.log(logLevel, msgStr);
}
if (mode.levelForChat.isLessSpecificThan(level))
{
if (param.length > 0 && param[param.length - 1] instanceof Throwable)
ClientApi.logToChat(level, msgStr + "\n" +
_throwableToDetailString(((Throwable) param[param.length - 1])));
else
ClientApi.logToChat(level, msgStr);
}
}
public void error(String str, Object... param)
{
log(Level.ERROR, str, param);
}
public void warn(String str, Object... param)
{
log(Level.WARN, str, param);
}
public void info(String str, Object... param)
{
log(Level.INFO, str, param);
}
public void debug(String str, Object... param)
{
log(Level.DEBUG, str, param);
}
public void trace(String str, Object... param)
{
log(Level.TRACE, str, param);
}
}
@@ -16,7 +16,7 @@
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.seibel.lod.core.logging;
import com.seibel.lod.core.api.internal.a7.ClientApi;
@@ -32,122 +32,171 @@ import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Supplier;
public class ConfigBasedSpamLogger {
public static final List<WeakReference<ConfigBasedSpamLogger>> loggers
= Collections.synchronizedList(new LinkedList<WeakReference<ConfigBasedSpamLogger>>());
public static synchronized void updateAll(boolean flush) {
loggers.removeIf((logger) -> logger.get()==null);
loggers.forEach((logger) -> {
ConfigBasedSpamLogger l = logger.get();
if (l!=null) l.update();
if (l!=null && flush) l.reset();
});
}
private ELoggerMode mode;
private final Supplier<ELoggerMode> getter;
private final int maxLogCount;
private final AtomicInteger logTries = new AtomicInteger(0);
private final Logger logger;
public ConfigBasedSpamLogger(Logger logger, Supplier<ELoggerMode> configQuery, int maxLogPerSec) {
getter = configQuery;
mode = getter.get();
maxLogCount = maxLogPerSec;
this.logger = logger;
loggers.add(new WeakReference<>(this));
}
public void reset() {logTries.set(0);}
public boolean canMaybeLog() {return mode != ELoggerMode.DISABLED && logTries.get() < maxLogCount;}
public void update() {
mode = getter.get();
}
private String _throwableToDetailString(Throwable t) {
StringBuilder sb = new StringBuilder();
sb.append(t.toString()).append('\n');
StackTraceElement[] stacks = t.getStackTrace();
if (stacks==null || stacks.length == 0)
return sb.append(" at {Stack trace unavailable}").toString();
for (StackTraceElement stack : stacks) {
sb.append(" at ").append(stack.toString()).append("\n");
}
return sb.toString();
}
public void log(Level level, String str, Object... param) {
if (logTries.get() >= maxLogCount) return;
Message msg = logger.getMessageFactory().newMessage(str, param);
String msgStr = msg.getFormattedMessage();
if (mode.levelForFile.isLessSpecificThan(level)) {
Level logLevel = level.isLessSpecificThan(Level.INFO) ? Level.INFO : level;
if (param.length > 0 && param[param.length-1] instanceof Throwable)
logger.log(logLevel, msgStr, (Throwable)param[param.length-1]);
else logger.log(logLevel, msgStr);
}
if (mode.levelForChat.isLessSpecificThan(level)) {
if (param.length > 0 && param[param.length-1] instanceof Throwable)
ClientApi.logToChat(level, msgStr + "\n" +
_throwableToDetailString(((Throwable) param[param.length - 1])));
else ClientApi.logToChat(level, msgStr);
}
}
public void error(String str, Object... param) {
log(Level.ERROR, str, param);
}
public void warn(String str, Object... param) {
log(Level.WARN, str, param);
}
public void info(String str, Object... param) {
log(Level.INFO, str, param);
}
public void debug(String str, Object... param) {
log(Level.DEBUG, str, param);
}
public void trace(String str, Object... param) {
log(Level.TRACE, str, param);
}
public void incLogTries() {
logTries.getAndIncrement();
}
public void logInc(Level level, String str, Object... param) {
if (logTries.getAndIncrement() >= maxLogCount) return;
Message msg = logger.getMessageFactory().newMessage(str, param);
String msgStr = msg.getFormattedMessage();
if (mode.levelForFile.isLessSpecificThan(level)) {
Level logLevel = level.isLessSpecificThan(Level.INFO) ? Level.INFO : level;
if (param.length > 0 && param[param.length-1] instanceof Throwable)
logger.log(logLevel, msgStr, (Throwable)param[param.length-1]);
else logger.log(logLevel, msgStr);
}
if (mode.levelForChat.isLessSpecificThan(level)) {
if (param.length > 0 && param[param.length-1] instanceof Throwable)
ClientApi.logToChat(level, msgStr + "\n" +
_throwableToDetailString(((Throwable) param[param.length - 1])));
else ClientApi.logToChat(level, msgStr);
}
}
public void errorInc(String str, Object... param) {
logInc(Level.ERROR, str, param);
}
public void warnInc(String str, Object... param) {
logInc(Level.WARN, str, param);
}
public void infoInc(String str, Object... param) {
logInc(Level.INFO, str, param);
}
public void debugInc(String str, Object... param) {
logInc(Level.DEBUG, str, param);
}
public void traceInc(String str, Object... param) {
logInc(Level.TRACE, str, param);
}
public class ConfigBasedSpamLogger
{
public static final List<WeakReference<ConfigBasedSpamLogger>> loggers
= Collections.synchronizedList(new LinkedList<WeakReference<ConfigBasedSpamLogger>>());
public static synchronized void updateAll(boolean flush)
{
loggers.removeIf((logger) -> logger.get() == null);
loggers.forEach((logger) -> {
ConfigBasedSpamLogger l = logger.get();
if (l != null)
l.update();
if (l != null && flush)
l.reset();
});
}
private ELoggerMode mode;
private final Supplier<ELoggerMode> getter;
private final int maxLogCount;
private final AtomicInteger logTries = new AtomicInteger(0);
private final Logger logger;
public ConfigBasedSpamLogger(Logger logger, Supplier<ELoggerMode> configQuery, int maxLogPerSec)
{
getter = configQuery;
mode = getter.get();
maxLogCount = maxLogPerSec;
this.logger = logger;
loggers.add(new WeakReference<>(this));
}
public void reset()
{
logTries.set(0);
}
public boolean canMaybeLog()
{
return mode != ELoggerMode.DISABLED && logTries.get() < maxLogCount;
}
public void update()
{
mode = getter.get();
}
private String _throwableToDetailString(Throwable t)
{
StringBuilder sb = new StringBuilder();
sb.append(t.toString()).append('\n');
StackTraceElement[] stacks = t.getStackTrace();
if (stacks == null || stacks.length == 0)
return sb.append(" at {Stack trace unavailable}").toString();
for (StackTraceElement stack : stacks)
{
sb.append(" at ").append(stack.toString()).append("\n");
}
return sb.toString();
}
public void log(Level level, String str, Object... param)
{
if (logTries.get() >= maxLogCount)
return;
Message msg = logger.getMessageFactory().newMessage(str, param);
String msgStr = msg.getFormattedMessage();
if (mode.levelForFile.isLessSpecificThan(level))
{
Level logLevel = level.isLessSpecificThan(Level.INFO) ? Level.INFO : level;
if (param.length > 0 && param[param.length - 1] instanceof Throwable)
logger.log(logLevel, msgStr, (Throwable) param[param.length - 1]);
else
logger.log(logLevel, msgStr);
}
if (mode.levelForChat.isLessSpecificThan(level))
{
if (param.length > 0 && param[param.length - 1] instanceof Throwable)
ClientApi.logToChat(level, msgStr + "\n" +
_throwableToDetailString(((Throwable) param[param.length - 1])));
else
ClientApi.logToChat(level, msgStr);
}
}
public void error(String str, Object... param)
{
log(Level.ERROR, str, param);
}
public void warn(String str, Object... param)
{
log(Level.WARN, str, param);
}
public void info(String str, Object... param)
{
log(Level.INFO, str, param);
}
public void debug(String str, Object... param)
{
log(Level.DEBUG, str, param);
}
public void trace(String str, Object... param)
{
log(Level.TRACE, str, param);
}
public void incLogTries()
{
logTries.getAndIncrement();
}
public void logInc(Level level, String str, Object... param)
{
if (logTries.getAndIncrement() >= maxLogCount)
return;
Message msg = logger.getMessageFactory().newMessage(str, param);
String msgStr = msg.getFormattedMessage();
if (mode.levelForFile.isLessSpecificThan(level))
{
Level logLevel = level.isLessSpecificThan(Level.INFO) ? Level.INFO : level;
if (param.length > 0 && param[param.length - 1] instanceof Throwable)
logger.log(logLevel, msgStr, (Throwable) param[param.length - 1]);
else
logger.log(logLevel, msgStr);
}
if (mode.levelForChat.isLessSpecificThan(level))
{
if (param.length > 0 && param[param.length - 1] instanceof Throwable)
ClientApi.logToChat(level, msgStr + "\n" +
_throwableToDetailString(((Throwable) param[param.length - 1])));
else
ClientApi.logToChat(level, msgStr);
}
}
public void errorInc(String str, Object... param)
{
logInc(Level.ERROR, str, param);
}
public void warnInc(String str, Object... param)
{
logInc(Level.WARN, str, param);
}
public void infoInc(String str, Object... param)
{
logInc(Level.INFO, str, param);
}
public void debugInc(String str, Object... param)
{
logInc(Level.DEBUG, str, param);
}
public void traceInc(String str, Object... param)
{
logInc(Level.TRACE, str, param);
}
}