logstash-core 5.0.0.alpha2.snapshot2-java → 5.0.0.alpha3-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of logstash-core might be problematic. Click here for more details.

Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/lib/logstash-core/version.rb +1 -1
  3. data/lib/logstash/agent.rb +48 -31
  4. data/lib/logstash/api/{lib/helpers/app_helpers.rb → app_helpers.rb} +0 -0
  5. data/lib/logstash/api/command_factory.rb +34 -0
  6. data/lib/logstash/api/commands/base.rb +25 -0
  7. data/lib/logstash/api/commands/stats.rb +105 -0
  8. data/lib/logstash/api/commands/system/basicinfo_command.rb +23 -0
  9. data/lib/logstash/api/commands/system/plugins_command.rb +35 -0
  10. data/lib/logstash/api/modules/base.rb +43 -0
  11. data/lib/logstash/api/modules/node.rb +24 -0
  12. data/lib/logstash/api/modules/node_stats.rb +59 -0
  13. data/lib/logstash/api/modules/plugins.rb +15 -0
  14. data/lib/logstash/api/modules/root.rb +15 -0
  15. data/lib/logstash/api/modules/stats.rb +63 -0
  16. data/lib/logstash/api/rack_app.rb +33 -0
  17. data/lib/logstash/api/service.rb +73 -0
  18. data/lib/logstash/config/config_ast.rb +23 -18
  19. data/lib/logstash/config/loader.rb +4 -4
  20. data/lib/logstash/config/mixin.rb +10 -21
  21. data/lib/logstash/environment.rb +29 -0
  22. data/lib/logstash/filters/base.rb +2 -2
  23. data/lib/logstash/inputs/base.rb +2 -2
  24. data/lib/logstash/instrument/collector.rb +1 -1
  25. data/lib/logstash/instrument/metric_store.rb +11 -1
  26. data/lib/logstash/instrument/periodic_poller/base.rb +2 -0
  27. data/lib/logstash/instrument/periodic_poller/jvm.rb +47 -2
  28. data/lib/logstash/logging/json.rb +21 -0
  29. data/lib/logstash/output_delegator.rb +2 -2
  30. data/lib/logstash/patches/clamp.rb +69 -0
  31. data/lib/logstash/pipeline.rb +36 -69
  32. data/lib/logstash/plugin.rb +1 -1
  33. data/lib/logstash/runner.rb +171 -146
  34. data/lib/logstash/settings.rb +267 -0
  35. data/lib/logstash/util/decorators.rb +6 -6
  36. data/lib/logstash/util/java_version.rb +1 -10
  37. data/lib/logstash/util/thread_dump.rb +55 -0
  38. data/lib/logstash/util/worker_threads_default_printer.rb +2 -2
  39. data/lib/logstash/version.rb +1 -1
  40. data/lib/logstash/webserver.rb +15 -49
  41. data/locales/en.yml +22 -25
  42. data/logstash-core.gemspec +3 -3
  43. data/spec/api/lib/api/node_spec.rb +2 -2
  44. data/spec/api/lib/api/node_stats_spec.rb +32 -57
  45. data/spec/api/lib/api/plugins_spec.rb +3 -3
  46. data/spec/api/lib/api/root_spec.rb +2 -2
  47. data/spec/api/lib/api/support/resource_dsl_methods.rb +47 -0
  48. data/spec/api/lib/commands/stats.rb +47 -0
  49. data/spec/api/spec_helper.rb +21 -21
  50. data/spec/conditionals_spec.rb +113 -113
  51. data/spec/logstash/agent_spec.rb +85 -68
  52. data/spec/logstash/config/config_ast_spec.rb +4 -2
  53. data/spec/logstash/config/mixin_spec.rb +33 -7
  54. data/spec/logstash/filters/base_spec.rb +16 -16
  55. data/spec/logstash/inputs/base_spec.rb +8 -8
  56. data/spec/logstash/instrument/periodic_poller/jvm_spec.rb +45 -0
  57. data/spec/logstash/output_delegator_spec.rb +2 -0
  58. data/spec/logstash/pipeline_reporter_spec.rb +5 -1
  59. data/spec/logstash/pipeline_spec.rb +75 -30
  60. data/spec/logstash/plugin_spec.rb +2 -2
  61. data/spec/logstash/runner_spec.rb +112 -25
  62. data/spec/logstash/setting_spec.rb +130 -0
  63. data/spec/logstash/settings_spec.rb +62 -0
  64. metadata +37 -43
  65. data/lib/logstash/api/init.ru +0 -31
  66. data/lib/logstash/api/lib/app.rb +0 -40
  67. data/lib/logstash/api/lib/app/command.rb +0 -29
  68. data/lib/logstash/api/lib/app/command_factory.rb +0 -29
  69. data/lib/logstash/api/lib/app/commands/stats/events_command.rb +0 -13
  70. data/lib/logstash/api/lib/app/commands/stats/hotthreads_command.rb +0 -120
  71. data/lib/logstash/api/lib/app/commands/stats/memory_command.rb +0 -25
  72. data/lib/logstash/api/lib/app/commands/system/basicinfo_command.rb +0 -15
  73. data/lib/logstash/api/lib/app/commands/system/plugins_command.rb +0 -28
  74. data/lib/logstash/api/lib/app/modules/node.rb +0 -25
  75. data/lib/logstash/api/lib/app/modules/node_stats.rb +0 -51
  76. data/lib/logstash/api/lib/app/modules/plugins.rb +0 -15
  77. data/lib/logstash/api/lib/app/modules/stats.rb +0 -21
  78. data/lib/logstash/api/lib/app/root.rb +0 -13
  79. data/lib/logstash/api/lib/app/service.rb +0 -61
  80. data/lib/logstash/api/lib/app/stats.rb +0 -56
  81. data/lib/logstash/util/defaults_printer.rb +0 -31
  82. data/spec/api/lib/api/stats_spec.rb +0 -19
  83. data/spec/api/lib/commands/events_spec.rb +0 -17
  84. data/spec/api/lib/commands/jvm_spec.rb +0 -45
  85. data/spec/logstash/util/defaults_printer_spec.rb +0 -50
  86. data/spec/logstash/util/worker_threads_default_printer_spec.rb +0 -45
