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."); + } } /**