Graylog2 / Graylog2/graylog2-server
Improve logging for failed output startups
- Dominant language
- Java
- Stars
- 8.1k
- Forks
- 1.1k
- Avg merge
- 1d 20h
- Merged PRs (30d)
- 217
Description
## Description
A failing output is currently logging a pretty large message that includes details about the dependency injection failure:
Failing output start backtrace
```
2019-04-12 17:58:20,731 INFO : org.graylog.enterprise.integrations.outputs.forwarder.ForwarderOutput - Launching Forwarder output [FFWD/5c894dddd2b6ce206b36b5b7].
2019-04-12 17:58:20,732 ERROR: org.graylog.enterprise.integrations.outputs.forwarder.ForwarderLicenseChecker - The Graylog Forwarder output has been stopped, because a valid enterprise license was not found. A valid license is required to use this feature.
2019-04-12 17:58:20,754 ERROR: org.graylog2.outputs.OutputRegistry - Unable to fetch output 5c894dddd2b6ce206b36b5b7, fault #1
com.google.common.util.concurrent.UncheckedExecutionException: com.google.inject.ProvisionException: Unable to provision, see the following errors:
1) Error injecting constructor, org.graylog2.plugin.outputs.MessageOutputConfigurationException: The Graylog Forwarder output has been stopped, because a valid enterprise license was not found. A valid license is required to use this feature.
at org.graylog.enterprise.integrations.outputs.forwarder.ForwarderOutput.(ForwarderOutput.java:111)
while locating org.graylog.enterprise.integrations.outputs.forwarder.ForwarderOutput annotated with @com.google.inject.internal.UniqueAnnotations$Internal(value=1)
1 error
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2050) ~[guava-25.1-jre.jar:?]
at com.google.common.cache.LocalCache.get(LocalCache.java:3951) ~[guava-25.1-jre.jar:?]
at com.google.common.cache.LocalCache$LocalManualCache.get(LocalCache.java:4870) ~[guava-25.1-jre.jar:?]
at org.graylog2.outputs.OutputRegistry.getOutputForIdAndStream(OutputRegistry.java:102) [classes/:?]
at org.graylog2.outputs.OutputRouter.getMessageOutputsForStream(OutputRouter.java:42) [classes/:?]
at org.graylog2.outputs.OutputRouter.getStreamOutputsForMessage(OutputRouter.java:62) [classes/:?]
at org.graylog2.buffers.processors.OutputBufferProcessor.onEvent(OutputBufferProcessor.java:132) [classes/:?]
at org.graylog2.buffers.processors.OutputBufferProcessor.onEvent(OutputBufferProcessor.java:51) [classes/:?]
at com.lmax.disruptor.WorkProcessor.run(WorkProcessor.java:143) [disruptor-3.4.2.jar:?]
at com.codahale.metrics.InstrumentedThreadFactory$InstrumentedRunnable.run(InstrumentedThreadFactory.java:66) [metrics-core-4.0.3.jar:4.0.3]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_201]
Caused by: com.google.inject.ProvisionException: Unable to provision, see the following errors:
1) Error injecting constructor, org.graylog2.plugin.outputs.MessageOutputConfigurationException: The Graylog Forwarder output has been stopped, because a valid enterprise license was not found. A valid license is required to use this feature.
at org.graylog.enterprise.integrations.outputs.forwarder.ForwarderOutput.(ForwarderOutput.java:111)
while locating org.graylog.enterprise.integrations.outputs.forwarder.ForwarderOutput annotated with @com.google.inject.internal.UniqueAnnotations$Internal(value=1)
1 error
at com.google.inject.internal.InternalProvisionException.toProvisionException(InternalProvisionException.java:226) ~[guice-4.2.0.jar:?]
at com.google.inject.internal.InjectorImpl$1.get(InjectorImpl.java:1053) ~[guice-4.2.0.jar:?]
at com.google.inject.assistedinject.FactoryProvider2.invoke(FactoryProvider2.java:836) ~[guice-assistedinject-4.2.0.jar:?]
at com.sun.proxy.$Proxy137.create(Unknown Source) ~[?:?]
at org.graylog2.outputs.MessageOutputFactory.fromStreamOutput(MessageOutputFactory.java:60) ~[classes/:?]
at org.graylog2.outputs.OutputRegistry.launchOutput(OutputRegistry.java:143) ~[classes/:?]
at org.graylog2.outputs.OutputRegistry$2.call(OutputRegistry.java:137) ~[classes/:?]
at org.graylog2.outputs.OutputRegistry$2.call(OutputRegistry.java:133) ~[classes/:?]
at com.google.common.cache.LocalCache$LocalManualCache$1.load(LocalCache.java:4875) ~[guava-25.1-jre.jar:?]
at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3527) ~[guava-25.1-jre.jar:?]
at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2276) ~[guava-25.1-jre.jar:?]
at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2154) ~[guava-25.1-jre.jar:?]
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2044) ~[guava-25.1-jre.jar:?]
... 10 more
Caused by: org.graylog2.plugin.outputs.MessageOutputConfigurationException: The Graylog Forwarder output has been stopped, because a valid enterprise license was not found. A valid license is required to use this feature.
at org.graylog.enterprise.integrations.outputs.forwarder.ForwarderOutput.(ForwarderOutput.java:123) ~[classes/:?]
at org.graylog.enterprise.integrations.outputs.forwarder.ForwarderOutput$$FastClassByGuice$$ba121982.newInstance() ~[classes/:?]
at com.google.inject.internal.DefaultConstructionProxyFactory$FastClassProxy.newInstance(DefaultConstructionProxyFactory.java:89) ~[guice-4.2.0.jar:?]
at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:114) ~[guice-4.2.0.jar:?]
at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:91) ~[guice-4.2.0.jar:?]
at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:306) ~[guice-4.2.0.jar:?]
at com.google.inject.internal.InjectorImpl$1.get(InjectorImpl.java:1050) ~[guice-4.2.0.jar:?]
at com.google.inject.assistedinject.FactoryProvider2.invoke(FactoryProvider2.java:836) ~[guice-assistedinject-4.2.0.jar:?]
at com.sun.proxy.$Proxy137.create(Unknown Source) ~[?:?]
at org.graylog2.outputs.MessageOutputFactory.fromStreamOutput(MessageOutputFactory.java:60) ~[classes/:?]
at org.graylog2.outputs.OutputRegistry.launchOutput(OutputRegistry.java:143) ~[classes/:?]
at org.graylog2.outputs.OutputRegistry$2.call(OutputRegistry.java:137) ~[classes/:?]
at org.graylog2.outputs.OutputRegistry$2.call(OutputRegistry.java:133) ~[classes/:?]
at com.google.common.cache.LocalCache$LocalManualCache$1.load(LocalCache.java:4875) ~[guava-25.1-jre.jar:?]
at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3527) ~[guava-25.1-jre.jar:?]
at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2276) ~[guava-25.1-jre.jar:?]
at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2154) ~[guava-25.1-jre.jar:?]
at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2044) ~[guava-25.1-jre.jar:?]
... 10 more
```
This can be hard to read especially for users. Let's check if there is a way to make this error message a bit more concise, maybe only logging the actual exception that caused the failure. We can still log the full exception if `LOG.isDebugEnabled()` is true.
## Steps to Reproduce (for bugs)
1. Configure an output that will fail to start
2. Check logs
## Your Environment
* Graylog Version: 3.1.0-SNAPSHOT
Contributor guide
Assessment
This issue has not been assessed yet.