2017-01-24 2 views
0

При попытке запуска logstash 5 на окнах:Logstash не смог найти конфигурационный файл log4j2.properties

C:\Development\workspace\logstash>C:\Development\Software\logstash-5.1.2\bin\logstash.bat -f robot-log.js

Это дает следующие ошибки:

Could not find log4j2 configuration at path /Development/Software/logstash-5.1.2/config/log4j2.properties. Using default config which logs to console 
15:03:53.667 [[main]-pipeline-manager] INFO logstash.filters.multiline - Grok loading patterns from file {:path=>"C:/Development/Software/logstash-5.1.2/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-4.0.2/patterns/aws"} 
15:03:53.684 [[main]-pipeline-manager] INFO logstash.filters.multiline - Grok loading patterns from file {:path=>"C:/Development/Software/logstash-5.1.2/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-4.0.2/patterns/bacula"} 
15:03:53.693 [[main]-pipeline-manager] INFO logstash.filters.multiline - Grok loading patterns from file ... 

Файл действительно присутствует в каталоге. Почему logstash не может его найти?

Note: Первоначально, хотя это была проблема с Ruby с использованием разделителя путей Linux. Однако, как отметил @Stefan в комментариях ниже, Ruby принимает пути стиля Linux даже в Windows

+1

AFAIK, Ruby принимают '/' как разделитель путей, даже под окнами. Вы уверены, что разделитель вызывает проблему? – Stefan

+0

@Stefan Я думаю, что файл конфигурации поставляется с логсташем по умолчанию. И я вижу, что он присутствует на этом пути. –

+0

@Stefan Вы были верны. Это не проблема Ruby, но, похоже, ошибка в logstash. –

ответ

1

Это, кажется, ошибка в последней версии logstash. Под logger.rb он имеет следующий код:

def self.initialize(config_location) 
     @@config_mutex.synchronize do 
      if @@logging_context.nil? 
      file_path = URI(config_location).path 
      if ::File.exists?(file_path) 
       logs_location = java.lang.System.getProperty("ls.logs") 
       puts "Sending Logstash's logs to #{logs_location} which is now configured via log4j2.properties" 
       @@logging_context = Configurator.initialize(nil, config_location) 
      else 
       # fall back to default config 
       puts "Could not find log4j2 configuration at path #{file_path}. Using default config which logs to console" 
       @@logging_context = Configurator.initialize(DefaultConfiguration.new) 
      end 
      end 
     end 
     end 

Вызов URI.path представляется проблематичным, поскольку в соответствии с documentation он возвращает /posts, когда вход http://foo.com/posts?id=30&limit=5#time=1305298413

Я не программист, рубин, так что я понятия не имею, почему logstash devs использовали его здесь. Но просто заменив file_path = URI(config_location).path на file_path = config_location, эта проблема устраняет проблему.

C:\Development\workspace\logstash>C:\Development\Software\logstash-5.1.2\bin\logstash.bat -f robot-log.js 
Sending Logstash's logs to C:/Development/Software/logstash-5.1.2/logs which is now configured via log4j2.properties 
[2017-01-24T15:22:04,754][INFO ][logstash.filters.multiline] Grok loading patterns from file {:path=>"C:/Development/Software/logstash-5.1.2/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-4.0.2/patterns/aws"} 
[2017-01-24T15:22:04,769][INFO ][logstash.filters.multiline] Grok loading patterns from file {:path=>"C:/Development/Software/logstash-5.1.2/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-4.0.2/patterns/bacula"} 
[2017-01-24T15:22:04,772][INFO ][logstash.filters.multiline] Grok loading patterns from file {:path=>"C:/Development/Software/logstash-5.1.2/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-4.0.2/patterns/bro"} 
Смежные вопросы