@@ -71,7 +71,7 @@ class LogStash::Plugin
71
71
  # close is called during shutdown, after the plugin worker
72
72
  # main task terminates
73
73
  def do_close
74
- @logger.debug("closing", :plugin => self)
74
+ @logger.debug("closing", :plugin => self.class.name)
75
75
  close
76
76
  end
77
77
 
@@ -3,7 +3,8 @@ Thread.abort_on_exception = true
3
3
  Encoding.default_external = Encoding::UTF_8
4
4
  $DEBUGLIST = (ENV["DEBUG"] || "").split(",")
5
5
 
6
- require "clamp" # gem 'clamp'
6
+ require "clamp"
7
+ require "cabin"
7
8
  require "net/http"
8
9
  require "logstash/environment"
9
10
 
@@ -12,123 +13,141 @@ LogStash::Environment.load_locale!
12
13
  require "logstash/namespace"
13
14
  require "logstash/agent"
14
15
  require "logstash/config/defaults"
16
+ require "logstash/shutdown_watcher"
17
+ require "logstash/patches/clamp"
18
+ require "logstash/settings"
19
+
20
+ class LogStash::Runner < Clamp::StrictCommand
21
+ # The `path.settings` need to be defined in the runner instead of the `logstash-core/lib/logstash/environment.r`
22
+ # because the `Environment::LOGSTASH_HOME` doesn't exist in the context of the `logstash-core` gem.
23
+ #
24
+ # See issues https://github.com/elastic/logstash/issues/5361
25
+ LogStash::SETTINGS.register(LogStash::Setting::String.new("path.settings", ::File.join(LogStash::Environment::LOGSTASH_HOME, "config")))
26
+
27
+ # Node Settings
28
+ option ["-n", "--node.name"], "NAME",
29
+ I18n.t("logstash.runner.flag.node_name"),
30
+ :attribute_name => "node.name",
31
+ :default => LogStash::SETTINGS.get_default("node.name")
15
32
 
