From 51274c9b240795c8dcc89b3c8cff1144111e7075 Mon Sep 17 00:00:00 2001 From: Robert Muir Date: Fri, 25 Sep 2015 14:46:12 -0400 Subject: [PATCH] Don't log multi-megabyte guice exceptions. Instead just log the same thing we print to the startup console for that case (magic logic), it sucks to do this, but guice exceptions are too much. All other non-guice exceptions will still be fully logged. Closes #13782 --- .../org/elasticsearch/bootstrap/Bootstrap.java | 16 +++++++++++++++- .../elasticsearch/bootstrap/StartupError.java | 6 +++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/elasticsearch/bootstrap/Bootstrap.java b/core/src/main/java/org/elasticsearch/bootstrap/Bootstrap.java index e8fb638bf3140..0bf3f39526b76 100644 --- a/core/src/main/java/org/elasticsearch/bootstrap/Bootstrap.java +++ b/core/src/main/java/org/elasticsearch/bootstrap/Bootstrap.java @@ -27,6 +27,7 @@ import org.elasticsearch.common.cli.CliTool; import org.elasticsearch.common.cli.Terminal; import org.elasticsearch.common.collect.Tuple; +import org.elasticsearch.common.inject.CreationException; import org.elasticsearch.common.lease.Releasables; import org.elasticsearch.common.logging.ESLogger; import org.elasticsearch.common.logging.Loggers; @@ -40,6 +41,8 @@ import org.elasticsearch.node.NodeBuilder; import org.elasticsearch.node.internal.InternalSettingsPreparer; +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; import java.util.Locale; import java.util.concurrent.CountDownLatch; @@ -281,7 +284,18 @@ static void init(String[] args) throws Throwable { if (INSTANCE.node != null) { logger = Loggers.getLogger(Bootstrap.class, INSTANCE.node.settings().get("name")); } - logger.error("Exception", e); + // HACK, it sucks to do this, but we will run users out of disk space otherwise + if (e instanceof CreationException) { + // guice: log the shortened exc to the log file + ByteArrayOutputStream os = new ByteArrayOutputStream(); + PrintStream ps = new PrintStream(os, false, "UTF-8"); + new StartupError(e).printStackTrace(ps); + ps.flush(); + logger.error("Guice Exception: {}", os.toString("UTF-8")); + } else { + // full exception + logger.error("Exception", e); + } // re-enable it if appropriate, so they can see any logging during the shutdown process if (foreground) { Loggers.enableConsoleLogging(); diff --git a/core/src/main/java/org/elasticsearch/bootstrap/StartupError.java b/core/src/main/java/org/elasticsearch/bootstrap/StartupError.java index 9a5df8ebcad74..781aac31f653d 100644 --- a/core/src/main/java/org/elasticsearch/bootstrap/StartupError.java +++ b/core/src/main/java/org/elasticsearch/bootstrap/StartupError.java @@ -97,7 +97,11 @@ public void printStackTrace(PrintStream s) { linesWritten++; } } - s.println("Refer to the log for complete error details."); + // if its a guice exception, the whole thing really will not be in the log, its megabytes. + // refer to the hack in bootstrap, where we don't log it + if (originalCause instanceof CreationException == false) { + s.println("Refer to the log for complete error details."); + } } /**