Skip to content

Commit

Permalink
[FEATURE] LogAppender
Browse files Browse the repository at this point in the history
  • Loading branch information
gravit0 committed May 10, 2021
1 parent 14f77f4 commit 780fd10
Showing 1 changed file with 33 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,24 @@
import io.netty.handler.codec.http.FullHttpRequest;
import io.netty.handler.codec.http.HttpMethod;
import io.netty.handler.codec.http.HttpResponseStatus;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.LogEvent;
import pro.gravit.launchserver.LaunchServer;
import pro.gravit.launchserver.config.log4j.LogAppender;
import pro.gravit.launchserver.socket.NettyConnectContext;
import pro.gravit.launchserver.socket.handlers.NettyWebAPIHandler;
import pro.gravit.utils.helper.LogHelper;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import java.util.stream.Collectors;

public class RemoteControlWebSeverlet implements NettyWebAPIHandler.SimpleSeverletHandler {
private final RemoteControlModule module;
private final LaunchServer server;
private transient final Logger logger = LogManager.getLogger();

public RemoteControlWebSeverlet(RemoteControlModule module, LaunchServer server) {
this.module = module;
Expand Down Expand Up @@ -65,31 +71,29 @@ public void handle(ChannelHandlerContext ctx, FullHttpRequest msg, NettyConnectC
return;
}
}
LogHelper.info("[RemoteControl][Web] IP %s execute command '%s' with token %s...", context.ip, command, accessToken.substring(0, 5));
logger.info("[RemoteControl][Web] IP {} execute command '{}' with token {}...", context.ip, command, accessToken.substring(0, 5));
boolean needLog = params.get("log") != null && Boolean.parseBoolean(params.get("log"));
LogLinesContainer container = null;
LogHelper.OutputEnity entity = null;
if (needLog) {
container = new LogLinesContainer();
entity = new LogHelper.OutputEnity(container, LogHelper.OutputTypes.PLAIN);
LogHelper.addOutput(entity);
LogAppender.getInstance().addListener(container);
}
String exception = null;
try {
server.commandHandler.evalNative(command, false);
} catch (Throwable e) {
if (needLog) {
LogHelper.removeOutput(entity);
LogAppender.getInstance().removeListener(container);
}
LogHelper.error(e);
logger.error(e);
exception = e.toString();
}
SuccessCommandResponse response = new SuccessCommandResponse();
response.exception = exception;
response.lines = container == null ? null : container.lines;
response.success = exception == null;
if (needLog) {
LogHelper.removeOutput(entity);
LogAppender.getInstance().removeListener(container);
}
sendHttpResponse(ctx, simpleJsonResponse(HttpResponseStatus.OK, new RemoteControlResponse<>(response)));
}
Expand All @@ -107,17 +111,33 @@ public RemoteControlResponse(T data) {
}
}

public static class LogLinesContainer implements LogHelper.Output {
public List<String> lines = new ArrayList<>();
public static class LogLinesContainer implements Consumer<LogEvent> {
public List<LogEventView> lines = new ArrayList<>();

@Override
public void println(String message) {
lines.add(message);
public void accept(LogEvent logEvent) {
lines.add(new LogEventView(logEvent));
}
}

public static class LogEventView {
public final String level;
public final String message;
public final String exception;
public LogEventView(LogEvent event) {
level = event.getLevel().toString();
message = event.getMessage().getFormattedMessage();
Throwable throwable = event.getMessage().getThrowable();
if(throwable != null) {
exception = String.format("%s: %s", throwable.getClass().getName(), throwable.getMessage());
} else {
exception = null;
}
}
}

public static class SuccessCommandResponse {
public List<String> lines;
public List<LogEventView> lines;
public String exception;
public boolean success;
}
Expand Down

0 comments on commit 780fd10

Please sign in to comment.