2017-04-01 07:37:48 +02:00
|
|
|
package net.ME1312.SubServers.Bungee.Host.External;
|
|
|
|
|
2020-11-14 08:07:25 +01:00
|
|
|
import net.ME1312.Galaxi.Library.Container.Value;
|
2021-10-24 06:14:07 +02:00
|
|
|
import net.ME1312.Galaxi.Library.Try;
|
2019-04-18 16:02:09 +02:00
|
|
|
import net.ME1312.Galaxi.Library.Util;
|
2020-11-16 21:34:59 +01:00
|
|
|
import net.ME1312.SubServers.Bungee.Host.SubLogFilter;
|
|
|
|
import net.ME1312.SubServers.Bungee.Host.SubLogger;
|
2019-05-17 00:36:41 +02:00
|
|
|
import net.ME1312.SubServers.Bungee.Library.Compatibility.Logger;
|
2017-04-01 07:37:48 +02:00
|
|
|
import net.ME1312.SubServers.Bungee.Network.Packet.PacketInExLogMessage;
|
2017-08-15 11:58:48 +02:00
|
|
|
import net.ME1312.SubServers.Bungee.SubAPI;
|
2017-04-01 07:37:48 +02:00
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
import java.io.FileNotFoundException;
|
|
|
|
import java.io.PrintWriter;
|
|
|
|
import java.io.UnsupportedEncodingException;
|
|
|
|
import java.lang.reflect.InvocationTargetException;
|
2021-06-25 05:06:53 +02:00
|
|
|
import java.text.SimpleDateFormat;
|
2017-04-01 07:37:48 +02:00
|
|
|
import java.util.ArrayList;
|
2021-06-25 05:06:53 +02:00
|
|
|
import java.util.Calendar;
|
2017-04-01 07:37:48 +02:00
|
|
|
import java.util.List;
|
|
|
|
import java.util.UUID;
|
2019-04-29 17:05:06 +02:00
|
|
|
import java.util.concurrent.CopyOnWriteArrayList;
|
2017-04-01 07:37:48 +02:00
|
|
|
import java.util.logging.Level;
|
|
|
|
|
2017-04-16 19:02:14 +02:00
|
|
|
/**
|
|
|
|
* External Process Logger Class
|
|
|
|
*/
|
2017-04-01 07:37:48 +02:00
|
|
|
public class ExternalSubLogger extends SubLogger {
|
|
|
|
private Object handle;
|
2020-06-12 07:45:49 +02:00
|
|
|
UUID id = null;
|
|
|
|
String name;
|
2020-11-14 08:07:25 +01:00
|
|
|
Value<Boolean> log;
|
2019-04-29 17:05:06 +02:00
|
|
|
private List<SubLogFilter> filters = new CopyOnWriteArrayList<>();
|
2020-06-12 07:45:49 +02:00
|
|
|
File file;
|
2017-04-01 07:37:48 +02:00
|
|
|
private PrintWriter writer = null;
|
|
|
|
private boolean started = false;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates a new External Logger
|
|
|
|
*
|
|
|
|
* @param user Object using this logger (or null)
|
|
|
|
* @param name Prefix
|
|
|
|
* @param log Console Logging Status
|
|
|
|
* @param file File to log to (or null for disabled)
|
|
|
|
*/
|
2020-11-14 08:07:25 +01:00
|
|
|
ExternalSubLogger(Object user, String name, Value<Boolean> log, File file) {
|
2017-04-01 07:37:48 +02:00
|
|
|
this.handle = user;
|
|
|
|
this.name = name;
|
|
|
|
this.log = log;
|
|
|
|
this.file = file;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void start() {
|
|
|
|
id = PacketInExLogMessage.register(this);
|
|
|
|
started = true;
|
|
|
|
if (file != null && writer == null) {
|
|
|
|
try {
|
|
|
|
this.writer = new PrintWriter(file, "UTF-8");
|
|
|
|
this.writer.println("---------- LOG START \u2014 " + name + " ----------");
|
|
|
|
this.writer.flush();
|
|
|
|
} catch (UnsupportedEncodingException | FileNotFoundException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
2017-04-14 04:39:51 +02:00
|
|
|
List<SubLogFilter> filters = new ArrayList<SubLogFilter>();
|
|
|
|
filters.addAll(this.filters);
|
2017-04-01 07:37:48 +02:00
|
|
|
for (SubLogFilter filter : filters) try {
|
|
|
|
filter.start();
|
|
|
|
} catch (Throwable e) {
|
|
|
|
new InvocationTargetException(e, "Exception while running SubLogger Event").printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-08-15 11:58:48 +02:00
|
|
|
@SuppressWarnings("deprecation")
|
2021-06-26 00:26:49 +02:00
|
|
|
private void log(int type, String msg) {
|
2017-04-01 07:37:48 +02:00
|
|
|
if (started) {
|
|
|
|
Level level;
|
|
|
|
|
|
|
|
// Determine LOG LEVEL
|
|
|
|
switch (type) {
|
2021-06-26 00:26:49 +02:00
|
|
|
case 80:
|
|
|
|
level = Level.FINE;
|
|
|
|
break;
|
|
|
|
case 40:
|
2017-04-01 07:37:48 +02:00
|
|
|
level = Level.WARNING;
|
|
|
|
break;
|
2021-06-26 00:26:49 +02:00
|
|
|
case 30:
|
|
|
|
case 20:
|
2017-04-01 07:37:48 +02:00
|
|
|
level = Level.SEVERE;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
level = Level.INFO;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Filter Message
|
2020-11-14 08:07:25 +01:00
|
|
|
boolean allow = (SubAPI.getInstance().getInternals().sudo == getHandler() && SubAPI.getInstance().getInternals().canSudo) || (log.value() && (SubAPI.getInstance().getInternals().sudo == null || !SubAPI.getInstance().getInternals().canSudo));
|
2017-04-14 04:39:51 +02:00
|
|
|
List<SubLogFilter> filters = new ArrayList<SubLogFilter>();
|
|
|
|
filters.addAll(this.filters);
|
2017-04-01 07:37:48 +02:00
|
|
|
for (SubLogFilter filter : filters)
|
|
|
|
try {
|
2017-08-15 11:58:48 +02:00
|
|
|
allow = (filter.log(level, msg) && allow);
|
2017-04-01 07:37:48 +02:00
|
|
|
} catch (Throwable e) {
|
|
|
|
new InvocationTargetException(e, "Exception while running SubLogger Event").printStackTrace();
|
|
|
|
}
|
|
|
|
|
|
|
|
// Log to CONSOLE
|
2019-05-17 00:36:41 +02:00
|
|
|
if (allow) Logger.get(name).log(level, msg);
|
2017-04-01 07:37:48 +02:00
|
|
|
|
|
|
|
// Log to FILE
|
|
|
|
if (writer != null) {
|
2021-06-25 05:06:53 +02:00
|
|
|
writer.println('[' + new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime()) + "] [" + level + "] > " + msg);
|
2017-04-01 07:37:48 +02:00
|
|
|
writer.flush();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-01-05 05:35:20 +01:00
|
|
|
/**
|
|
|
|
* Get the External Logger Address
|
|
|
|
*
|
|
|
|
* @return External Address
|
|
|
|
*/
|
|
|
|
public UUID getExternalAddress() {
|
|
|
|
return id;
|
|
|
|
}
|
|
|
|
|
2017-04-01 07:37:48 +02:00
|
|
|
@Override
|
|
|
|
public void registerFilter(SubLogFilter filter) {
|
2021-10-24 06:14:07 +02:00
|
|
|
Util.nullpo(filter);
|
2017-04-01 07:37:48 +02:00
|
|
|
filters.add(filter);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void unregisterFilter(SubLogFilter filter) {
|
2021-10-24 06:14:07 +02:00
|
|
|
Util.nullpo(filter);
|
|
|
|
Try.all.run(() -> filters.remove(filter));
|
2017-04-01 07:37:48 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void stop() {
|
|
|
|
if (started) {
|
|
|
|
id = null;
|
|
|
|
started = false;
|
2017-04-14 04:39:51 +02:00
|
|
|
List<SubLogFilter> filters = new ArrayList<SubLogFilter>();
|
|
|
|
filters.addAll(this.filters);
|
2017-04-01 07:37:48 +02:00
|
|
|
for (SubLogFilter filter : filters) try {
|
|
|
|
filter.stop();
|
|
|
|
} catch (Throwable e) {
|
|
|
|
new InvocationTargetException(e, "Exception while running SubLogger Event").printStackTrace();
|
|
|
|
}
|
|
|
|
if (writer != null) {
|
2017-04-14 04:39:51 +02:00
|
|
|
PrintWriter writer = this.writer;
|
|
|
|
this.writer = null;
|
2022-05-28 11:59:33 +02:00
|
|
|
int l = (("---------- LOG START \u2014 " + name + " ----------").length() - 9) / 2;
|
2017-04-01 07:37:48 +02:00
|
|
|
String s = "";
|
|
|
|
while (s.length() < l) s += '-';
|
|
|
|
writer.println(s + " LOG END " + s);
|
|
|
|
writer.close();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Object getHandler() {
|
|
|
|
return handle;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String getName() {
|
|
|
|
return name;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean isLogging() {
|
2020-11-14 08:07:25 +01:00
|
|
|
return log.value();
|
2017-04-01 07:37:48 +02:00
|
|
|
}
|
|
|
|
}
|