16
- class LogStash::Runner < Clamp::Command
17
-
18
- option ["-f", "--config"], "CONFIG_PATH",
33
+ # Config Settings
34
+ option ["-f", "--path.config"], "CONFIG_PATH",
19
35
  I18n.t("logstash.runner.flag.config"),
20
- :attribute_name => :config_path
36
+ :attribute_name => "path.config"
21
37
 
22
- option "-e", "CONFIG_STRING",
38
+ option ["-e", "--config.string"], "CONFIG_STRING",
23
39
  I18n.t("logstash.runner.flag.config-string",
24
- :default_input => LogStash::Config::Defaults.input,
25
- :default_output => LogStash::Config::Defaults.output),
26
- :default => nil, :attribute_name => :config_string
40
+ :default_input => LogStash::Config::Defaults.input,
41
+ :default_output => LogStash::Config::Defaults.output),
42
+ :default => LogStash::SETTINGS.get_default("config.string"),
43
+ :attribute_name => "config.string"
27
44
 
28
- option ["-w", "--pipeline-workers"], "COUNT",
45
+ # Pipeline settings
46
+ option ["-w", "--pipeline.workers"], "COUNT",
29
47
  I18n.t("logstash.runner.flag.pipeline-workers"),
30
- :attribute_name => :pipeline_workers,
31
- :default => LogStash::Pipeline::DEFAULT_SETTINGS[:default_pipeline_workers]
48
+ :attribute_name => "pipeline.workers",
49
+ :default => LogStash::SETTINGS.get_default("pipeline.workers"), &:to_i
32
50
 
33
- option ["-b", "--pipeline-batch-size"], "SIZE",
34
- I18n.t("logstash.runner.flag.pipeline-batch-size"),
35
- :attribute_name => :pipeline_batch_size,
36
- :default => LogStash::Pipeline::DEFAULT_SETTINGS[:pipeline_batch_size]
51
+ option ["-b", "--pipeline.batch.size"], "SIZE",
52
+ I18n.t("logstash.runner.flag.pipeline-batch-size"),
53
+ :attribute_name => "pipeline.batch.size",
54
+ :default => LogStash::SETTINGS.get_default("pipeline.batch.size"), &:to_i
37
55
 
38
- option ["-u", "--pipeline-batch-delay"], "DELAY_IN_MS",
39
- I18n.t("logstash.runner.flag.pipeline-batch-delay"),
40
- :attribute_name => :pipeline_batch_delay,
41
- :default => LogStash::Pipeline::DEFAULT_SETTINGS[:pipeline_batch_delay]
56
+ option ["-u", "--pipeline.batch.delay"], "DELAY_IN_MS",
57
+ I18n.t("logstash.runner.flag.pipeline-batch-delay"),
58
+ :attribute_name => "pipeline.batch.delay",
59
+ :default => LogStash::SETTINGS.get_default("pipeline.batch.delay"), &:to_i
60
+
61
+ option ["--pipeline.unsafe_shutdown"], :flag,
62
+ I18n.t("logstash.runner.flag.unsafe_shutdown"),
63
+ :attribute_name => "pipeline.unsafe_shutdown",
64
+ :default => LogStash::SETTINGS.get_default("pipeline.unsafe_shutdown")
42
65
 
43
- option ["-l", "--log"], "FILE",
66
+ # Plugins Settings
67
+ option ["-p", "--path.plugins"] , "PATH",
68
+ I18n.t("logstash.runner.flag.pluginpath"),
69
+ :multivalued => true, :attribute_name => "path.plugins",
70
+ :default => LogStash::SETTINGS.get_default("path.plugins")
71
+
72
+ # Logging Settings
73
+ option ["-l", "--path.log"], "FILE",
44
74
  I18n.t("logstash.runner.flag.log"),
45
- :attribute_name => :log_file
75
+ :attribute_name => "path.log"
46
76
 
