magnusbaeck / logstash-filter-verifier

Apache License 2.0
192 stars 27 forks source link

Semantics of `-l` flag for the logging changed in Logstash 5.x #41

Closed breml closed 7 years ago

breml commented 7 years ago

With Logstash 5.x (tested with Logstash 5.3.2), the semantics of -l flag changed. The path provided with the -l flag is no longer a file, but a folder, where Logstash puts multiple log files (logstash-plain.log, logstash-slowlog-plain.log, given the default Logstash config (logstash.yml) and log4j2 config (log4j2.properties) are used.

This leads to several exceptions like the following:

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
Sending Logstash's logs to /tmp/011159547 which is now configured via log4j2.properties
2017-05-09 06:09:56,054 main ERROR Unable to create file /tmp/011159547/logstash-plain.log java.io.IOException: Not a directory
    at java.io.UnixFileSystem.createFileExclusively(Native Method)
    at java.io.File.createNewFile(File.java:1012)
    at org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory.createManager(RollingFileManager.java:421)
    at org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory.createManager(RollingFileManager.java:403)
    at org.apache.logging.log4j.core.appender.AbstractManager.getManager(AbstractManager.java:73)
    at org.apache.logging.log4j.core.appender.OutputStreamManager.getManager(OutputStreamManager.java:81)
    at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.getFileManager(RollingFileManager.java:103)
    at org.apache.logging.log4j.core.appender.RollingFileAppender.createAppender(RollingFileAppender.java:191)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:132)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:918)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:858)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:850)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:479)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:219)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:231)
    at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:496)
    at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:566)
    at org.apache.logging.log4j.core.LoggerContext.setConfigLocation(LoggerContext.java:555)
    at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.locateContext(ClassLoaderContextSelector.java:157)
    at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:74)
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:227)
    at org.apache.logging.log4j.core.config.Configurator.initialize(Configurator.java:157)
    at org.apache.logging.log4j.core.config.Configurator.initialize(Configurator.java:130)
    at org.apache.logging.log4j.core.config.Configurator.initialize(Configurator.java:100)
    at org.apache.logging.log4j.core.config.Configurator.initialize(Configurator.java:187)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.jruby.javasupport.JavaMethod.invokeDirectWithExceptionHandling(JavaMethod.java:466)
    at org.jruby.javasupport.JavaMethod.invokeStaticDirect(JavaMethod.java:368)
    at org.jruby.java.invokers.StaticMethodInvoker.call(StaticMethodInvoker.java:61)
    at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:346)
    at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:204)
    at org.jruby.ast.CallTwoArgNode.interpret(CallTwoArgNode.java:59)
    at org.jruby.ast.ClassVarAsgnNode.interpret(ClassVarAsgnNode.java:92)
    at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)
    at org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
    at org.jruby.ast.IfNode.interpret(IfNode.java:116)
    at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)
    at org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
    at org.jruby.ast.IfNode.interpret(IfNode.java:116)
    at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)
    at org.jruby.evaluator.ASTInterpreter.INTERPRET_BLOCK(ASTInterpreter.java:112)
    at org.jruby.runtime.Interpreted19Block.evalBlockBody(Interpreted19Block.java:206)
    at org.jruby.runtime.Interpreted19Block.yield(Interpreted19Block.java:157)
    at org.jruby.runtime.Block.yield(Block.java:142)
    at org.jruby.ext.thread.Mutex.synchronize(Mutex.java:149)
    at org.jruby.ext.thread.Mutex$INVOKER$i$0$0$synchronize.call(Mutex$INVOKER$i$0$0$synchronize.gen)
    at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:316)
    at org.jruby.runtime.callsite.CachingCallSite.callBlock(CachingCallSite.java:145)
    at org.jruby.runtime.callsite.CachingCallSite.callIter(CachingCallSite.java:154)
    at org.jruby.ast.CallNoArgBlockNode.interpret(CallNoArgBlockNode.java:64)
    at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)
    at org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:74)
    at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:182)
    at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:203)
    at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:326)
    at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:170)
    at org.jruby.ast.CallOneArgNode.interpret(CallOneArgNode.java:57)
    at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)
    at org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
    at org.jruby.ast.IfNode.interpret(IfNode.java:118)
    at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)
    at org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
    at org.jruby.ast.RescueNode.executeBody(RescueNode.java:221)
    at org.jruby.ast.RescueNode.interpret(RescueNode.java:116)
    at org.jruby.ast.EnsureNode.interpret(EnsureNode.java:96)
    at org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:74)
    at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:139)
    at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:187)
    at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:306)
    at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:136)
    at org.jruby.ast.VCallNode.interpret(VCallNode.java:88)
    at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)
    at org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
    at org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:74)
    at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:204)
    at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:211)
    at org.jruby.runtime.callsite.SuperCallSite.cacheAndCall(SuperCallSite.java:366)
    at org.jruby.runtime.callsite.SuperCallSite.callBlock(SuperCallSite.java:192)
    at org.jruby.runtime.callsite.SuperCallSite.call(SuperCallSite.java:197)
    at org.jruby.runtime.callsite.SuperCallSite.callVarargs(SuperCallSite.java:108)
    at org.jruby.ast.SuperNode.interpret(SuperNode.java:115)
    at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)
    at org.jruby.ast.BlockNode.interpret(BlockNode.java:71)
    at org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:74)
    at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:182)
    at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:203)
    at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:326)
    at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:170)
    at org.jruby.ast.CallOneArgNode.interpret(CallOneArgNode.java:57)
    at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)
    at org.jruby.ast.RescueNode.executeBody(RescueNode.java:221)
    at org.jruby.ast.RescueNode.interpret(RescueNode.java:116)
    at org.jruby.ast.BeginNode.interpret(BeginNode.java:83)
    at org.jruby.ast.NewlineNode.interpret(NewlineNode.java:105)
    at org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:74)
    at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:225)
    at org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:219)
    at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:346)
    at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:204)
    at home.lubr.code.bosh.elk_minus_boshrelease.src.logstash_dot_conf_dot_d.logstash.logstash_minus_5_dot_3_dot_2.lib.bootstrap.environment.__file__(/home/lubr/code/bosh/elk-boshrelease/src/logstash.conf.d/logstash/logstash-5.3.2/lib/bootstrap/environment.rb:71)
    at home.lubr.code.bosh.elk_minus_boshrelease.src.logstash_dot_conf_dot_d.logstash.logstash_minus_5_dot_3_dot_2.lib.bootstrap.environment.load(/home/lubr/code/bosh/elk-boshrelease/src/logstash.conf.d/logstash/logstash-5.3.2/lib/bootstrap/environment.rb)
    at org.jruby.Ruby.runScript(Ruby.java:857)
    at org.jruby.Ruby.runScript(Ruby.java:850)
    at org.jruby.Ruby.runNormally(Ruby.java:729)
    at org.jruby.Ruby.runFromMain(Ruby.java:578)
    at org.jruby.Main.doRunFromMain(Main.java:393)
    at org.jruby.Main.internalRun(Main.java:288)
    at org.jruby.Main.run(Main.java:217)
    at org.jruby.Main.main(Main.java:197)

and to the following errors:

2017-05-09 06:09:56,114 main ERROR Null object returned for RollingFile in Appenders.
2017-05-09 06:09:56,115 main ERROR Null object returned for RollingFile in Appenders.
2017-05-09 06:09:56,119 main ERROR Null object returned for RollingFile in Appenders.
2017-05-09 06:09:56,121 main ERROR Null object returned for RollingFile in Appenders.
2017-05-09 06:09:56,123 main ERROR Unable to locate appender "plain_rolling" for logger config "root"
2017-05-09 06:09:56,124 main ERROR Unable to locate appender "plain_rolling_slowlog" for logger config "slowlog"

Used command:

/home/lubr/code/go/bin/logstash-filter-verifier --sockets  --logstash-path="logstash/logstash-5.3.2/bin/logstash" --loglevel "DEBUG" --logstash-output cases/shipper logstash/config/shipper/filter/*.conf

The relevant sections in the souce code are at: