From 319e67dceb8f8e12fbd2e81f59b8385803175cb0 Mon Sep 17 00:00:00 2001 From: Ry Biesemeyer Date: Mon, 24 Jan 2022 08:53:09 -0800 Subject: [PATCH] logging: move init into environment's settings post-processor (#13221) (#13663) * logging: move init into environment's settings post-processor Ensures that the non-runner command line utilities like `bin/logstash-keystore` correctly initialize the logger as-configured. * fixup: ensure we get ruby stdlib URI & File (cherry picked from commit 2a5e54cd218895657a41f04202d815572aaeff8b) --- logstash-core/lib/logstash/environment.rb | 17 +++++++++++++++++ logstash-core/lib/logstash/runner.rb | 16 ---------------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/logstash-core/lib/logstash/environment.rb b/logstash-core/lib/logstash/environment.rb index 025e72d42..8fe861a7f 100644 --- a/logstash-core/lib/logstash/environment.rb +++ b/logstash-core/lib/logstash/environment.rb @@ -112,6 +112,23 @@ module LogStash default_dlq_file_path = ::File.join(SETTINGS.get("path.data"), "dead_letter_queue") SETTINGS.register Setting::WritableDirectory.new("path.dead_letter_queue", default_dlq_file_path) + SETTINGS.on_post_process do |settings| + # Configure Logstash logging facility. This needs to be done as early as possible to + # make sure the logger has the correct settings tnd the log level is correctly defined. + java.lang.System.setProperty("ls.logs", settings.get("path.logs")) + java.lang.System.setProperty("ls.log.format", settings.get("log.format")) + java.lang.System.setProperty("ls.log.level", settings.get("log.level")) + java.lang.System.setProperty("ls.pipeline.separate_logs", settings.get("pipeline.separate_logs").to_s) + unless java.lang.System.getProperty("log4j.configurationFile") + log4j_config_location = ::File.join(settings.get("path.settings"), "log4j2.properties") + + # Windows safe way to produce a file: URI. + file_schema = "file://" + (LogStash::Environment.windows? ? "/" : "") + LogStash::Logging::Logger::reconfigure(::URI.encode(file_schema + ::File.absolute_path(log4j_config_location))) + end + # override log level that may have been introduced from a custom log4j config file + LogStash::Logging::Logger::configure_logging(settings.get("log.level")) + end SETTINGS.on_post_process do |settings| # If the data path is overridden but the queue path isn't recompute the queue path diff --git a/logstash-core/lib/logstash/runner.rb b/logstash-core/lib/logstash/runner.rb index cda5314fc..ab5c848fb 100644 --- a/logstash-core/lib/logstash/runner.rb +++ b/logstash-core/lib/logstash/runner.rb @@ -299,22 +299,6 @@ class LogStash::Runner < Clamp::StrictCommand require "logstash/util/java_version" require "stud/task" - # Configure Logstash logging facility, this need to be done before everything else to - # make sure the logger has the correct settings and the log level is correctly defined. - java.lang.System.setProperty("ls.logs", setting("path.logs")) - java.lang.System.setProperty("ls.log.format", setting("log.format")) - java.lang.System.setProperty("ls.log.level", setting("log.level")) - java.lang.System.setProperty("ls.pipeline.separate_logs", setting("pipeline.separate_logs").to_s) - unless java.lang.System.getProperty("log4j.configurationFile") - log4j_config_location = ::File.join(setting("path.settings"), "log4j2.properties") - - # Windows safe way to produce a file: URI. - file_schema = "file://" + (LogStash::Environment.windows? ? "/" : "") - LogStash::Logging::Logger::reconfigure(URI.encode(file_schema + File.absolute_path(log4j_config_location))) - end - # override log level that may have been introduced from a custom log4j config file - LogStash::Logging::Logger::configure_logging(setting("log.level")) - if log_configuration_contains_javascript_usage? logger.warn("Logging configuration uses appender or filter with scripting language JavaScript, which will be removed in a future major release of Logstash.") end