47
- # Old support for the '-v' flag'
48
- option "-v", :flag,
49
- I18n.t("logstash.runner.flag.verbosity"),
50
- :attribute_name => :verbosity, :multivalued => true
77
+ option "--log.level", "LEVEL", I18n.t("logstash.runner.flag.log_level"),
78
+ :default => LogStash::SETTINGS.get_default("log.level")
51
79
 
52
- option "--quiet", :flag, I18n.t("logstash.runner.flag.quiet")
53
- option "--verbose", :flag, I18n.t("logstash.runner.flag.verbose")
54
- option "--debug", :flag, I18n.t("logstash.runner.flag.debug")
80
+ option "--config.debug", :flag,
81
+ I18n.t("logstash.runner.flag.config_debug"),
82
+ :default => LogStash::SETTINGS.get_default("config.debug"),
83
+ :attribute_name => "config.debug"
55
84
 
56
- option ["--debug-config"], :flag,
57
- I18n.t("logstash.runner.flag.debug_config"),
58
- :attribute_name => :debug_config, :default => false
85
+ # Other settings
86
+ option ["-i", "--interactive"], "SHELL",
87
+ I18n.t("logstash.runner.flag.rubyshell"),
88
+ :attribute_name => "interactive"
59
89
 
60
90
  option ["-V", "--version"], :flag,
61
91
  I18n.t("logstash.runner.flag.version")
62
92
 
63
- option ["-p", "--pluginpath"] , "PATH",
64
- I18n.t("logstash.runner.flag.pluginpath"),
65
- :multivalued => true,
66
- :attribute_name => :plugin_paths
67
-
68
- option ["-t", "--configtest"], :flag,
93
+ option ["-t", "--config.test_and_exit"], :flag,
69
94
  I18n.t("logstash.runner.flag.configtest"),
70
- :attribute_name => :config_test
95
+ :attribute_name => "config.test_and_exit",
96
+ :default => LogStash::SETTINGS.get_default("config.test_and_exit")
71
97
 
72
- option "--[no-]allow-unsafe-shutdown", :flag,
73
- I18n.t("logstash.runner.flag.unsafe_shutdown"),
74
- :attribute_name => :unsafe_shutdown,
75
- :default => false
76
-
77
- option ["-i", "--interactive"], "SHELL",
78
- I18n.t("logstash.runner.flag.rubyshell"),
79
- :attribute_name => :ruby_shell
80
-
81
- option ["-n", "--node-name"], "NAME",
82
- I18n.t("logstash.runner.flag.node_name"),
83
- :attribute_name => :node_name
84
-
85
- option ["-r", "--[no-]auto-reload"], :flag,
98
+ option ["-r", "--config.reload.automatic"], :flag,
86
99
  I18n.t("logstash.runner.flag.auto_reload"),
87
- :attribute_name => :auto_reload, :default => false
100
+ :attribute_name => "config.reload.automatic",
101
+ :default => LogStash::SETTINGS.get_default("config.reload.automatic")
88
102
 
89
- option ["--reload-interval"], "RELOAD_INTERVAL",
103
+ option ["--config.reload.interval"], "RELOAD_INTERVAL",
90
104
  I18n.t("logstash.runner.flag.reload_interval"),
91
- :attribute_name => :reload_interval, :default => 3, &:to_i
105
+ :attribute_name => "config.reload.interval",
106
+ :default => LogStash::SETTINGS.get_default("config.reload.interval"), &:to_i
92
107
 
93
- option ["--http-host"], "WEB_API_HTTP_HOST",
94
- I18n.t("logstash.web_api.flag.http_host"),
95
- :attribute_name => :web_api_http_host, :default => "127.0.0.1"
108
+ option ["--http.host"], "HTTP_HOST",
109
+ I18n.t("logstash.runner.flag.http_host"),
110
+ :attribute_name => "http.host",
111
+ :default => LogStash::SETTINGS.get_default("http.host")
96
112
 
97
- option ["--http-port"], "WEB_API_HTTP_PORT",
98
- I18n.t("logstash.web_api.flag.http_port"),
99
- :attribute_name => :web_api_http_port, :default => 9600
113
+ option ["--http.port"], "HTTP_PORT",
114
+ I18n.t("logstash.runner.flag.http_port"),
115
+ :attribute_name => "http.port",
116
+ :default => LogStash::SETTINGS.get_default("http.port"), &:to_i
100
117
 
