From 501d8c1e09173717a4ed98b43acf41cdcd245f12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bernardo=20De=20Marco=20Gon=C3=A7alves?= Date: Mon, 9 Sep 2024 15:39:42 -0300 Subject: [PATCH] Add logs to CPVM connection process (#8924) * increment cpvm connection logs * remove sourceIp variable * increment cpvm connection logs * extract duplicate error messages to variables * change logs level from trace to debug in authenticateToVNCServer * add logs in trace level inside of connection loop * remove redundant trace log * add logs to ConsoleProxyNoVNCHandler class * retrieve client source IP * add periods to log messages * change log levels from warn to error inside of catch blocks * add client IP to successful authentication log * replace concatenation with String.format() * remove String.format() and use log4j2 new features instead * remove String.format() and use log4j2 new features instead * apply Daan's suggestion Co-authored-by: dahn * resolve conflicts * fix logs with three parameters * get correct client IP * use log4j dependencies directly * apply winterhazel's suggestion Co-authored-by: Fabricio Duarte * remove log proxy * address winterhazel's suggestions on ConsoleProxyNoVncClient class * address winterhazel's suggestions on ConsoleProxyNoVNCHandler class * address winterhazel's suggestions on ConsoleProxyNoVNCHandler class Co-authored-by: Fabricio Duarte --------- Co-authored-by: dahn Co-authored-by: Fabricio Duarte --- .../servlet/ConsoleProxyClientParam.java | 17 ++ .../consoleproxy/AjaxFIFOImageCache.java | 5 +- .../com/cloud/consoleproxy/ConsoleProxy.java | 8 +- .../consoleproxy/ConsoleProxyAjaxHandler.java | 5 +- .../ConsoleProxyAjaxImageHandler.java | 5 +- .../ConsoleProxyBaseServerFactoryImpl.java | 5 +- .../consoleproxy/ConsoleProxyClientParam.java | 16 ++ .../consoleproxy/ConsoleProxyCmdHandler.java | 5 +- .../ConsoleProxyHttpHandlerHelper.java | 5 +- .../ConsoleProxyLoggerFactory.java | 104 -------- .../consoleproxy/ConsoleProxyMonitor.java | 5 +- .../ConsoleProxyNoVNCHandler.java | 47 ++-- .../consoleproxy/ConsoleProxyNoVNCServer.java | 5 +- .../consoleproxy/ConsoleProxyNoVncClient.java | 38 +-- .../ConsoleProxyResourceHandler.java | 5 +- .../ConsoleProxyThumbnailHandler.java | 5 +- .../rdp/RdpBufferedImageCanvas.java | 6 +- .../com/cloud/consoleproxy/util/Logger.java | 223 ------------------ .../consoleproxy/util/LoggerFactory.java | 21 -- .../com/cloud/consoleproxy/util/RawHTTP.java | 5 +- .../consoleproxy/vnc/BufferedImageCanvas.java | 6 +- .../cloud/consoleproxy/vnc/NoVncClient.java | 21 +- .../com/cloud/consoleproxy/vnc/VncClient.java | 6 +- .../vnc/VncClientPacketSender.java | 6 +- .../vnc/VncServerPacketReceiver.java | 6 +- .../vnc/packet/server/AbstractRect.java | 5 +- .../vnc/packet/server/ServerCutText.java | 6 +- .../vnc/security/VncAuthSecurity.java | 6 +- .../vnc/security/VncTLSSecurity.java | 6 +- .../websocket/WebSocketReverseProxy.java | 6 +- 30 files changed, 172 insertions(+), 437 deletions(-) delete mode 100644 services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyLoggerFactory.java delete mode 100644 services/console-proxy/server/src/main/java/com/cloud/consoleproxy/util/Logger.java delete mode 100644 services/console-proxy/server/src/main/java/com/cloud/consoleproxy/util/LoggerFactory.java diff --git a/server/src/main/java/com/cloud/servlet/ConsoleProxyClientParam.java b/server/src/main/java/com/cloud/servlet/ConsoleProxyClientParam.java index e23778c0b98..b416ab98288 100644 --- a/server/src/main/java/com/cloud/servlet/ConsoleProxyClientParam.java +++ b/server/src/main/java/com/cloud/servlet/ConsoleProxyClientParam.java @@ -34,7 +34,16 @@ public class ConsoleProxyClientParam { private String username; private String password; + /** + * IP that has generated the console endpoint + */ private String sourceIP; + + /** + * IP of the client that has connected to the console + */ + private String clientIp; + private String websocketUrl; private String sessionUuid; @@ -201,4 +210,12 @@ public class ConsoleProxyClientParam { public void setSessionUuid(String sessionUuid) { this.sessionUuid = sessionUuid; } + + public String getClientIp() { + return clientIp; + } + + public void setClientIp(String clientIp) { + this.clientIp = clientIp; + } } diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/AjaxFIFOImageCache.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/AjaxFIFOImageCache.java index 5a0a29977b5..1b94578d1e0 100644 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/AjaxFIFOImageCache.java +++ b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/AjaxFIFOImageCache.java @@ -21,10 +21,11 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import com.cloud.consoleproxy.util.Logger; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; public class AjaxFIFOImageCache { - protected Logger logger = Logger.getLogger(getClass()); + protected Logger logger = LogManager.getLogger(getClass()); private List fifoQueue; private Map cache; diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxy.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxy.java index c841f76540d..22922f43f93 100644 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxy.java +++ b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxy.java @@ -39,17 +39,19 @@ import org.apache.commons.lang3.StringUtils; import org.apache.logging.log4j.core.config.Configurator; import org.eclipse.jetty.websocket.api.Session; -import com.cloud.consoleproxy.util.Logger; import com.cloud.utils.PropertiesUtil; import com.google.gson.Gson; import com.sun.net.httpserver.HttpServer; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + /** * * ConsoleProxy, singleton class that manages overall activities in console proxy process. To make legacy code work, we still */ public class ConsoleProxy { - protected static Logger LOGGER = Logger.getLogger(ConsoleProxy.class); + protected static Logger LOGGER = LogManager.getLogger(ConsoleProxy.class); public static final int KEYBOARD_RAW = 0; public static final int KEYBOARD_COOKED = 1; @@ -280,7 +282,6 @@ public class ConsoleProxy { public static void startWithContext(Properties conf, Object context, byte[] ksBits, String ksPassword, String password, Boolean isSourceIpCheckEnabled) { setEncryptorPassword(password); configLog4j(); - Logger.setFactory(new ConsoleProxyLoggerFactory()); LOGGER.info("Start console proxy with context"); if (conf != null) { @@ -427,7 +428,6 @@ public class ConsoleProxy { public static void main(String[] argv) { standaloneStart = true; configLog4j(); - Logger.setFactory(new ConsoleProxyLoggerFactory()); InputStream confs = ConsoleProxy.class.getResourceAsStream("/conf/consoleproxy.properties"); Properties conf = new Properties(); diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyAjaxHandler.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyAjaxHandler.java index e42917db6aa..bfd25188c65 100644 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyAjaxHandler.java +++ b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyAjaxHandler.java @@ -32,10 +32,11 @@ import com.sun.net.httpserver.Headers; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; -import com.cloud.consoleproxy.util.Logger; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; public class ConsoleProxyAjaxHandler implements HttpHandler { - protected Logger logger = Logger.getLogger(getClass()); + protected Logger logger = LogManager.getLogger(getClass()); public ConsoleProxyAjaxHandler() { } diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyAjaxImageHandler.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyAjaxImageHandler.java index af200b0a0e8..bb5b9f6ec31 100644 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyAjaxImageHandler.java +++ b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyAjaxImageHandler.java @@ -28,10 +28,11 @@ import com.sun.net.httpserver.Headers; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; -import com.cloud.consoleproxy.util.Logger; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; public class ConsoleProxyAjaxImageHandler implements HttpHandler { - protected Logger logger = Logger.getLogger(getClass()); + protected Logger logger = LogManager.getLogger(getClass()); @Override public void handle(HttpExchange t) throws IOException { diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyBaseServerFactoryImpl.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyBaseServerFactoryImpl.java index b178f0d5d68..548b1a99261 100644 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyBaseServerFactoryImpl.java +++ b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyBaseServerFactoryImpl.java @@ -23,10 +23,11 @@ import javax.net.ssl.SSLServerSocket; import com.sun.net.httpserver.HttpServer; -import com.cloud.consoleproxy.util.Logger; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; public class ConsoleProxyBaseServerFactoryImpl implements ConsoleProxyServerFactory { - protected Logger logger = Logger.getLogger(getClass()); + protected Logger logger = LogManager.getLogger(getClass()); @Override public void init(byte[] ksBits, String ksPassword) { diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyClientParam.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyClientParam.java index aa1f2223a8c..01c4fa6480e 100644 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyClientParam.java +++ b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyClientParam.java @@ -39,8 +39,16 @@ public class ConsoleProxyClientParam { private String password; private String websocketUrl; + /** + * IP that has generated the console endpoint + */ private String sourceIP; + /** + * IP of the client that has connected to the console + */ + private String clientIp; + private String sessionUuid; /** @@ -204,4 +212,12 @@ public class ConsoleProxyClientParam { public void setClientProvidedExtraSecurityToken(String clientProvidedExtraSecurityToken) { this.clientProvidedExtraSecurityToken = clientProvidedExtraSecurityToken; } + + public String getClientIp() { + return clientIp; + } + + public void setClientIp(String clientIp) { + this.clientIp = clientIp; + } } diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyCmdHandler.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyCmdHandler.java index 400eb2b9984..606b4509512 100644 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyCmdHandler.java +++ b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyCmdHandler.java @@ -24,10 +24,11 @@ import com.sun.net.httpserver.Headers; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; -import com.cloud.consoleproxy.util.Logger; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; public class ConsoleProxyCmdHandler implements HttpHandler { - protected Logger logger = Logger.getLogger(getClass()); + protected Logger logger = LogManager.getLogger(getClass()); @Override public void handle(HttpExchange t) throws IOException { diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyHttpHandlerHelper.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyHttpHandlerHelper.java index fb9d0794c22..48ac5f44ff2 100644 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyHttpHandlerHelper.java +++ b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyHttpHandlerHelper.java @@ -19,10 +19,11 @@ package com.cloud.consoleproxy; import java.util.HashMap; import java.util.Map; -import com.cloud.consoleproxy.util.Logger; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; public class ConsoleProxyHttpHandlerHelper { - protected static Logger LOGGER = Logger.getLogger(ConsoleProxyHttpHandlerHelper.class); + protected static Logger LOGGER = LogManager.getLogger(ConsoleProxyHttpHandlerHelper.class); public static Map getQueryMap(String query) { String[] params = query.split("&"); diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyLoggerFactory.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyLoggerFactory.java deleted file mode 100644 index 74e393f64d8..00000000000 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyLoggerFactory.java +++ /dev/null @@ -1,104 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.consoleproxy; - -import com.cloud.consoleproxy.util.Logger; -import com.cloud.consoleproxy.util.LoggerFactory; -import org.apache.logging.log4j.LogManager; - -public class ConsoleProxyLoggerFactory implements LoggerFactory { - public ConsoleProxyLoggerFactory() { - } - - @Override - public Logger getLogger(Class clazz) { - return new Log4jLogger(LogManager.getLogger(clazz)); - } - - public static class Log4jLogger extends Logger { - private org.apache.logging.log4j.Logger logger; - - public Log4jLogger(org.apache.logging.log4j.Logger logger) { - this.logger = logger; - } - - @Override - public boolean isTraceEnabled() { - return logger.isTraceEnabled(); - } - - @Override - public boolean isDebugEnabled() { - return logger.isDebugEnabled(); - } - - @Override - public boolean isInfoEnabled() { - return logger.isInfoEnabled(); - } - - @Override - public void trace(Object message) { - logger.trace(message); - } - - @Override - public void trace(Object message, Throwable exception) { - logger.trace(message, exception); - } - - @Override - public void info(Object message) { - logger.info(message); - } - - @Override - public void info(Object message, Throwable exception) { - logger.info(message, exception); - } - - @Override - public void debug(Object message) { - logger.debug(message); - } - - @Override - public void debug(Object message, Throwable exception) { - logger.debug(message, exception); - } - - @Override - public void warn(Object message) { - logger.warn(message); - } - - @Override - public void warn(Object message, Throwable exception) { - logger.warn(message, exception); - } - - @Override - public void error(Object message) { - logger.error(message); - } - - @Override - public void error(Object message, Throwable exception) { - logger.error(message, exception); - } - } -} diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyMonitor.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyMonitor.java index 378072ad804..3e224d8d4c4 100644 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyMonitor.java +++ b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyMonitor.java @@ -24,7 +24,8 @@ import java.util.HashMap; import java.util.Map; -import com.cloud.consoleproxy.util.Logger; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.core.config.Configurator; // @@ -33,7 +34,7 @@ import org.apache.logging.log4j.core.config.Configurator; // itself and the shell script will re-launch console proxy // public class ConsoleProxyMonitor { - protected Logger logger = Logger.getLogger(getClass()); + protected Logger logger = LogManager.getLogger(getClass()); private String[] _argv; private Map _argMap = new HashMap(); diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyNoVNCHandler.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyNoVNCHandler.java index be0db7b8fb4..a9639d0b32e 100644 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyNoVNCHandler.java +++ b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyNoVNCHandler.java @@ -23,7 +23,8 @@ import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.cloud.consoleproxy.util.Logger; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.websocket.api.Session; @@ -40,7 +41,7 @@ import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory; public class ConsoleProxyNoVNCHandler extends WebSocketHandler { private ConsoleProxyNoVncClient viewer = null; - protected Logger logger = Logger.getLogger(ConsoleProxyNoVNCHandler.class); + protected Logger logger = LogManager.getLogger(getClass()); public ConsoleProxyNoVNCHandler() { super(); @@ -82,15 +83,16 @@ public class ConsoleProxyNoVNCHandler extends WebSocketHandler { String ticket = queryMap.get("ticket"); String displayName = queryMap.get("displayname"); String ajaxSessionIdStr = queryMap.get("sess"); - String console_url = queryMap.get("consoleurl"); - String console_host_session = queryMap.get("sessionref"); - String vm_locale = queryMap.get("locale"); + String consoleUrl = queryMap.get("consoleurl"); + String consoleHostSession = queryMap.get("sessionref"); + String vmLocale = queryMap.get("locale"); String hypervHost = queryMap.get("hypervHost"); String username = queryMap.get("username"); String password = queryMap.get("password"); String sourceIP = queryMap.get("sourceIP"); String websocketUrl = queryMap.get("websocketUrl"); String sessionUuid = queryMap.get("sessionUuid"); + String clientIp = session.getRemoteAddress().getAddress().getHostAddress(); if (tag == null) tag = ""; @@ -104,7 +106,7 @@ public class ConsoleProxyNoVNCHandler extends WebSocketHandler { try { port = Integer.parseInt(portStr); } catch (NumberFormatException e) { - logger.warn("Invalid number parameter in query string: " + portStr); + logger.error("Invalid port value in query string: {}. Expected a number.", portStr, e); throw new IllegalArgumentException(e); } @@ -112,12 +114,12 @@ public class ConsoleProxyNoVNCHandler extends WebSocketHandler { try { ajaxSessionId = Long.parseLong(ajaxSessionIdStr); } catch (NumberFormatException e) { - logger.warn("Invalid number parameter in query string: " + ajaxSessionIdStr); + logger.error("Invalid ajaxSessionId (sess) value in query string: {}. Expected a number.", ajaxSessionIdStr, e); throw new IllegalArgumentException(e); } } - if (! checkSessionSourceIp(session, sourceIP)) { + if (!checkSessionSourceIp(session, sourceIP, clientIp)) { return; } @@ -129,14 +131,17 @@ public class ConsoleProxyNoVNCHandler extends WebSocketHandler { param.setClientTag(tag); param.setTicket(ticket); param.setClientDisplayName(displayName); - param.setClientTunnelUrl(console_url); - param.setClientTunnelSession(console_host_session); - param.setLocale(vm_locale); + param.setClientTunnelUrl(consoleUrl); + param.setClientTunnelSession(consoleHostSession); + param.setLocale(vmLocale); param.setHypervHost(hypervHost); param.setUsername(username); param.setPassword(password); param.setWebsocketUrl(websocketUrl); param.setSessionUuid(sessionUuid); + param.setSourceIP(sourceIP); + param.setClientIp(clientIp); + if (queryMap.containsKey("extraSecurityToken")) { param.setExtraSecurityToken(queryMap.get("extraSecurityToken")); } @@ -144,8 +149,9 @@ public class ConsoleProxyNoVNCHandler extends WebSocketHandler { param.setClientProvidedExtraSecurityToken(queryMap.get("extra")); } viewer = ConsoleProxy.getNoVncViewer(param, ajaxSessionIdStr, session); + logger.info("Viewer has been created successfully [session UUID: {}, client IP: {}].", sessionUuid, clientIp); } catch (Exception e) { - logger.warn("Failed to create viewer due to " + e.getMessage(), e); + logger.error("Failed to create viewer [session UUID: {}, client IP: {}] due to {}.", sessionUuid, clientIp, e.getMessage(), e); return; } finally { if (viewer == null) { @@ -154,32 +160,35 @@ public class ConsoleProxyNoVNCHandler extends WebSocketHandler { } } - private boolean checkSessionSourceIp(final Session session, final String sourceIP) throws IOException { - // Verify source IP - String sessionSourceIP = session.getRemoteAddress().getAddress().getHostAddress(); - logger.info("Get websocket connection request from remote IP : " + sessionSourceIP); - if (ConsoleProxy.isSourceIpCheckEnabled && (sessionSourceIP == null || ! sessionSourceIP.equals(sourceIP))) { - logger.warn("Failed to access console as the source IP to request the console is " + sourceIP); + private boolean checkSessionSourceIp(final Session session, final String sourceIP, String sessionSourceIP) throws IOException { + logger.info("Verifying session source IP {} from WebSocket connection request.", sessionSourceIP); + if (ConsoleProxy.isSourceIpCheckEnabled && (sessionSourceIP == null || !sessionSourceIP.equals(sourceIP))) { + logger.warn("Failed to access console as the source IP to request the console is {}.", sourceIP); session.disconnect(); return false; } + logger.debug("Session source IP {} has been verified successfully.", sessionSourceIP); return true; } @OnWebSocketClose public void onClose(Session session, int statusCode, String reason) throws IOException, InterruptedException { + String sessionSourceIp = session.getRemoteAddress().getAddress().getHostAddress(); + logger.debug("Closing WebSocket session [source IP: {}, status code: {}].", sessionSourceIp, statusCode); if (viewer != null) { ConsoleProxy.removeViewer(viewer); } + logger.debug("WebSocket session [source IP: {}, status code: {}] closed successfully.", sessionSourceIp, statusCode); } @OnWebSocketFrame public void onFrame(Frame f) throws IOException { + logger.trace("Sending client [ID: {}] frame of {} bytes.", viewer.getClientId(), f.getPayloadLength()); viewer.sendClientFrame(f); } @OnWebSocketError public void onError(Throwable cause) { - logger.error("Error on websocket", cause); + logger.error("Error on WebSocket [client ID: {}, session UUID: {}].", cause, viewer.getClientId(), viewer.getSessionUuid()); } } diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyNoVNCServer.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyNoVNCServer.java index f65754169f6..3d94ed26b0b 100644 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyNoVNCServer.java +++ b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyNoVNCServer.java @@ -22,7 +22,8 @@ import java.nio.file.Files; import java.nio.file.Path; import java.security.KeyStore; -import com.cloud.consoleproxy.util.Logger; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.eclipse.jetty.server.HttpConfiguration; import org.eclipse.jetty.server.HttpConnectionFactory; @@ -34,7 +35,7 @@ import org.eclipse.jetty.util.ssl.SslContextFactory; public class ConsoleProxyNoVNCServer { - protected static Logger LOGGER = Logger.getLogger(ConsoleProxyNoVNCServer.class); + protected static Logger LOGGER = LogManager.getLogger(ConsoleProxyNoVNCServer.class); public static final int WS_PORT = 8080; public static final int WSS_PORT = 8443; private static final String VNC_CONF_FILE_LOCATION = "/root/vncport"; diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyNoVncClient.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyNoVncClient.java index cf9e3cfddcc..fece5bfaa22 100644 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyNoVncClient.java +++ b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyNoVncClient.java @@ -75,9 +75,9 @@ public class ConsoleProxyNoVncClient implements ConsoleProxyClient { @Override public boolean isFrontEndAlive() { - if (!connectionAlive || System.currentTimeMillis() - - getClientLastFrontEndActivityTime() > ConsoleProxy.VIEWER_LINGER_SECONDS * 1000) { - logger.info("Front end has been idle for too long"); + long unusedTime = System.currentTimeMillis() - getClientLastFrontEndActivityTime(); + if (!connectionAlive || unusedTime > ConsoleProxy.VIEWER_LINGER_SECONDS * 1000) { + logger.info("Front end has been idle for too long ({} ms).", unusedTime); return false; } return true; @@ -95,23 +95,24 @@ public class ConsoleProxyNoVncClient implements ConsoleProxyClient { client = new NoVncClient(); connectionAlive = true; this.sessionUuid = param.getSessionUuid(); + String clientSourceIp = param.getClientIp(); + logger.debug("Initializing client from IP {}.", clientSourceIp); updateFrontEndActivityTime(); Thread worker = new Thread(new Runnable() { public void run() { try { - String tunnelUrl = param.getClientTunnelUrl(); String tunnelSession = param.getClientTunnelSession(); String websocketUrl = param.getWebsocketUrl(); connectClientToVNCServer(tunnelUrl, tunnelSession, websocketUrl); - - authenticateToVNCServer(); + authenticateToVNCServer(clientSourceIp); int readBytes; byte[] b; while (connectionAlive) { + logger.trace("Connection with client [{}] [IP: {}] is alive.", clientId, clientSourceIp); if (client.isVncOverWebSocketConnection()) { if (client.isVncOverWebSocketConnectionOpen()) { updateFrontEndActivityTime(); @@ -122,7 +123,7 @@ public class ConsoleProxyNoVncClient implements ConsoleProxyClient { int nextBytes = client.getNextBytes(); bytesArr = new byte[nextBytes]; client.readBytes(bytesArr, nextBytes); - logger.trace(String.format("Read [%s] bytes from client [%s]", nextBytes, clientId)); + logger.trace("Read [{}] bytes from client [{}].", nextBytes, clientId); if (nextBytes > 0) { session.getRemote().sendBytes(ByteBuffer.wrap(bytesArr)); updateFrontEndActivityTime(); @@ -132,7 +133,7 @@ public class ConsoleProxyNoVncClient implements ConsoleProxyClient { } else { b = new byte[100]; readBytes = client.read(b); - logger.trace(String.format("Read [%s] bytes from client [%s]", readBytes, clientId)); + logger.trace("Read [{}] bytes from client [{}].", readBytes, clientId); if (readBytes == -1 || (readBytes > 0 && !sendReadBytesToNoVNC(b, readBytes))) { connectionAlive = false; } @@ -143,7 +144,7 @@ public class ConsoleProxyNoVncClient implements ConsoleProxyClient { logger.error("Error on sleep for vnc sessions", e); } } - logger.info(String.format("Connection with client [%s] is dead.", clientId)); + logger.info("Connection with client [{}] [IP: {}] is dead.", clientId, clientSourceIp); } catch (IOException e) { logger.error("Error on VNC client", e); } @@ -158,7 +159,7 @@ public class ConsoleProxyNoVncClient implements ConsoleProxyClient { session.getRemote().sendBytes(ByteBuffer.wrap(b, 0, readBytes)); updateFrontEndActivityTime(); } catch (WebSocketException | IOException e) { - logger.debug("Connection exception", e); + logger.error("VNC server connection exception.", e); return false; } return true; @@ -176,20 +177,24 @@ public class ConsoleProxyNoVncClient implements ConsoleProxyClient { * * Reference: https://github.com/rfbproto/rfbproto/blob/master/rfbproto.rst#7protocol-messages */ - private void authenticateToVNCServer() throws IOException { + private void authenticateToVNCServer(String clientSourceIp) throws IOException { if (client.isVncOverWebSocketConnection()) { + logger.debug("Authentication skipped for client [{}] [IP: {}] to VNC server due to WebSocket protocol usage.", clientId, clientSourceIp); return; } if (!client.isVncOverNioSocket()) { + logger.debug("Authenticating client [{}] [IP: {}] to VNC server.", clientId, clientSourceIp); String ver = client.handshake(); session.getRemote().sendBytes(ByteBuffer.wrap(ver.getBytes(), 0, ver.length())); byte[] b = client.authenticateTunnel(getClientHostPassword()); session.getRemote().sendBytes(ByteBuffer.wrap(b, 0, 4)); } else { + logger.debug("Authenticating client [{}] [IP: {}] to VNC server through NIO Socket.", clientId, clientSourceIp); authenticateVNCServerThroughNioSocket(); } + logger.debug("Client [{}] [IP: {}] has been authenticated successfully to VNC server.", clientId, clientSourceIp); } /** @@ -233,9 +238,6 @@ public class ConsoleProxyNoVncClient implements ConsoleProxyClient { protected void authenticateVNCServerThroughNioSocket() { handshakePhase(); initialisationPhase(); - if (logger.isDebugEnabled()) { - logger.debug("Authenticated successfully"); - } } /** @@ -289,8 +291,7 @@ public class ConsoleProxyNoVncClient implements ConsoleProxyClient { logger.info(String.format("Connect to VNC over websocket URL: %s", websocketUrl)); ConsoleProxy.ensureRoute(NetUtils.extractHost(websocketUrl)); client.connectToWebSocket(websocketUrl, session); - } else if (tunnelUrl != null && !tunnelUrl.isEmpty() && tunnelSession != null - && !tunnelSession.isEmpty()) { + } else if (StringUtils.isNotBlank(tunnelUrl) && StringUtils.isNotBlank(tunnelSession)) { URI uri = new URI(tunnelUrl); logger.info(String.format("Connect to VNC server via tunnel. url: %s, session: %s", tunnelUrl, tunnelSession)); @@ -304,8 +305,10 @@ public class ConsoleProxyNoVncClient implements ConsoleProxyClient { ConsoleProxy.ensureRoute(getClientHostAddress()); client.connectTo(getClientHostAddress(), getClientHostPort()); } + + logger.info("Connection to VNC server has been established successfully."); } catch (Throwable e) { - logger.error("Unexpected exception", e); + logger.error("Unexpected exception while connecting to VNC server.", e); } } @@ -370,6 +373,7 @@ public class ConsoleProxyNoVncClient implements ConsoleProxyClient { } public void updateFrontEndActivityTime() { + logger.trace("Updating last front end activity time."); lastFrontEndActivityTime = System.currentTimeMillis(); } diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyResourceHandler.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyResourceHandler.java index 949e632786c..8764326b503 100644 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyResourceHandler.java +++ b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyResourceHandler.java @@ -28,10 +28,11 @@ import com.sun.net.httpserver.Headers; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; -import com.cloud.consoleproxy.util.Logger; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; public class ConsoleProxyResourceHandler implements HttpHandler { - protected Logger logger = Logger.getLogger(getClass()); + protected Logger logger = LogManager.getLogger(getClass()); static Map s_mimeTypes; static { diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyThumbnailHandler.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyThumbnailHandler.java index 0103d9fa70e..e2ec7df5d69 100644 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyThumbnailHandler.java +++ b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyThumbnailHandler.java @@ -32,10 +32,11 @@ import com.sun.net.httpserver.Headers; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; -import com.cloud.consoleproxy.util.Logger; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; public class ConsoleProxyThumbnailHandler implements HttpHandler { - protected Logger logger = Logger.getLogger(getClass()); + protected Logger logger = LogManager.getLogger(getClass()); public ConsoleProxyThumbnailHandler() { } diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/rdp/RdpBufferedImageCanvas.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/rdp/RdpBufferedImageCanvas.java index 7fd19a15d2f..3a40b79437b 100644 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/rdp/RdpBufferedImageCanvas.java +++ b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/rdp/RdpBufferedImageCanvas.java @@ -25,10 +25,12 @@ import java.util.List; import com.cloud.consoleproxy.ConsoleProxyRdpClient; import com.cloud.consoleproxy.util.ImageHelper; -import com.cloud.consoleproxy.util.Logger; import com.cloud.consoleproxy.util.TileInfo; import com.cloud.consoleproxy.vnc.FrameBufferCanvas; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + import common.BufferedImageCanvas; public class RdpBufferedImageCanvas extends BufferedImageCanvas implements FrameBufferCanvas { @@ -36,7 +38,7 @@ public class RdpBufferedImageCanvas extends BufferedImageCanvas implements Frame * */ private static final long serialVersionUID = 1L; - protected Logger logger = Logger.getLogger(RdpBufferedImageCanvas.class); + protected Logger logger = LogManager.getLogger(RdpBufferedImageCanvas.class); private final ConsoleProxyRdpClient _rdpClient; diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/util/Logger.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/util/Logger.java deleted file mode 100644 index 042d64977c2..00000000000 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/util/Logger.java +++ /dev/null @@ -1,223 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.consoleproxy.util; - -// logger facility for dynamic switch between console logger used in Applet and log4j based logger -public class Logger { - private static LoggerFactory factory = null; - - public static final int LEVEL_TRACE = 1; - public static final int LEVEL_DEBUG = 2; - public static final int LEVEL_INFO = 3; - public static final int LEVEL_WARN = 4; - public static final int LEVEL_ERROR = 5; - - private Class clazz; - private Logger logger; - - private static int level = LEVEL_INFO; - - public static Logger getLogger(Class clazz) { - return new Logger(clazz); - } - - public static void setFactory(LoggerFactory f) { - factory = f; - } - - public static void setLevel(int l) { - level = l; - } - - public Logger(Class clazz) { - this.clazz = clazz; - } - - protected Logger() { - } - - public boolean isTraceEnabled() { - if (factory != null) { - if (logger == null) - logger = factory.getLogger(clazz); - - return logger.isTraceEnabled(); - } - return level <= LEVEL_TRACE; - } - - public boolean isDebugEnabled() { - if (factory != null) { - if (logger == null) - logger = factory.getLogger(clazz); - - return logger.isDebugEnabled(); - } - return level <= LEVEL_DEBUG; - } - - public boolean isInfoEnabled() { - if (factory != null) { - if (logger == null) - logger = factory.getLogger(clazz); - - return logger.isInfoEnabled(); - } - return level <= LEVEL_INFO; - } - - public void trace(Object message) { - - if (factory != null) { - if (logger == null) - logger = factory.getLogger(clazz); - - logger.trace(message); - } else { - if (level <= LEVEL_TRACE) - System.out.println(message); - } - } - - public void trace(Object message, Throwable exception) { - if (factory != null) { - if (logger == null) - logger = factory.getLogger(clazz); - - logger.trace(message, exception); - } else { - if (level <= LEVEL_TRACE) { - System.out.println(message); - if (exception != null) { - exception.printStackTrace(System.out); - } - } - } - } - - public void info(Object message) { - if (factory != null) { - if (logger == null) - logger = factory.getLogger(clazz); - - logger.info(message); - } else { - if (level <= LEVEL_INFO) - System.out.println(message); - } - } - - public void info(Object message, Throwable exception) { - if (factory != null) { - if (logger == null) - logger = factory.getLogger(clazz); - - logger.info(message, exception); - } else { - if (level <= LEVEL_INFO) { - System.out.println(message); - if (exception != null) { - exception.printStackTrace(System.out); - } - } - } - } - - public void debug(Object message) { - if (factory != null) { - if (logger == null) - logger = factory.getLogger(clazz); - - logger.debug(message); - } else { - if (level <= LEVEL_DEBUG) - System.out.println(message); - } - } - - public void debug(Object message, Throwable exception) { - if (factory != null) { - if (logger == null) - logger = factory.getLogger(clazz); - - logger.debug(message, exception); - } else { - if (level <= LEVEL_DEBUG) { - System.out.println(message); - if (exception != null) { - exception.printStackTrace(System.out); - } - } - } - } - - public void warn(Object message) { - if (factory != null) { - if (logger == null) - logger = factory.getLogger(clazz); - - logger.warn(message); - } else { - if (level <= LEVEL_WARN) - System.out.println(message); - } - } - - public void warn(Object message, Throwable exception) { - if (factory != null) { - if (logger == null) - logger = factory.getLogger(clazz); - - logger.warn(message, exception); - } else { - if (level <= LEVEL_WARN) { - System.out.println(message); - if (exception != null) { - exception.printStackTrace(System.out); - } - } - } - } - - public void error(Object message) { - if (factory != null) { - if (logger == null) - logger = factory.getLogger(clazz); - - logger.error(message); - } else { - if (level <= LEVEL_ERROR) - System.out.println(message); - } - } - - public void error(Object message, Throwable exception) { - if (factory != null) { - if (logger == null) - logger = factory.getLogger(clazz); - - logger.error(message, exception); - } else { - if (level <= LEVEL_ERROR) { - System.out.println(message); - if (exception != null) { - exception.printStackTrace(System.out); - } - } - } - } -} diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/util/LoggerFactory.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/util/LoggerFactory.java deleted file mode 100644 index 121411adf16..00000000000 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/util/LoggerFactory.java +++ /dev/null @@ -1,21 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. -package com.cloud.consoleproxy.util; - -public interface LoggerFactory { - Logger getLogger(Class clazz); -} diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/util/RawHTTP.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/util/RawHTTP.java index bc47ca03d12..99945c8b4ca 100644 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/util/RawHTTP.java +++ b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/util/RawHTTP.java @@ -38,6 +38,9 @@ import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + // // This file is originally from XenConsole with modifications // @@ -48,7 +51,7 @@ import java.util.regex.Pattern; * connections and import/export operations. */ public final class RawHTTP { - protected Logger logger = Logger.getLogger(getClass()); + protected Logger logger = LogManager.getLogger(getClass()); private static final Pattern END_PATTERN = Pattern.compile("^\r\n$"); private static final Pattern HEADER_PATTERN = Pattern.compile("^([A-Z_a-z0-9-]+):\\s*(.*)\r\n$"); diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/BufferedImageCanvas.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/BufferedImageCanvas.java index 9b86a8fbc66..0a168362ec1 100644 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/BufferedImageCanvas.java +++ b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/BufferedImageCanvas.java @@ -27,16 +27,18 @@ import java.io.IOException; import java.util.List; import com.cloud.consoleproxy.util.ImageHelper; -import com.cloud.consoleproxy.util.Logger; import com.cloud.consoleproxy.util.TileInfo; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + /** * A BuffereImageCanvas component represents frame buffer image on * the screen. It also notifies its subscribers when screen is repainted. */ public class BufferedImageCanvas extends Canvas implements FrameBufferCanvas { private static final long serialVersionUID = 1L; - protected Logger logger = Logger.getLogger(BufferedImageCanvas.class); + protected Logger logger = LogManager.getLogger(BufferedImageCanvas.class); // Offline screen buffer private BufferedImage offlineImage; diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/NoVncClient.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/NoVncClient.java index c5764a994c5..e4bb93711b9 100644 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/NoVncClient.java +++ b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/NoVncClient.java @@ -31,7 +31,6 @@ import java.security.spec.KeySpec; import java.util.Arrays; import java.util.List; -import com.cloud.consoleproxy.util.Logger; import com.cloud.consoleproxy.util.RawHTTP; import com.cloud.consoleproxy.vnc.network.NioSocket; import com.cloud.consoleproxy.vnc.network.NioSocketHandler; @@ -42,7 +41,11 @@ import com.cloud.consoleproxy.vnc.security.VncTLSSecurity; import com.cloud.consoleproxy.websocket.WebSocketReverseProxy; import com.cloud.utils.Pair; import com.cloud.utils.exception.CloudRuntimeException; + import org.apache.commons.lang3.BooleanUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + import org.eclipse.jetty.websocket.api.Session; import javax.crypto.BadPaddingException; @@ -54,7 +57,7 @@ import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; public class NoVncClient { - protected Logger logger = Logger.getLogger(getClass()); + protected Logger logger = LogManager.getLogger(getClass()); private Socket socket; private DataInputStream is; @@ -79,6 +82,7 @@ public class NoVncClient { port = 80; } + logger.info("Connecting to VNC server {}:{} ...", host, port); RawHTTP tunnel = new RawHTTP("CONNECT", host, port, path, session, useSSL); socket = tunnel.connect(); setTunnelSocketStreams(); @@ -86,7 +90,7 @@ public class NoVncClient { public void connectTo(String host, int port) { // Connect to server - logger.info(String.format("Connecting to VNC server %s:%s ...", host, port)); + logger.info("Connecting to VNC server {}:{} ...", host, port); try { NioSocket nioSocket = new NioSocket(host, port); this.nioSocketConnection = new NioSocketHandlerImpl(nioSocket); @@ -175,8 +179,9 @@ public class NoVncClient { is.readFully(buf); String reason = new String(buf, RfbConstants.CHARSET); - logger.error("Authentication to VNC server is failed. Reason: " + reason); - throw new RuntimeException("Authentication to VNC server is failed. Reason: " + reason); + String msg = String.format("Authentication to VNC server has failed. Reason: %s", reason); + logger.error(msg); + throw new RuntimeException(msg); } case RfbConstants.NO_AUTH: { @@ -191,9 +196,9 @@ public class NoVncClient { } default: - logger.error("Unsupported VNC protocol authorization scheme, scheme code: " + authType + "."); - throw new RuntimeException( - "Unsupported VNC protocol authorization scheme, scheme code: " + authType + "."); + String msg = String.format("Unsupported VNC protocol authorization scheme, scheme code: %d.", authType); + logger.error(msg); + throw new RuntimeException(msg); } // Since we've taken care of the auth, we tell the client that there's no auth // going on diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/VncClient.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/VncClient.java index e5a9918d935..05bd01d390e 100644 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/VncClient.java +++ b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/VncClient.java @@ -33,13 +33,15 @@ import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import com.cloud.consoleproxy.ConsoleProxyClientListener; -import com.cloud.consoleproxy.util.Logger; import com.cloud.consoleproxy.util.RawHTTP; import com.cloud.consoleproxy.vnc.packet.client.KeyboardEventPacket; import com.cloud.consoleproxy.vnc.packet.client.MouseEventPacket; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + public class VncClient { - protected static Logger LOGGER = Logger.getLogger(VncClient.class); + protected static Logger LOGGER = LogManager.getLogger(VncClient.class); private Socket socket; private DataInputStream is; diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/VncClientPacketSender.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/VncClientPacketSender.java index 12daca619ce..3d055b4dbb4 100644 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/VncClientPacketSender.java +++ b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/VncClientPacketSender.java @@ -27,7 +27,6 @@ import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.TimeUnit; -import com.cloud.consoleproxy.util.Logger; import com.cloud.consoleproxy.vnc.packet.client.ClientPacket; import com.cloud.consoleproxy.vnc.packet.client.FramebufferUpdateRequestPacket; import com.cloud.consoleproxy.vnc.packet.client.KeyboardEventPacket; @@ -35,8 +34,11 @@ import com.cloud.consoleproxy.vnc.packet.client.MouseEventPacket; import com.cloud.consoleproxy.vnc.packet.client.SetEncodingsPacket; import com.cloud.consoleproxy.vnc.packet.client.SetPixelFormatPacket; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + public class VncClientPacketSender implements Runnable, PaintNotificationListener, KeyListener, MouseListener, MouseMotionListener, FrameBufferUpdateListener { - protected Logger logger = Logger.getLogger(getClass()); + protected Logger logger = LogManager.getLogger(getClass()); // Queue for outgoing packets private final BlockingQueue queue = new ArrayBlockingQueue(30); diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/VncServerPacketReceiver.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/VncServerPacketReceiver.java index effcb7b4599..bbd39754ac3 100644 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/VncServerPacketReceiver.java +++ b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/VncServerPacketReceiver.java @@ -22,12 +22,14 @@ import java.io.DataInputStream; import java.io.IOException; import com.cloud.consoleproxy.ConsoleProxyClientListener; -import com.cloud.consoleproxy.util.Logger; import com.cloud.consoleproxy.vnc.packet.server.FramebufferUpdatePacket; import com.cloud.consoleproxy.vnc.packet.server.ServerCutText; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + public class VncServerPacketReceiver implements Runnable { - protected Logger logger = Logger.getLogger(getClass()); + protected Logger logger = LogManager.getLogger(getClass()); private final VncScreenDescription screen; private BufferedImageCanvas canvas; diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/server/AbstractRect.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/server/AbstractRect.java index 2059278905b..a56ee63d306 100644 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/server/AbstractRect.java +++ b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/server/AbstractRect.java @@ -16,11 +16,12 @@ // under the License. package com.cloud.consoleproxy.vnc.packet.server; -import com.cloud.consoleproxy.util.Logger; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; public abstract class AbstractRect implements Rect { - protected Logger logger = Logger.getLogger(getClass()); + protected Logger logger = LogManager.getLogger(getClass()); protected final int x; protected final int y; diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/server/ServerCutText.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/server/ServerCutText.java index 79ed98cccd0..76e47ab0676 100644 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/server/ServerCutText.java +++ b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/packet/server/ServerCutText.java @@ -19,11 +19,13 @@ package com.cloud.consoleproxy.vnc.packet.server; import java.io.DataInputStream; import java.io.IOException; -import com.cloud.consoleproxy.util.Logger; import com.cloud.consoleproxy.vnc.RfbConstants; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + public class ServerCutText { - protected Logger logger = Logger.getLogger(getClass()); + protected Logger logger = LogManager.getLogger(getClass()); private String content; diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/security/VncAuthSecurity.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/security/VncAuthSecurity.java index 29c29f8ff58..42f109b5cf3 100644 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/security/VncAuthSecurity.java +++ b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/security/VncAuthSecurity.java @@ -16,7 +16,6 @@ // under the License. package com.cloud.consoleproxy.vnc.security; -import com.cloud.consoleproxy.util.Logger; import com.cloud.consoleproxy.vnc.NoVncClient; import com.cloud.consoleproxy.vnc.network.NioSocketHandler; import com.cloud.utils.exception.CloudRuntimeException; @@ -24,12 +23,15 @@ import com.cloud.utils.exception.CloudRuntimeException; import java.io.IOException; import java.nio.ByteBuffer; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + public class VncAuthSecurity implements VncSecurity { private final String vmPass; private static final int VNC_AUTH_CHALLENGE_SIZE = 16; - protected Logger logger = Logger.getLogger(getClass()); + protected Logger logger = LogManager.getLogger(getClass()); public VncAuthSecurity(String vmPass) { this.vmPass = vmPass; diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/security/VncTLSSecurity.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/security/VncTLSSecurity.java index 00497a37828..0bc1355c4fb 100644 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/security/VncTLSSecurity.java +++ b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/vnc/security/VncTLSSecurity.java @@ -16,7 +16,6 @@ // under the License. package com.cloud.consoleproxy.vnc.security; -import com.cloud.consoleproxy.util.Logger; import com.cloud.consoleproxy.vnc.RfbConstants; import com.cloud.consoleproxy.vnc.network.NioSocketHandler; import com.cloud.consoleproxy.vnc.network.NioSocketSSLEngineManager; @@ -29,9 +28,12 @@ import java.io.IOException; import java.security.GeneralSecurityException; import java.util.ArrayList; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + public class VncTLSSecurity implements VncSecurity { - protected Logger logger = Logger.getLogger(getClass()); + protected Logger logger = LogManager.getLogger(getClass()); private SSLContext ctx; private SSLEngine engine; diff --git a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/websocket/WebSocketReverseProxy.java b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/websocket/WebSocketReverseProxy.java index 582fb625f2c..fecbaae38e8 100644 --- a/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/websocket/WebSocketReverseProxy.java +++ b/services/console-proxy/server/src/main/java/com/cloud/consoleproxy/websocket/WebSocketReverseProxy.java @@ -16,7 +16,6 @@ // under the License. package com.cloud.consoleproxy.websocket; -import com.cloud.consoleproxy.util.Logger; import org.eclipse.jetty.websocket.api.Session; import org.java_websocket.client.WebSocketClient; import org.java_websocket.drafts.Draft_6455; @@ -36,6 +35,9 @@ import java.nio.ByteBuffer; import java.security.cert.X509Certificate; import java.util.Collections; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + /** * Acts as a websocket reverse proxy between the remoteSession and the connected endpoint * - Connects to a websocket endpoint and sends the received data to the remoteSession endpoint @@ -51,7 +53,7 @@ public class WebSocketReverseProxy extends WebSocketClient { private static final DefaultExtension defaultExtension = new DefaultExtension(); private static final Draft_6455 draft = new Draft_6455(Collections.singletonList(defaultExtension), Collections.singletonList(protocol)); - protected Logger logger = Logger.getLogger(getClass()); + protected Logger logger = LogManager.getLogger(getClass()); private Session remoteSession; private void acceptAllCerts() {