101
- option ["--allow-env"], :flag,
102
- I18n.t("logstash.runner.flag.allow-env"),
103
- :attribute_name => :allow_env, :default => false
118
+ option ["--log.format"], "FORMAT",
119
+ I18n.t("logstash.runner.flag.log_format"),
120
+ :attribute_name => "log.format",
121
+ :default => LogStash::SETTINGS.get_default("log.format")
104
122
 
105
- def pipeline_workers=(pipeline_workers_value)
106
- @pipeline_settings[:pipeline_workers] = validate_positive_integer(pipeline_workers_value)
107
- end
123
+ option ["--path.settings"], "SETTINGS_DIR",
124
+ I18n.t("logstash.runner.flag.path_settings"),
125
+ :attribute_name => "path.settings",
126
+ :default => LogStash::SETTINGS.get_default("path.settings")
108
127
 
109
- def pipeline_batch_size=(pipeline_batch_size_value)
110
- @pipeline_settings[:pipeline_batch_size] = validate_positive_integer(pipeline_batch_size_value)
111
- end
128
+ attr_reader :agent
112
129
 
113
- def pipeline_batch_delay=(pipeline_batch_delay_value)
114
- @pipeline_settings[:pipeline_batch_delay] = validate_positive_integer(pipeline_batch_delay_value)
130
+ def initialize(*args)
131
+ @logger = Cabin::Channel.get(LogStash)
132
+ @settings = LogStash::SETTINGS
133
+ super(*args)
115
134
  end
116
135
 
117
- def validate_positive_integer(str_arg)
118
- int_arg = str_arg.to_i
119
- if str_arg !~ /^\d+$/ || int_arg < 1
120
- raise ArgumentError, "Expected a positive integer, got '#{str_arg}'"
121
- end
136
+ def run(args)
137
+ settings_path = fetch_settings_path(args)
122
138
 
123
- int_arg
124
- end
139
+ @settings.set("path.settings", settings_path) if settings_path
125
140
 
126
- attr_reader :agent
141
+ begin
142
+ LogStash::SETTINGS.from_yaml(LogStash::SETTINGS.get("path.settings"))
143
+ rescue => e
144
+ @logger.subscribe(STDOUT)
145
+ @logger.warn("Logstash has a new settings file which defines start up time settings. This file is typically located in $LS_HOME/config or /etc/logstash. If you installed Logstash through a package and are starting it manually please specify the location to this settings file by passing in \"--path.settings=/path/..\" in the command line options")
146
+ @logger.fatal("Failed to load settings file from \"path.settings\". Aborting...", "path.settings" => LogStash::SETTINGS.get("path.settings"), "exception" => e.class, "message" => e.message)
147
+ exit(-1)
148
+ end
127
149
 
128
- def initialize(*args)
129
- @logger = Cabin::Channel.get(LogStash)
130
- @pipeline_settings ||= { :pipeline_id => "main" }
131
- super(*args)
150
+ super(*[args])
132
151
  end
133
152
 
134
153
  def execute
@@ -136,11 +155,11 @@ class LogStash::Runner < Clamp::Command
136
155
  require "logstash/util/java_version"
137
156
  require "stud/task"
138
157
  require "cabin" # gem 'cabin'
139
-
158
+ require "logstash/logging/json"
140
159
 
141
160
  # Configure Logstash logging facility, this need to be done before everything else to
142
161
  # make sure the logger has the correct settings and the log level is correctly defined.
143
- configure_logging(log_file)
162
+ configure_logging(setting("path.log"), setting("log.level"))
144
163
 
145
164
  LogStash::Util::set_thread_name(self.class.name)
146
165
 
@@ -149,33 +168,39 @@ class LogStash::Runner < Clamp::Command
149
168
  return 1
150
169
  end
151
170
 
152
- # Print a warning to STDERR for bad java versions
153
- LogStash::Util::JavaVersion.warn_on_bad_java_version
171
+ # Exit on bad java versions
172
+ java_version = LogStash::Util::JavaVersion.version
173
+ if LogStash::Util::JavaVersion.bad_java_version?(java_version)
174
+ $stderr.puts "Java version 1.8.0 or later is required. (You are running: #{java_version})"
175
+ return 1
176
+ end
154
177
 
155
- LogStash::ShutdownWatcher.unsafe_shutdown = unsafe_shutdown?
178
+ LogStash::ShutdownWatcher.unsafe_shutdown = setting("pipeline.unsafe_shutdown")
156
179
  LogStash::ShutdownWatcher.logger = @logger
157
180
 
158
- configure
181
+ configure_plugin_paths(setting("path.plugins"))
159
182
 
160
183
  if version?
161
184
  show_version
162
185
  return 0
163
186
  end
164
187
 
165
- return start_shell(@ruby_shell, binding) if @ruby_shell
188
+ return start_shell(setting("interactive"), binding) if setting("interactive")
189
+
190
+ @settings.format_settings.each {|line| @logger.info(line) }
166
191
 
167
- if config_string.nil? && config_path.nil?
192
+ if setting("config.string").nil? && setting("path.config").nil?
168
193
  fail(I18n.t("logstash.runner.missing-configuration"))
169
194
  end
170
195
 
171
- if @auto_reload && config_path.nil?
196
+ if setting("config.reload.automatic") && setting("path.config").nil?
172
197
  # there's nothing to reload
173
198
  signal_usage_error(I18n.t("logstash.runner.reload-without-config-path"))
174
199
  end
175
200
 
176
- if config_test?
177
- config_loader = LogStash::Config::Loader.new(@logger, @debug_config)
178
- config_str = config_loader.format_config(config_path, config_string)
201
+ if setting("config.test_and_exit")
202
+ config_loader = LogStash::Config::Loader.new(@logger)
203
+ config_str = config_loader.format_config(setting("path.config"), setting("config.string"))
179
204
  begin
180
205
  LogStash::Pipeline.new(config_str)
181
206
  @logger.terminal "Configuration OK"
@@ -186,22 +211,9 @@ class LogStash::Runner < Clamp::Command
186
211
  end
187
212
  end
188
213
 
189
- @agent = create_agent(:logger => @logger,
190
- :auto_reload => @auto_reload,
191
- :reload_interval => @reload_interval,
192
- :collect_metric => true,
193
- :debug => debug?,
194
- :node_name => node_name,
195
- :debug_config => debug_config?,
196
- :web_api_http_host => @web_api_http_host,
197
- :web_api_http_port => @web_api_http_port)
198
-
199
- @agent.register_pipeline("main", @pipeline_settings.merge({
200
- :config_string => config_string,
201
- :config_path => config_path,
202
- :debug_config => debug_config?,
203
- :allow_env => allow_env?
204
- }))
214
+ @agent = create_agent(@settings)
215
+
216
+ @agent.register_pipeline("main", @settings)
205
217
 
206
218
  # enable sigint/sigterm before starting the agent
207
219
  # to properly handle a stalled agent
@@ -236,10 +248,10 @@ class LogStash::Runner < Clamp::Command
236
248
  def show_version
237
249
  show_version_logstash
238
250
 
239
- if [:info, :debug].include?(verbosity?) || debug? || verbose?
251
+ if @logger.debug? || @logger.info?
240
252
  show_version_ruby
241
253
  show_version_java if LogStash::Environment.jruby?
242
- show_gems if [:debug].include?(verbosity?) || debug?
254
+ show_gems if @logger.debug?
243
255
  end
244
256
  end # def show_version
245
257
 
@@ -265,13 +277,6 @@ class LogStash::Runner < Clamp::Command
265
277
  end
266
278
  end # def show_gems
267
279
 
268
- # Do any start-time configuration.
269
- #
270
- # Log file stuff, plugin path checking, etc.
271
- def configure
272
- configure_plugin_paths(plugin_paths)
273
- end # def configure
274
-
275
280
  # add the given paths for ungemified/bare plugins lookups
276
281
  # @param paths [String, Array<String>] plugins path string or list of path strings to add
277
282
  def configure_plugin_paths(paths)
@@ -286,32 +291,21 @@ class LogStash::Runner < Clamp::Command
286
291
  end
287
292
 
288
293
  # Point logging at a specific path.
289
- def configure_logging(path)
294
+ def configure_logging(path, level)
290
295
  @logger = Cabin::Channel.get(LogStash)
291
296
  # Set with the -v (or -vv...) flag
292
- if quiet?
297
+ case level
298
+ when "quiet"
293
299
  @logger.level = :error
294
- elsif verbose?
300
+ when "verbose"
295
301
  @logger.level = :info
296
- elsif debug?
302
+ when "debug"
297
303
  @logger.level = :debug
298
304
  else
299
- # Old support for the -v and -vv stuff.
300
- if verbosity? && verbosity?.any?
301
- # this is an array with length of how many times the flag is given
302
- if verbosity?.length == 1
303
- @logger.warn("The -v flag is deprecated and will be removed in a future release. You should use --verbose instead.")
304
- @logger.level = :info
305
- else
306
- @logger.warn("The -vv flag is deprecated and will be removed in a future release. You should use --debug instead.")
307
- @logger.level = :debug
308
- end
309
- else
310
- @logger.level = :warn
311
- end
305
+ @logger.level = :warn
312
306
  end
313
307
 
314
- if log_file
308
+ if path
315
309
  # TODO(sissel): Implement file output/rotation in Cabin.
316
310
  # TODO(sissel): Catch exceptions, report sane errors.
317
311
  begin
@@ -322,15 +316,24 @@ class LogStash::Runner < Clamp::Command
322
316
  :path => path, :error => e))
323
317
  end
324
318
 
325
- @logger.subscribe(STDOUT, :level => :fatal)
326
- @logger.subscribe(@log_fd)
319
+ if setting("log.format") == "json"
320
+ @logger.subscribe(LogStash::Logging::JSON.new(STDOUT), :level => :fatal)
321
+ @logger.subscribe(LogStash::Logging::JSON.new(@log_fd))
322
+ else
323
+ @logger.subscribe(STDOUT, :level => :fatal)
324
+ @logger.subscribe(@log_fd)
325
+ end
327
326
  @logger.terminal "Sending logstash logs to #{path}."
328
327
  else
329
- @logger.subscribe(STDOUT)
328
+ if setting("log.format") == "json"
329
+ @logger.subscribe(LogStash::Logging::JSON.new(STDOUT))
330
+ else
331
+ @logger.subscribe(STDOUT)
332
+ end
330
333
  end
331
334
 
332
- if debug_config? && @logger.level != :debug
333
- @logger.warn("--debug-config was specified, but log level was not set to --debug! No config info will be logged.")
335
+ if setting("config.debug") && @logger.level != :debug
336
+ @logger.warn("--config.debug was specified, but log.level was not set to \'debug\'! No config info will be logged.")
334
337
  end
335
338
 
336
339
  # TODO(sissel): redirect stdout/stderr to the log as well
@@ -390,4 +393,26 @@ class LogStash::Runner < Clamp::Command
390
393
  end
391
394
  end
392
395
 
393
- end # class LogStash::Runner
396
+ def setting(key)
397
+ @settings.get_value(key)
398
+ end
399
+
400
+ # where can I find the logstash.yml file?
401
+ # 1. look for a "--path.settings path"
402
+ # 2. look for a "--path.settings=path"
403
+ # 3. check if the LS_SETTINGS_DIR environment variable is set
404
+ # 4. return nil if not found
405
+ def fetch_settings_path(cli_args)
406
+ if i=cli_args.find_index("--path.settings")
407
+ cli_args[i+1]
408
+ elsif settings_arg = cli_args.find {|v| v.match(/--path.settings=/) }
409
+ match = settings_arg.match(/--path.settings=(.*)/)
410
+ match[1]
411
+ elsif ENV['LS_SETTINGS_DIR']
412
+ ENV['LS_SETTINGS_DIR']
413
+ else
414
+ nil
415
+ end
416
+ end
417
+
418
+ end